diff options
Diffstat (limited to '')
-rw-r--r-- | src/decode.c | 4 | ||||
-rw-r--r-- | src/mp3_decode.c | 11 | ||||
-rw-r--r-- | src/mp3_decode.h | 3 |
3 files changed, 11 insertions, 7 deletions
diff --git a/src/decode.c b/src/decode.c index 86f0fc69b..7582c4e93 100644 --- a/src/decode.c +++ b/src/decode.c @@ -291,7 +291,7 @@ void decodeStart(PlayerControl * pc, OutputBuffer * cb, DecoderControl * dc) { /*if(fileSuffix == DECODE_SUFFIX_MP3 || (inStream.mime && 0 == strcmp(inStream.mime, "audio/mpeg")))*/ { - ret = mp3_decode(cb,dc,&inStream); + ret = mp3_decode(cb, dc, &inStream, 0); break; } ret = DECODE_ERROR_UNKTYPE; @@ -299,7 +299,7 @@ void decodeStart(PlayerControl * pc, OutputBuffer * cb, DecoderControl * dc) { case DECODE_TYPE_FILE: #ifdef HAVE_MAD if(suffix == DECODE_SUFFIX_MP3) { - ret = mp3_decode(cb, dc, &inStream); + ret = mp3_decode(cb, dc, &inStream, 1); break; } #endif diff --git a/src/mp3_decode.c b/src/mp3_decode.c index 643604fe1..c1eea2f0a 100644 --- a/src/mp3_decode.c +++ b/src/mp3_decode.c @@ -152,7 +152,6 @@ void initMp3DecodeData(mp3DecodeData * data, InputStream * inStream) { data->inStream = inStream; mad_stream_init(&data->stream); - data->stream.options |= MAD_OPTION_IGNORECRC; mad_frame_init(&data->frame); mad_synth_init(&data->synth); mad_timer_reset(&data->timer); @@ -411,6 +410,7 @@ int getMp3TotalTime(char * file) { if(openInputStream(&inStream, file) < 0) return -1; initMp3DecodeData(&data,&inStream); + data.stream.options |= MAD_OPTION_IGNORECRC; if(decodeFirstFrame(&data, NULL)<0) ret = -1; else ret = data.totalTime+0.5; mp3DecodeDataFinalize(&data); @@ -419,9 +419,10 @@ int getMp3TotalTime(char * file) { } int openMp3FromInputStream(InputStream * inStream, mp3DecodeData * data, - DecoderControl * dc) + DecoderControl * dc, int ignoreCrc) { initMp3DecodeData(data, inStream); + if(ignoreCrc) data->stream.options |= MAD_OPTION_IGNORECRC; if(decodeFirstFrame(data, dc)<0) { mp3DecodeDataFinalize(data); return -1; @@ -561,10 +562,12 @@ void initAudioFormatFromMp3DecodeData(mp3DecodeData * data, AudioFormat * af) { af->channels = MAD_NCHANNELS(&(data->frame).header); } -int mp3_decode(OutputBuffer * cb, DecoderControl * dc, InputStream * inStream) { +int mp3_decode(OutputBuffer * cb, DecoderControl * dc, InputStream * inStream, + int ignoreCrc) +{ mp3DecodeData data; - if(openMp3FromInputStream(inStream, &data, dc) < 0) { + if(openMp3FromInputStream(inStream, &data, dc, ignoreCrc) < 0) { closeInputStream(inStream); if(!dc->stop) { ERROR("Input does not appear to be a mp3 bit stream.\n"); diff --git a/src/mp3_decode.h b/src/mp3_decode.h index e33cd60c3..7cc1ecfb4 100644 --- a/src/mp3_decode.h +++ b/src/mp3_decode.h @@ -29,7 +29,8 @@ /* this is primarily used in tag.c */ int getMp3TotalTime(char * file); -int mp3_decode(OutputBuffer * cb, DecoderControl * dc, InputStream * inStream); +int mp3_decode(OutputBuffer * cb, DecoderControl * dc, InputStream * inStream, + int ignoreCrc); #endif |