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.
This commit is contained in:
Anton Khirnov 2024-04-03 12:32:51 +02:00
parent d94cfd4900
commit 64743b45b5
2 changed files with 10 additions and 8 deletions

View File

@ -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;
}
}

View File

@ -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;