[FFmpeg-devel] [PATCH 1/4] avcodec/mediacodecdec: clarify delay_flush specific code
Matthieu Bouron
matthieu.bouron at gmail.com
Wed Apr 25 19:04:45 EEST 2018
On Tue, Apr 24, 2018 at 01:59:23PM -0700, Aman Gupta wrote:
> From: Aman Gupta <aman at tmm1.net>
>
> ---
> libavcodec/mediacodecdec.c | 24 +++---------------------
> libavcodec/mediacodecdec_common.c | 12 ++++++++++++
> 2 files changed, 15 insertions(+), 21 deletions(-)
>
> diff --git a/libavcodec/mediacodecdec.c b/libavcodec/mediacodecdec.c
> index 0d4a853f07..e5d3e6a0af 100644
> --- a/libavcodec/mediacodecdec.c
> +++ b/libavcodec/mediacodecdec.c
> @@ -419,27 +419,9 @@ static int mediacodec_receive_frame(AVCodecContext *avctx, AVFrame *frame)
> MediaCodecH264DecContext *s = avctx->priv_data;
> int ret;
>
> - /*
> - * MediaCodec.flush() discards both input and output buffers, thus we
> - * need to delay the call to this function until the user has released or
> - * renderered the frames he retains.
> - *
> - * After we have buffered an input packet, check if the codec is in the
> - * flushing state. If it is, we need to call ff_mediacodec_dec_flush.
> - *
> - * ff_mediacodec_dec_flush returns 0 if the flush cannot be performed on
> - * the codec (because the user retains frames). The codec stays in the
> - * flushing state.
> - *
> - * ff_mediacodec_dec_flush returns 1 if the flush can actually be
> - * performed on the codec. The codec leaves the flushing state and can
> - * process again packets.
> - *
> - * ff_mediacodec_dec_flush returns a negative value if an error has
> - * occurred.
> - *
> - */
> - if (ff_mediacodec_dec_is_flushing(avctx, s->ctx)) {
> + /* in delay_flush mode, wait until the user has released or rendered
NIT: In delay_flush mode, [...]
> + all retained frames. */
> + if (s->delay_flush && ff_mediacodec_dec_is_flushing(avctx, s->ctx)) {
> if (!ff_mediacodec_dec_flush(avctx, s->ctx)) {
> return AVERROR(EAGAIN);
> }
> diff --git a/libavcodec/mediacodecdec_common.c b/libavcodec/mediacodecdec_common.c
> index e59cf19aad..0c27624dea 100644
> --- a/libavcodec/mediacodecdec_common.c
> +++ b/libavcodec/mediacodecdec_common.c
> @@ -764,6 +764,18 @@ int ff_mediacodec_dec_receive(AVCodecContext *avctx, MediaCodecDecContext *s,
> return AVERROR(EAGAIN);
> }
>
> +/*
> +* ff_mediacodec_dec_flush returns 0 if the flush cannot be performed on
> +* the codec (because the user retains frames). The codec stays in the
> +* flushing state.
> +*
> +* ff_mediacodec_dec_flush returns 1 if the flush can actually be
> +* performed on the codec. The codec leaves the flushing state and can
> +* process again packets.
> +*
> +* ff_mediacodec_dec_flush returns a negative value if an error has
> +* occurred.
> +*/
> int ff_mediacodec_dec_flush(AVCodecContext *avctx, MediaCodecDecContext *s)
> {
> if (!s->surface || atomic_load(&s->refcount) == 1) {
> --
> 2.14.2
>
LGTM.
--
Matthieu B.
More information about the ffmpeg-devel
mailing list