[FFmpeg-devel] [PATCH v2 3/4] avcodec/mediacodecdec: wait on first frame after input buffers are full
Matthieu Bouron
matthieu.bouron at gmail.com
Thu May 3 10:34:10 EEST 2018
On Wed, May 02, 2018 at 07:24:59PM -0700, Aman Gupta wrote:
> From: Aman Gupta <aman at tmm1.net>
>
> The output_buffer_count==0 special case is no longer required, and
> can cause spurious EAGAIN to surface to the user when input buffers
> are filled up. Since the caller now knows if the decoder is accepting
> new input (via current_input_buffer>=0), let the wait parameter
> control whether we block or not.
>
> Signed-off-by: Aman Gupta <aman at tmm1.net>
> ---
> libavcodec/mediacodecdec_common.c | 8 +-------
> libavcodec/mediacodecdec_common.h | 1 -
> 2 files changed, 1 insertion(+), 8 deletions(-)
>
> diff --git a/libavcodec/mediacodecdec_common.c b/libavcodec/mediacodecdec_common.c
> index 887865a281..40a2ee6778 100644
> --- a/libavcodec/mediacodecdec_common.c
> +++ b/libavcodec/mediacodecdec_common.c
> @@ -443,8 +443,6 @@ static int mediacodec_dec_flush_codec(AVCodecContext *avctx, MediaCodecDecContex
> FFAMediaCodec *codec = s->codec;
> int status;
>
> - s->output_buffer_count = 0;
> -
> s->draining = 0;
> s->flushing = 0;
> s->eos = 0;
> @@ -672,10 +670,7 @@ int ff_mediacodec_dec_receive(AVCodecContext *avctx, MediaCodecDecContext *s,
> /* If the codec is flushing or need to be flushed, block for a fair
> * amount of time to ensure we got a frame */
> output_dequeue_timeout_us = OUTPUT_DEQUEUE_BLOCK_TIMEOUT_US;
> - } else if (s->output_buffer_count == 0 || !wait) {
> - /* If the codec hasn't produced any frames, do not block so we
> - * can push data to it as fast as possible, and get the first
> - * frame */
> + } else if (!wait) {
> output_dequeue_timeout_us = 0;
> }
>
> @@ -709,7 +704,6 @@ int ff_mediacodec_dec_receive(AVCodecContext *avctx, MediaCodecDecContext *s,
> }
> }
>
> - s->output_buffer_count++;
> return 0;
> } else {
> status = ff_AMediaCodec_releaseOutputBuffer(codec, index, 0);
> diff --git a/libavcodec/mediacodecdec_common.h b/libavcodec/mediacodecdec_common.h
> index 0b21129fee..d280236b8e 100644
> --- a/libavcodec/mediacodecdec_common.h
> +++ b/libavcodec/mediacodecdec_common.h
> @@ -64,7 +64,6 @@ typedef struct MediaCodecDecContext {
> int display_width;
> int display_height;
>
> - uint64_t output_buffer_count;
> ssize_t current_input_buffer;
>
> bool delay_flush;
> --
> 2.14.2
>
LGTM.
--
Matthieu B.
More information about the ffmpeg-devel
mailing list