ffmpeg | branch: master | Anton Khirnov <an...@khirnov.net> | Wed Apr 3 12:32:51 2024 +0200| [64743b45b5741969074213004ca2f44a89f1ffb3] | committer: Anton Khirnov
lavc/internal: document the precise meaning of AVCodecInternal.draining Also, set draining=1 in case a bitstream filter returns an internally-triggered EOF. While no bitstream filters currently inserted by decoders will do that, that may change in the future and it is better to cover this case. > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=64743b45b5741969074213004ca2f44a89f1ffb3 --- libavcodec/decode.c | 12 +++++------- libavcodec/internal.h | 6 +++++- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/libavcodec/decode.c b/libavcodec/decode.c index c5873391d0..d8e60567bd 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -213,8 +213,6 @@ static int decode_get_packet(AVCodecContext *avctx, AVPacket *pkt) int ret; ret = av_bsf_receive_packet(avci->bsf, pkt); - if (ret == AVERROR_EOF) - avci->draining = 1; if (ret < 0) return ret; @@ -247,14 +245,14 @@ int ff_decode_get_packet(AVCodecContext *avctx, AVPacket *pkt) if (ret == AVERROR(EAGAIN) && (!AVPACKET_IS_EMPTY(avci->buffer_pkt) || dc->draining_started)) { ret = av_bsf_send_packet(avci->bsf, avci->buffer_pkt); - if (ret < 0) { - av_packet_unref(avci->buffer_pkt); - return ret; - } + if (ret >= 0) + continue; - continue; + av_packet_unref(avci->buffer_pkt); } + if (ret == AVERROR_EOF) + avci->draining = 1; return ret; } } diff --git a/libavcodec/internal.h b/libavcodec/internal.h index bc20a797ae..d7b0b9f880 100644 --- a/libavcodec/internal.h +++ b/libavcodec/internal.h @@ -123,7 +123,11 @@ typedef struct AVCodecInternal { void *hwaccel_priv_data; /** - * checks API usage: after codec draining, flush is required to resume operation + * decoding: AVERROR_EOF has been returned from ff_decode_get_packet(); must + * not be used by decoders that use the decode() callback, as they + * do not call ff_decode_get_packet() directly. + * + * encoding: a flush frame has been submitted to avcodec_send_frame(). */ int draining; _______________________________________________ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".