Commit b15c4cde authored by Max Kellermann's avatar Max Kellermann

ffmpeg: use return value of decoder_data()

decoder_data() always returns the current command. If we use this, we can save a lot of decoder_get_command() calls.
parent f3b4a285
......@@ -213,7 +213,7 @@ ffmpeg_try_decode(struct input_stream *input)
return input->seekable && ffmpeg_helper(input, NULL, NULL);
}
static void
static enum decoder_command
ffmpeg_send_packet(struct decoder *decoder, const AVPacket *packet,
AVCodecContext *codec_context,
const AVRational *time_base)
......@@ -233,12 +233,12 @@ ffmpeg_send_packet(struct decoder *decoder, const AVPacket *packet,
if (len < 0) {
WARNING("skipping frame!\n");
return;
return decoder_get_command(decoder);
}
assert(audio_size >= 0);
decoder_data(decoder, NULL, 1,
return decoder_data(decoder, NULL, 1,
audio_buf, audio_size,
position,
codec_context->bit_rate / 1000, NULL);
......@@ -252,6 +252,7 @@ ffmpeg_decode_internal(BasePtrs *base)
AVFormatContext *pFormatCtx = base->pFormatCtx;
AVPacket packet;
struct audio_format audio_format;
enum decoder_command cmd;
int current, total_time;
total_time = 0;
......@@ -272,26 +273,27 @@ ffmpeg_decode_internal(BasePtrs *base)
decoder_initialized(decoder, &audio_format, total_time);
do {
if (decoder_get_command(decoder) == DECODE_COMMAND_SEEK) {
current = decoder_seek_where(decoder) * AV_TIME_BASE;
if (av_seek_frame(pFormatCtx, -1, current, 0) < 0)
decoder_seek_error(decoder);
else
decoder_command_finished(decoder);
}
if (av_read_frame(pFormatCtx, &packet) < 0)
/* end of file */
break;
if (packet.stream_index == base->audioStream)
ffmpeg_send_packet(decoder, &packet, aCodecCtx,
cmd = ffmpeg_send_packet(decoder, &packet, aCodecCtx,
&pFormatCtx->streams[base->audioStream]->time_base);
else
cmd = decoder_get_command(decoder);
av_free_packet(&packet);
} while (decoder_get_command(decoder) != DECODE_COMMAND_STOP);
if (cmd == DECODE_COMMAND_SEEK) {
current = decoder_seek_where(decoder) * AV_TIME_BASE;
if (av_seek_frame(pFormatCtx, -1, current, 0) < 0)
decoder_seek_error(decoder);
else
decoder_command_finished(decoder);
}
} while (cmd != DECODE_COMMAND_STOP);
return true;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment