aboutsummaryrefslogtreecommitdiffstats
path: root/src/decoder
diff options
context:
space:
mode:
Diffstat (limited to 'src/decoder')
-rw-r--r--src/decoder/aac_plugin.c28
-rw-r--r--src/decoder/mp4_plugin.c10
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);