diff options
Diffstat (limited to 'src/decoder')
-rw-r--r-- | src/decoder/aac_plugin.c | 28 | ||||
-rw-r--r-- | src/decoder/mp4_plugin.c | 10 |
2 files changed, 31 insertions, 7 deletions
diff --git a/src/decoder/aac_plugin.c b/src/decoder/aac_plugin.c index 76f5480e7..95b19735a 100644 --- a/src/decoder/aac_plugin.c +++ b/src/decoder/aac_plugin.c @@ -251,7 +251,15 @@ static float getAacFloatTotalTime(const char *file) float length; faacDecHandle decoder; faacDecConfigurationPtr config; - unsigned long sample_rate; + uint32_t sample_rate; +#ifdef HAVE_FAAD_LONG + /* neaacdec.h declares all arguments as "unsigned long", but + internally expects uint32_t pointers. To avoid gcc + warnings, use this workaround. */ + unsigned long *sample_rate_r = (unsigned long*)&sample_rate; +#else + uint32_t *sample_rate_r = &sample_rate; +#endif unsigned char channels; struct input_stream inStream; long bread; @@ -272,9 +280,9 @@ static float getAacFloatTotalTime(const char *file) fillAacBuffer(&b); #ifdef HAVE_FAAD_BUFLEN_FUNCS bread = faacDecInit(decoder, b.buffer, b.bytesIntoBuffer, - &sample_rate, &channels); + sample_rate_r, &channels); #else - bread = faacDecInit(decoder, b.buffer, &sample_rate, &channels); + bread = faacDecInit(decoder, b.buffer, sample_rate_r, &channels); #endif if (bread >= 0 && sample_rate > 0 && channels > 0) length = 0; @@ -307,7 +315,15 @@ aac_stream_decode(struct decoder *mpd_decoder, struct input_stream *inStream) faacDecFrameInfo frameInfo; faacDecConfigurationPtr config; long bread; - unsigned long sample_rate; + uint32_t sample_rate; +#ifdef HAVE_FAAD_LONG + /* neaacdec.h declares all arguments as "unsigned long", but + internally expects uint32_t pointers. To avoid gcc + warnings, use this workaround. */ + unsigned long *sample_rate_r = (unsigned long*)&sample_rate; +#else + uint32_t *sample_rate_r = &sample_rate; +#endif unsigned char channels; unsigned int sampleCount; char *sampleBuffer; @@ -343,9 +359,9 @@ aac_stream_decode(struct decoder *mpd_decoder, struct input_stream *inStream) #ifdef HAVE_FAAD_BUFLEN_FUNCS bread = faacDecInit(decoder, b.buffer, b.bytesIntoBuffer, - &sample_rate, &channels); + sample_rate_r, &channels); #else - bread = faacDecInit(decoder, b.buffer, &sample_rate, &channels); + bread = faacDecInit(decoder, b.buffer, sample_rate_r, &channels); #endif if (bread < 0) { ERROR("Error not a AAC stream.\n"); diff --git a/src/decoder/mp4_plugin.c b/src/decoder/mp4_plugin.c index 2736d3059..f97ffe50a 100644 --- a/src/decoder/mp4_plugin.c +++ b/src/decoder/mp4_plugin.c @@ -112,6 +112,14 @@ mp4_decode(struct decoder *mpd_decoder, struct input_stream *input_stream) unsigned char *mp4_buffer; unsigned int mp4_buffer_size; uint32_t sample_rate; +#ifdef HAVE_FAAD_LONG + /* neaacdec.h declares all arguments as "unsigned long", but + internally expects uint32_t pointers. To avoid gcc + warnings, use this workaround. */ + unsigned long *sample_rate_r = (unsigned long*)&sample_rate; +#else + uint32_t *sample_rate_r = &sample_rate; +#endif unsigned char channels; long sample_id; long num_samples; @@ -160,7 +168,7 @@ mp4_decode(struct decoder *mpd_decoder, struct input_stream *input_stream) mp4ff_get_decoder_config(mp4fh, track, &mp4_buffer, &mp4_buffer_size); if (faacDecInit2(decoder, mp4_buffer, mp4_buffer_size, - &sample_rate, &channels) < 0) { + sample_rate_r, &channels) < 0) { g_warning("Not an AAC stream.\n"); faacDecClose(decoder); mp4ff_close(mp4fh); |