Message ID | 1553133499-30357-1-git-send-email-hwrenx@126.com |
---|---|
State | Accepted |
Commit | bf05f621d583728749224a81778258f1b84bafa8 |
Headers | show |
> 在 2019年3月21日,上午9:58,hwrenx <hwrenx@126.com> 写道: > > Signed-off-by: hwrenx <hwrenx@126.com> > --- > libavcodec/libdavs2.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/libavcodec/libdavs2.c b/libavcodec/libdavs2.c > index 0808721..b0eb4fd 100644 > --- a/libavcodec/libdavs2.c > +++ b/libavcodec/libdavs2.c > @@ -129,6 +129,21 @@ static int davs2_dump_frames(AVCodecContext *avctx, davs2_picture_t *pic, int *g > return 0; > } > > +static void davs2_flush(AVCodecContext *avctx) > +{ > + DAVS2Context *cad = avctx->priv_data; > + int ret = DAVS2_GOT_FRAME; > + > + while (ret == DAVS2_GOT_FRAME) { > + ret = davs2_decoder_flush(cad->decoder, &cad->headerset, &cad->out_frame); > + davs2_decoder_frame_unref(cad->decoder, &cad->out_frame); > + } > + > + if (ret == DAVS2_ERROR) { > + av_log(avctx, AV_LOG_WARNING, "Decoder flushing failed.\n"); > + } > +} > + > static int send_delayed_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame) > { > DAVS2Context *cad = avctx->priv_data; > @@ -205,6 +220,7 @@ AVCodec ff_libdavs2_decoder = { > .init = davs2_init, > .close = davs2_end, > .decode = davs2_decode_frame, > + .flush = davs2_flush, > .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AUTO_THREADS, > .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, > AV_PIX_FMT_NONE }, > -- > 2.7.4 > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel patchset look good to me Thanks
diff --git a/libavcodec/libdavs2.c b/libavcodec/libdavs2.c index 0808721..b0eb4fd 100644 --- a/libavcodec/libdavs2.c +++ b/libavcodec/libdavs2.c @@ -129,6 +129,21 @@ static int davs2_dump_frames(AVCodecContext *avctx, davs2_picture_t *pic, int *g return 0; } +static void davs2_flush(AVCodecContext *avctx) +{ + DAVS2Context *cad = avctx->priv_data; + int ret = DAVS2_GOT_FRAME; + + while (ret == DAVS2_GOT_FRAME) { + ret = davs2_decoder_flush(cad->decoder, &cad->headerset, &cad->out_frame); + davs2_decoder_frame_unref(cad->decoder, &cad->out_frame); + } + + if (ret == DAVS2_ERROR) { + av_log(avctx, AV_LOG_WARNING, "Decoder flushing failed.\n"); + } +} + static int send_delayed_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame) { DAVS2Context *cad = avctx->priv_data; @@ -205,6 +220,7 @@ AVCodec ff_libdavs2_decoder = { .init = davs2_init, .close = davs2_end, .decode = davs2_decode_frame, + .flush = davs2_flush, .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_AUTO_THREADS, .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE },
Signed-off-by: hwrenx <hwrenx@126.com> --- libavcodec/libdavs2.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+)