From 71c1a8a02a3f33d1e49d8c6cf0a4b23016b63bc0 Mon Sep 17 00:00:00 2001 From: Mikhail Burakov Date: Wed, 12 Apr 2023 07:06:36 +0200 Subject: Minor cleanup in frame encoding --- encode.c | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) (limited to 'encode.c') diff --git a/encode.c b/encode.c index 00fdaf2..09c03ad 100644 --- a/encode.c +++ b/encode.c @@ -264,27 +264,25 @@ bool EncodeContextEncodeFrame(struct EncodeContext* encode_context, int fd) { goto rollback_packet; } - for (;;) { - err = avcodec_receive_packet(encode_context->codec_context, packet); - switch (err) { - case 0: - break; - case AVERROR(EAGAIN): - case AVERROR_EOF: - result = true; - goto rollback_packet; - default: - LOG("Failed to receive packet (%s)", av_err2str(err)); - goto rollback_packet; - } - - packet->stream_index = 0; - bool result = DrainPacket(packet, fd); - av_packet_unref(packet); - if (!result) { - LOG("Failed to drain packet"); + err = avcodec_receive_packet(encode_context->codec_context, packet); + switch (err) { + case 0: + break; + case AVERROR(EAGAIN): + // TODO(mburakov): This happens only for the very first frame, and + // effectively introduces an additional latency of 16ms... + result = true; goto rollback_packet; - } + default: + LOG("Failed to receive packet (%s)", av_err2str(err)); + goto rollback_packet; + } + + result = DrainPacket(packet, fd); + av_packet_unref(packet); + if (!result) { + LOG("Failed to drain packet"); + goto rollback_packet; } rollback_packet: -- cgit v1.2.3