[FFmpeg-devel] [PATCH 1/3] avcodec/mediacodecdec: try to receive a frame after signaling EOF to the codec
Matthieu Bouron
matthieu.bouron at gmail.com
Thu Jun 13 12:43:58 EEST 2019
On Sun, May 26, 2019 at 11:25:09AM +0200, Matthieu Bouron wrote:
> On Tue, May 07, 2019 at 02:09:02AM -0700, Aman Gupta wrote:
> > On Thu, May 2, 2019 at 1:20 AM Matthieu Bouron <matthieu.bouron at gmail.com>
> > wrote:
> >
> > > On Wed, Apr 24, 2019 at 09:59:28AM +0200, Matthieu Bouron wrote:
> > > > Avoids returning EAGAIN after signaling EOF to the codec in
> > > > ff_mediacodec_dec_send() so we can try to receive a frame before
> > > > returning in mediacodec_receive_frame().
> > > >
> > > > This helps avoiding an extra round-trip between avcodec_send_frame() and
> > > > avcodec_receive_frame() while draining the remaining frames.
> > > > ---
> > > > libavcodec/mediacodecdec.c | 1 +
> > > > libavcodec/mediacodecdec_common.c | 2 +-
> > > > 2 files changed, 2 insertions(+), 1 deletion(-)
> > > >
> > > > diff --git a/libavcodec/mediacodecdec.c b/libavcodec/mediacodecdec.c
> > > > index 3a4240aa95..e353e34bd5 100644
> > > > --- a/libavcodec/mediacodecdec.c
> > > > +++ b/libavcodec/mediacodecdec.c
> > > > @@ -461,6 +461,7 @@ static int mediacodec_receive_frame(AVCodecContext
> > > *avctx, AVFrame *frame)
> > > > ret = ff_mediacodec_dec_send(avctx, s->ctx, &null_pkt,
> > > true);
> > > > if (ret < 0)
> > > > return ret;
> > > > + return ff_mediacodec_dec_receive(avctx, s->ctx, frame,
> > > true);
> > > > } else if (ret == AVERROR(EAGAIN) &&
> > > s->ctx->current_input_buffer < 0) {
> > > > return ff_mediacodec_dec_receive(avctx, s->ctx, frame,
> > > true);
> > > > } else if (ret < 0) {
> > > > diff --git a/libavcodec/mediacodecdec_common.c
> > > b/libavcodec/mediacodecdec_common.c
> > > > index 7c2661f672..f7a06cdc6d 100644
> > > > --- a/libavcodec/mediacodecdec_common.c
> > > > +++ b/libavcodec/mediacodecdec_common.c
> > > > @@ -631,7 +631,7 @@ int ff_mediacodec_dec_send(AVCodecContext *avctx,
> > > MediaCodecDecContext *s,
> > > > "Queued input buffer %zd size=%zd ts=%"PRIi64"\n",
> > > index, size, pts);
> > > >
> > > > s->draining = 1;
> > > > - break;
> > > > + return 0;
> > > > } else {
> > > > size = FFMIN(pkt->size - offset, size);
> > > > memcpy(data, pkt->data + offset, size);
> > > > --
> > > > 2.21.0
> > > >
> > >
> > > Ping.
> > >
> >
> > Did not test, but the diffs look reasonable to me.
>
> I will push the patches in a few days in there is no objection.
>
Pushed. Thanks.
[...]
--
Matthieu B.
More information about the ffmpeg-devel
mailing list