diff options
Diffstat (limited to 'src/decoder')
-rw-r--r-- | src/decoder/mp4_plugin.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/decoder/mp4_plugin.c b/src/decoder/mp4_plugin.c index 76c3482cc..f5a61fe03 100644 --- a/src/decoder/mp4_plugin.c +++ b/src/decoder/mp4_plugin.c @@ -128,6 +128,7 @@ mp4_decode(struct decoder *mpd_decoder, struct input_stream *input_stream) bool seeking = false; double seek_where = 0; bool initialized = false; + enum decoder_command cmd = DECODE_COMMAND_NONE; mp4fh = mp4ff_open_read(&callback); if (!mp4fh) { @@ -191,8 +192,10 @@ mp4_decode(struct decoder *mpd_decoder, struct input_stream *input_stream) seek_table = g_malloc(sizeof(float) * num_samples); - for (sample_id = 0; sample_id < num_samples; sample_id++) { - if (decoder_get_command(mpd_decoder) == DECODE_COMMAND_SEEK) { + for (sample_id = 0; + sample_id < num_samples && cmd != DECODE_COMMAND_STOP; + sample_id++) { + if (cmd == DECODE_COMMAND_SEEK) { seeking = true; seek_where = decoder_seek_where(mpd_decoder); } @@ -288,11 +291,9 @@ mp4_decode(struct decoder *mpd_decoder, struct input_stream *input_stream) sample_buffer += offset * channels * 2; - decoder_data(mpd_decoder, input_stream, sample_buffer, - sample_buffer_length, file_time, - bit_rate, NULL); - if (decoder_get_command(mpd_decoder) == DECODE_COMMAND_STOP) - break; + cmd = decoder_data(mpd_decoder, input_stream, + sample_buffer, sample_buffer_length, + file_time, bit_rate, NULL); } free(seek_table); |