From patchwork Thu May 12 01:18:21 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Wang, Fei W" X-Patchwork-Id: 35737 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:a885:b0:7f:4be2:bd17 with SMTP id ca5csp223445pzb; Wed, 11 May 2022 18:25:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJypQdgC69OsBXmkptnopE9V1JmZ1XXsOl3SANWoRgr1ek4/IbJO6NgHHHl6fSWf9ljn/z3Q X-Received: by 2002:aa7:cd10:0:b0:428:659e:a4c8 with SMTP id b16-20020aa7cd10000000b00428659ea4c8mr29607462edw.190.1652318703128; Wed, 11 May 2022 18:25:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1652318703; cv=none; d=google.com; s=arc-20160816; b=EZR9sPFl74re9GlxEumUaMWDAUi32qhugww3z4l8DN2pN9bKvE5tIcwd7A8dh1yPpl KZA5HrQkhmfcyi6hCoFtrqK1OMSuQLBiUtsEmZ+Ell52NHyBvQwnSDRXm06OgFMfefzM Z9fsD++9kx+oi+RuLD5Y/iSrQNF8sfDDCtUpZ8FkL4DUG5AkRWnuLD9aa9zfeqzwls0C r1lMrlhsBbVScMRmQkkB4nEbkvY8XcH2o5ynkR72HlBiQ4cMGudI1+b6rM6j/Bt0yg4h t1pVeqTUlth2rKGRmcfo/Ge5d8AVhsomAYAOF3PDgCkLGG8YlKRWKQlA+lYE2AkWvBbF 9GXA== 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:message-id:date:to:from :dkim-signature:delivered-to; bh=YfbpR958zDu/qzn9DiJ+kr/xTSINm3ohXtTF/ppbHv0=; b=K8zf+rjkOL/GrChXslcfvhLpSxEn8q12aWKGECDc5cpKkD0O/NoBxr8m2UDsvcHDnT LmYAe6MA1yltc8NrS5qx+UOYi7GmDSbyb334LSDH/YTmgX+IfGZCsAja0v5bYiyo2A2Z qEE10lU8Ca6PAO64JZoJbh8mz0OedAOLCzoKQ8GspT0xcUIuD7nqDpx/sp8Q/D31tV88 EU7zGxWBbddjMSJzuWLFJdzGr995KLC7YGEYtoBcBzFruv/q0nvb54ci71YR84PfYiCJ DidI4dOgmdKV8Q6XMB4/X5wGwcfaDovDtVM6dYqKxwXvECFLgT+g618ocgoMToBiR2Ur D8hQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b="XC9/g+jO"; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id kw4-20020a170907770400b006f432ae945bsi3983709ejc.814.2022.05.11.18.25.01; Wed, 11 May 2022 18:25:03 -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=@intel.com header.s=Intel header.b="XC9/g+jO"; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D5BA668B2F9; Thu, 12 May 2022 04:24:57 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B01A968B2F9 for ; Thu, 12 May 2022 04:24:50 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1652318695; x=1683854695; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=eHvKsNUdpcGw9owWJ9dUzwAMDdmzETAwmVtyKPSXEUA=; b=XC9/g+jO2uCRA+CHG39ksxA71Bh/ftVyulS7vnsfYudo7OKRZbQ7oolQ vAhDCghnkZclooqsXjYQCV9SrvstQNmZsdTn21oMbtOadkyLu2BCR8uj6 s+tpvuL0DHVgnN9gPw53uiZG9YQswmRYbb/PVZWuwPGIah+idCRN8JOPC WzrZLqAPkxRr70Fy3i+OEs2wxFgWrE8l+icRvihmlqRSXBD/dJkA+UIIC ljJUbhgUfihRQ4ygFW1nVD1r9tJDwarEBtR31vpZh5YP7IcsXzfKLDrOT oDtzCgJJmF+cb6wIYjhVsHx1+Otc4r6rfuXQ65idCgOnqDiPifF7l00wi w==; X-IronPort-AV: E=McAfee;i="6400,9594,10344"; a="295102836" X-IronPort-AV: E=Sophos;i="5.91,218,1647327600"; d="scan'208";a="295102836" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 May 2022 18:24:47 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.91,218,1647327600"; d="scan'208";a="739467139" Received: from t.sh.intel.com ([10.239.159.147]) by orsmga005.jf.intel.com with ESMTP; 11 May 2022 18:24:46 -0700 From: Fei Wang To: ffmpeg-devel@ffmpeg.org Date: Thu, 12 May 2022 09:18:21 +0800 Message-Id: <20220512011821.2342620-1-fei.w.wang@intel.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v1] avfilter/vf_vpp_qsv: set outlink to EOF correctly 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: Fei Wang Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: QAOWVQBCfrsJ 1. Return error if filter frame fail before set outlink to EOF in none pass through mode. 2. Set outlink to EOF before return success in pass through mode. Fix endless cmd: ffmpeg -hwaccel qsv -qsv_device /dev/dri/renderD128 -hwaccel_output_format \ qsv -v debug -c:v hevc_qsv -i 4k.h265 \ -filter_complex "vpp_qsv=w=3840:h=2160:async_depth=4[o1];[o1]split=2[s1][s2]; [s2]vpp_qsv=w=1920:h=1080:async_depth=4[o2];[o2]split=2[s3][s4]; [s4]vpp_qsv=w=1920:h=1080:async_depth=4[o3]" \ -map [s1] -c:v hevc_qsv -async 3 -async_depth 3 -b:v 9000k -preset 7 -g 33 -y -f null - \ -map [s3] -c:v hevc_qsv -async 3 -async_depth 3 -b:v 4000k -preset 7 -g 33 -y -f null - \ -map [o3] -c:v hevc_qsv -async 3 -async_depth 3 -b:v 3100k -preset 7 -g 33 -y -f null - --- libavfilter/vf_vpp_qsv.c | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/libavfilter/vf_vpp_qsv.c b/libavfilter/vf_vpp_qsv.c index cfe343822b..3d9d3afbc8 100644 --- a/libavfilter/vf_vpp_qsv.c +++ b/libavfilter/vf_vpp_qsv.c @@ -556,15 +556,17 @@ static int activate(AVFilterContext *ctx) qsv->eof = s->eof; ret = ff_qsvvpp_filter_frame(qsv, inlink, in); av_frame_free(&in); + if (ret == AVERROR(EAGAIN)) + goto not_ready; + else if (ret < 0) + return ret; - if (s->eof) { - ff_outlink_set_status(outlink, status, pts); - return 0; - } + if (s->eof) + goto eof; if (qsv->got_frame) { qsv->got_frame = 0; - return ret; + return 0; } } } else { @@ -573,18 +575,27 @@ static int activate(AVFilterContext *ctx) in->pts = av_rescale_q(in->pts, inlink->time_base, outlink->time_base); ret = ff_filter_frame(outlink, in); - return ret; + if (ret < 0) + return ret; + + if (s->eof) + goto eof; + + return 0; } } - if (s->eof) { - ff_outlink_set_status(outlink, status, pts); - return 0; - } else { - FF_FILTER_FORWARD_WANTED(outlink, inlink); - } +not_ready: + if (s->eof) + goto eof; + + FF_FILTER_FORWARD_WANTED(outlink, inlink); return FFERROR_NOT_READY; + +eof: + ff_outlink_set_status(outlink, status, pts); + return 0; } static int query_formats(AVFilterContext *ctx)