Message ID | 20180503022500.76182-3-ffmpeg@tmm1.net |
---|---|
State | Accepted |
Commit | a75bb5496ac6e7e194f1c6fd3b87f02a52e74adb |
Headers | show |
On Wed, May 02, 2018 at 07:24:59PM -0700, Aman Gupta wrote: > From: Aman Gupta <aman@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@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.
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;