From patchwork Tue Nov 20 01:51:50 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: hwren X-Patchwork-Id: 11080 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 2CEA044CEA6 for ; Tue, 20 Nov 2018 04:23:18 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AFDFB689CA8; Tue, 20 Nov 2018 04:23:18 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from m50-112.126.com (m50-112.126.com [123.125.50.112]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 191F4689C85 for ; Tue, 20 Nov 2018 04:23:09 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=126.com; s=s110527; h=From:Subject:Date:Message-Id; bh=7UiWkVP6lfv6p9CNx/ e0zxMuW47eClEB14bbNNL7yXM=; b=epODUXCFyopg2uuf/9Pe6d0/XQn3pf97UN Cuwl4QbQAm4i944Iej853uxxTiHQmmX04kUfzYrjTNmWHFVpcDrC7xihnO69yXQc dVK1q5yBu8NW/SBiXpLusd6t9ZM5tPraixTCtp1XlaJD+MVj6MhxZrbOfTL+k5rG Gvs39P5ZA= Received: from localhost.localdomain (unknown [114.242.249.221]) by smtp6 (Coremail) with SMTP id j9KowAC3UTK3aPNbcAGqAQ--.138S4; Tue, 20 Nov 2018 09:51:53 +0800 (CST) From: hwrenx To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Nov 2018 09:51:50 +0800 Message-Id: <1542678711-16289-2-git-send-email-hwrenx@126.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1542678711-16289-1-git-send-email-hwrenx@126.com> References: <1542678711-16289-1-git-send-email-hwrenx@126.com> X-CM-TRANSID: j9KowAC3UTK3aPNbcAGqAQ--.138S4 X-Coremail-Antispam: 1Uf129KBjvJXoW7Aw43GF4rAw4xWF1rXry8uFg_yoW8Xr1rpr 4UArs0yFy5JFs3Ar93Jr1Fvas8XrWkKa18Kws7Ar1093y8AryUtryxAryFk3WI9FWkC347 ua1UKFy5uwsrK37anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07UgvttUUUUU= X-Originating-IP: [114.242.249.221] X-CM-SenderInfo: pkzuv0b06rjloofrz/1tbi4hkF6VpD65FuGQAAsD Subject: [FFmpeg-devel] [PATCH 2/3] lavc/libdavs2: output delayed frames X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: hwrenx --- libavcodec/libdavs2.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/libavcodec/libdavs2.c b/libavcodec/libdavs2.c index 9a905b8..3b8666f 100644 --- a/libavcodec/libdavs2.c +++ b/libavcodec/libdavs2.c @@ -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;