From patchwork Thu Aug 10 16:54:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 43199 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8b1b:b0:130:ccc6:6c4b with SMTP id l27csp801014pzh; Thu, 10 Aug 2023 09:54:55 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEOUjabnUalC3pheL6qlMNJT4tFo5lbC9xYTwbRQq2A+21YvNzmLpnO5jSaCSv2Hmjx7SL3 X-Received: by 2002:a17:906:5393:b0:99c:e38d:e484 with SMTP id g19-20020a170906539300b0099ce38de484mr2682891ejo.6.1691686494760; Thu, 10 Aug 2023 09:54:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691686494; cv=none; d=google.com; s=arc-20160816; b=MCZCMmJvUg9o1EfbCUUO2DDKTt5N2TVG45suGCvLUQlVbJrFvhG+sfhMH6V/8USWI1 ngm7F4hJ9zcdp8d9WnfT8vB/W/HnNMz3CADaAgdrj7V01pRuSSfHB+4Eg2aLx56uaWsV KAwLKNlFRAJSaobYj5eANqpOWRumeTVLMV5AsL3tHSFn+wf0SENRFI/N9KcC70mWq5fG G3WAfyXNoAk1uyh+aqA6OKSea0orXipwrEZ6183IPRxQZfcvPWmVzP55uTiyf8KSGCcl 0c7zpxUvghSS75qTDb+EvcNIi8z4pXsdSmDXwJWogqGukCtSygulTt7mib+LJ/WcQOYz 2rJQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:date:to:from:message-id :dkim-signature:delivered-to; bh=3pHMPybvBclW5DhtY9PNSNCKd688P1+LRz9dSPc+CVE=; fh=fgsEC5uuZOuzV7r9mTXgvURIGbxpRO08JRnNlycBIXw=; b=DlRxJG1Q+zdO+MNgwqoKBWnU4WbztXk6xfjfiu9luBz6h9W3sKy0rMYwr7MZo2EfPg npo5+o/J9fKvQN9+vQlNuaIrTf1sPcvGkOjFsJrtgXH4G2L306yIaBjkLVDQAbQ3+JBo REVz8jVECha+qJQkr5ScXL/bIEOYRTr0y1x7Ez7hMp5Yu4VI7pK7Q0zTeFaOg2vRVRmz w6KuXKaRqeuAC4sT0459Qi3l6MH6oaEw0xUVgwPca+F/X7ys1csEWR+1rndwu8cgVFnd bFGaJ4uSz01F8+PVEtGemVBvtqfjDI6ZlD9HqUgAqjpZ/BlJedmfx/foKWQWiFjzWwty n/Xw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=R9E5o0Kq; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id g14-20020a170906394e00b0099bcc4d1c97si1772166eje.745.2023.08.10.09.54.54; Thu, 10 Aug 2023 09:54:54 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=R9E5o0Kq; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4CF2F68C323; Thu, 10 Aug 2023 19:54:50 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out162-62-57-137.mail.qq.com (out162-62-57-137.mail.qq.com [162.62.57.137]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 44F3A68C323 for ; Thu, 10 Aug 2023 19:54:43 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1691686473; bh=rquMyDc1h9UpHpWow0zRPCNeSsstzXXSzF4Ax3yvFQo=; h=From:To:Cc:Subject:Date; b=R9E5o0KqBqFTqQruIz90ufc6MPfXv0qwsXBIkumsRjr5ioHbKRU6wbkVYdMieYrR7 UzdtdAY99HEkWnI5eD77uXthc/wvDfZ8IGPGJFop4y4u11/b5sVLMrJIg6/xsB7nqr DW/OHu3JoNPh6eg4C0Ygfz+Gv1/zgFjXGESKLHJs= Received: from ZHILIZHAO-PC4.localdomain ([121.35.184.176]) by newxmesmtplogicsvrsza10-0.qq.com (NewEsmtp) with SMTP id DA020E64; Fri, 11 Aug 2023 00:54:32 +0800 X-QQ-mid: xmsmtpt1691686472tsl910gs1 Message-ID: X-QQ-XMAILINFO: Mg/0DM1Zd+nHFez/gh82UBl6U0mmkOmYzn7bZ8zeA9gNl1ffcUZgNTEBpVo9Ee VPTmPdm0BtrtafJeekUYhgL05qdxTkhHqcsZ//TdhTg3Du0KJZe71wiF2ss+VKBFhHJ4WO4wPayn MixaKav4L57O28eGczIdnPon6DLwj01A95DXokzv171VXlZi1OtV7R2qpYb3F8Svtx/VqIFqoYmB tn4TLxs7szgBu6IeMZyX3DSB2fj+Vlc9pZWBPVoTM6rvqNWbDJ8NUtQOECD8w+xFyOifw6VM1CXT K+LFbS3bY2Y6LoSoGSEcUL+oaHgJIovQ4VGqAHK/UTZsxo59C3Yy8eZNCLYSh0EhV92JjeE29vfg aZ3PZg/MWkphev1wTTkoiC+mu0sNRKtCIb+Uy+/DQ56/UhE0QakdWmCCY2+qwj33DzW1c6nvrOKg I+lyeaoVBISXCSOV5EF6y4UCkd1UG+GZskUuZEBb+2+uqdTfVd5IWisCfRTRqXF0BMugixs/zpl7 bFn/B/M8tutoQZVuPixlmg7c6wUT4V/dy2+m8vogBrvwbfmOx0aTx/FeMIZC5tWKxMm11Y36QFiR R8Z4p+QVpBXrIAPcKIFlgbLMj8Hi5dfuZBhNZl/F7ENyBC4Ua040wZNHIbLnQyMdpJ00lHgEdy93 Q+rqGMw4ipYvCbXfRaOxmgcmmkFGv/8rGGBwwYg52LXi7U2Tygp8TMdEWDjSMt1hAGBOiPfv+4W7 Q+kPltpxe0hFQewB4DHrF9Ozzsv3/z2ZWADVmKT6VZH/hgnR/JcG6xWdGaGWWylQgysNHwPyMWtB avTAKePfyCr++IItDO73aKDPDMMeeiR23aM8mQM04L3kZW3McwDbn2u/yd6aap85CIirCkIv9f2K 2XUwVnparr1uVflMVZds8TmC5x5eXYS4lU46VAnbwEqyRshpo2qKHogGmW9OAuOu2CsnkRQ97Ljq 87Wgi1YAfVkqVPgCpqPg== X-QQ-XMRINFO: MPJ6Tf5t3I/ycC2BItcBVIA= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Fri, 11 Aug 2023 00:54:27 +0800 X-OQ-MSGID: <20230810165427.28513-1-quinkblack@foxmail.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] examples/transcode: flush decoder on EOF X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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 Cc: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: /ib6gK5wA6/6 From: Zhao Zhili Signed-off-by: Zhao Zhili --- doc/examples/transcode.c | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/doc/examples/transcode.c b/doc/examples/transcode.c index 305181663c..ed6ac9fa03 100644 --- a/doc/examples/transcode.c +++ b/doc/examples/transcode.c @@ -585,11 +585,38 @@ int main(int argc, char **argv) av_packet_unref(packet); } - /* flush filters and encoders */ + /* flush decoders, filters and encoders */ for (i = 0; i < ifmt_ctx->nb_streams; i++) { - /* flush filter */ + StreamContext *stream; + if (!filter_ctx[i].filter_graph) continue; + + stream = &stream_ctx[i]; + + av_log(NULL, AV_LOG_INFO, "Flushing stream %u decoder\n", i); + + /* flush decoder */ + ret = avcodec_send_packet(stream->dec_ctx, NULL); + if (ret < 0) { + av_log(NULL, AV_LOG_ERROR, "Flushing decoding failed\n"); + goto end; + } + + while (ret >= 0) { + ret = avcodec_receive_frame(stream->dec_ctx, stream->dec_frame); + if (ret == AVERROR_EOF) + break; + else if (ret < 0) + goto end; + + stream->dec_frame->pts = stream->dec_frame->best_effort_timestamp; + ret = filter_encode_write_frame(stream->dec_frame, i); + if (ret < 0) + goto end; + } + + /* flush filter */ ret = filter_encode_write_frame(NULL, i); if (ret < 0) { av_log(NULL, AV_LOG_ERROR, "Flushing filter failed\n");