aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/decode.c4
-rw-r--r--src/mp3_decode.c11
-rw-r--r--src/mp3_decode.h3
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