aboutsummaryrefslogtreecommitdiffstats
path: root/src/decoder
diff options
context:
space:
mode:
Diffstat (limited to 'src/decoder')
-rw-r--r--src/decoder/mp4ff_decoder_plugin.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/src/decoder/mp4ff_decoder_plugin.c b/src/decoder/mp4ff_decoder_plugin.c
index a472dfbe1..4f4e563b9 100644
--- a/src/decoder/mp4ff_decoder_plugin.c
+++ b/src/decoder/mp4ff_decoder_plugin.c
@@ -37,6 +37,8 @@
/* all code here is either based on or copied from FAAD2's frontend code */
struct mp4ff_input_stream {
+ mp4ff_callback_t callback;
+
struct decoder *decoder;
struct input_stream *input_stream;
};
@@ -104,6 +106,11 @@ mp4_seek(void *user_data, uint64_t position)
? 0 : -1;
}
+static const mp4ff_callback_t mpd_mp4ff_callback = {
+ .read = mp4_read,
+ .seek = mp4_seek,
+};
+
static faacDecHandle
mp4_faad_new(mp4ff_t *mp4fh, int *track_r, struct audio_format *audio_format)
{
@@ -151,14 +158,10 @@ static void
mp4_decode(struct decoder *mpd_decoder, struct input_stream *input_stream)
{
struct mp4ff_input_stream mis = {
+ .callback = mpd_mp4ff_callback,
.decoder = mpd_decoder,
.input_stream = input_stream,
};
- mp4ff_callback_t callback = {
- .read = mp4_read,
- .seek = mp4_seek,
- .user_data = &mis,
- };
mp4ff_t *mp4fh;
int32_t track;
float file_time, total_time;
@@ -184,7 +187,9 @@ mp4_decode(struct decoder *mpd_decoder, struct input_stream *input_stream)
double seek_where = 0;
enum decoder_command cmd = DECODE_COMMAND_NONE;
- mp4fh = mp4ff_open_read(&callback);
+ mis.callback.user_data = &mis;
+
+ mp4fh = mp4ff_open_read(&mis.callback);
if (!mp4fh) {
g_warning("Input does not appear to be a mp4 stream.\n");
return;
@@ -357,21 +362,19 @@ mp4_stream_tag(struct input_stream *is)
{
struct tag *ret = NULL;
struct mp4ff_input_stream mis = {
+ .callback = mpd_mp4ff_callback,
.decoder = NULL,
.input_stream = is,
};
- mp4ff_callback_t callback = {
- .read = mp4_read,
- .seek = mp4_seek,
- .user_data = &mis,
- };
mp4ff_t *mp4fh;
int32_t track;
int32_t file_time;
int32_t scale;
int i;
- mp4fh = mp4ff_open_read(&callback);
+ mis.callback.user_data = &mis;
+
+ mp4fh = mp4ff_open_read(&mis.callback);
if (mp4fh == NULL)
return NULL;