mirror of https://git.ffmpeg.org/ffmpeg.git
lavc/libdavs2: output delayed frames
Signed-off-by: hwrenx <hwrenx@126.com>
This commit is contained in:
parent
701cbbb58c
commit
42597d6fa0
|
@ -125,6 +125,23 @@ static int davs2_dump_frames(AVCodecContext *avctx, davs2_picture_t *pic,
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int send_delayed_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame)
|
||||
{
|
||||
DAVS2Context *cad = avctx->priv_data;
|
||||
int ret = DAVS2_DEFAULT;
|
||||
|
||||
ret = davs2_decoder_flush(cad->decoder, &cad->headerset, &cad->out_frame);
|
||||
if (ret == DAVS2_ERROR) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Decoder error: can't flush delayed frame\n");
|
||||
return AVERROR_EXTERNAL;
|
||||
}
|
||||
if (ret == DAVS2_GOT_FRAME) {
|
||||
*got_frame = davs2_dump_frames(avctx, &cad->out_frame, &cad->headerset, ret, frame);
|
||||
davs2_decoder_frame_unref(cad->decoder, &cad->out_frame);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static av_cold int davs2_end(AVCodecContext *avctx)
|
||||
{
|
||||
DAVS2Context *cad = avctx->priv_data;
|
||||
|
@ -147,8 +164,9 @@ static int davs2_decode_frame(AVCodecContext *avctx, void *data,
|
|||
AVFrame *frame = data;
|
||||
int ret = DAVS2_DEFAULT;
|
||||
|
||||
/* end of stream, output what is still in the buffers */
|
||||
if (!buf_size) {
|
||||
return 0;
|
||||
return send_delayed_frame(avctx, frame, got_frame);
|
||||
}
|
||||
|
||||
cad->packet.data = buf_ptr;
|
||||
|
|
Loading…
Reference in New Issue