From patchwork Tue Sep 6 09:22:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Chen, Wenbin" X-Patchwork-Id: 37689 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:139a:b0:8f:1db5:eae2 with SMTP id w26csp3135450pzh; Tue, 6 Sep 2022 02:25:10 -0700 (PDT) X-Google-Smtp-Source: AA6agR56v9xD5M4yk58gmc6Jr2tWetpTEtjNaSC7fHfswElVXU8ZHdDC3kSp4CitJI78K7akSbDX X-Received: by 2002:a17:907:d91:b0:741:771f:1d11 with SMTP id go17-20020a1709070d9100b00741771f1d11mr30332858ejc.588.1662456310495; Tue, 06 Sep 2022 02:25:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662456310; cv=none; d=google.com; s=arc-20160816; b=TE4umB4sHVW2UuP/mSF3B31UdvEChQyhSzrJ2Y8cw2AXd46hfT5uvsIFkO8PRaH93Z zpZ3hR44/IMpNbl02D9+kRcF3+m9wvxbe1K+oAgWOWbxkq3kmUsoFotS5HRpgnHrnD6h 6e+UlI+h2o1pm1+StlZZwaA0Qt/hbiAR44T+MPfR5hN52kpVzsLuFtMzTxseYGMaBVBq 6Cu7HZ5tn/doJE1PSu1+IBj24CcmVbJr9rZtf514IYR6Xf538hlpaKBNRGHKVv7Od2HI aCoT4gILGHI97KGHkgKZ443o04lK07m0uNdULYCQxKE7XC8j1rrlCUlM+yUb6LGgdEeB Ekfg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding: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=EJrXNg81uXb7FWCbtbGNkQt6C80ZqV0DF8Cg79KyhBs=; b=xVcDIeAI8hR1Odt9UzeGSEOcYtC0l+NykaKxj7YrQWlcjOuQWZH7sA1+NmfGPxRsRW 59rLAsi1bbh696az6nWJZMX+Grn4qtbxlD3QK4SZHjE9GkbE7Fcn+mnpGHiUbgy09dWc eJjtO5tGGbOkwUvSyS8ppnbeN0IxrOFidS828Fm4VjKLr74wJzOL4VE9gumssh6Sw4fZ c40w80UzcumyvBe7Mf8qSplgvge8LDU4w2bLQ81H4iPobfDVB/r1ejZS6e1Xw0NzlA6M ZTwd8WSqxdPyD44yvIaO46ZhzfJs1dqCP8DxmvYKUGMELcszKWsnm9ATF5q/cz05XPo6 Foww== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=j94kph0T; 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 y11-20020a056402358b00b0043df9ca3ff8si859529edc.50.2022.09.06.02.25.09; Tue, 06 Sep 2022 02:25:10 -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=j94kph0T; 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 B771168BAAD; Tue, 6 Sep 2022 12:25:05 +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 933CF68AD28 for ; Tue, 6 Sep 2022 12:24:58 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1662456303; x=1693992303; h=from:to:subject:date:message-id:mime-version: content-transfer-encoding; bh=kJBnSvDCTBRdglRY5u8D3L/dSNJ6JEATPnWGtvm2nGY=; b=j94kph0TxyqqauD/sHZEJ1ULPO9OIdWprq7NPy+KNy09J6lG8dYqHC+R 0BpQd6NKnd2KXPUraSkKsaFSZ9h78I1tLme4YhglrNxeT0I1rSqNwcGwD JOihngTQhAWCT7BKxmdhLiv/DbzyLcHRILmFgAYDLBs5yxG5Px//eF87o 49D9Q8MqAZqlBVuNbcGjzpJu/UssIgV3xzR/ISjss61BJModSdpOSqyIK yBT5RSCue3hLSCYKtd2ATXf1iOAXojGZH6TT3aFwCI3bkmpxCl0bfXAJV FUi2bqeEvRzg851x/+H2OWSqekd1Du4H7NaaCYDmGLVZG/wFLUjJAyqyU g==; X-IronPort-AV: E=McAfee;i="6500,9779,10461"; a="322720545" X-IronPort-AV: E=Sophos;i="5.93,293,1654585200"; d="scan'208";a="322720545" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Sep 2022 02:24:56 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,293,1654585200"; d="scan'208";a="565028238" Received: from wenbin-z390-aorus-ultra.sh.intel.com ([10.239.35.4]) by orsmga003.jf.intel.com with ESMTP; 06 Sep 2022 02:24:55 -0700 From: Wenbin Chen To: ffmpeg-devel@ffmpeg.org Date: Tue, 6 Sep 2022 17:22:52 +0800 Message-Id: <20220906092258.994742-1-wenbin.chen@intel.com> X-Mailer: git-send-email 2.32.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 1/7] libavcodec/qsvenc: skip parameter resetting on mjpeg_qsv 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: BYqiZv+Q/kzI mjpeg_qsv don't support dynamic resetting, so skip it. Signed-off-by: Wenbin Chen --- libavcodec/qsvenc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index 7ac5390f10..842cfb845e 100644 --- a/libavcodec/qsvenc.c +++ b/libavcodec/qsvenc.c @@ -1680,7 +1680,7 @@ static int update_parameters(AVCodecContext *avctx, QSVEncContext *q, { int needReset = 0, ret = 0; - if (!frame) + if (!frame || avctx->codec_id == AV_CODEC_ID_MJPEG) return 0; needReset = update_qp(avctx, q); From patchwork Tue Sep 6 09:22:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Chen, Wenbin" X-Patchwork-Id: 37690 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:139a:b0:8f:1db5:eae2 with SMTP id w26csp3135540pzh; Tue, 6 Sep 2022 02:25:21 -0700 (PDT) X-Google-Smtp-Source: AA6agR4iixIEd3N3e55TqS8R+1Bi6/KA1oT3PReKv3At1Bljpj51NlN8X92imRGn5AZS0DhUSl9a X-Received: by 2002:a17:906:9748:b0:76f:b6c3:6d3d with SMTP id o8-20020a170906974800b0076fb6c36d3dmr304956ejy.753.1662456321683; Tue, 06 Sep 2022 02:25:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662456321; cv=none; d=google.com; s=arc-20160816; b=sdMw84AGxI4oUHOif3oSc2qXq8f4aSboXFRbkJf9wlfHIqd3Fi66aG1mSHazAGnJuQ pABQtc1oO+4YGzCZ4uOdjZIt2d3s9steGPvije4zm3A3SP4KaqcEgbgdSWPjjYbEBTWL mmjMs0LGOqiE9kirfhlZjtHoqfUrMFP51zDccBOCGOOXrQPQ0YTOPkO5C8a/dSAYI3vv AuGMCNwK3ok8u5HPpZ9P0WP2KiGpzrcVuhpnEMDN8Ul6o89jZzAOGOd93Feb2ZyYMvx6 6OmZsZqAgqTlLjcFmSFHRo2b83ZbjIJAtT0hW2Ih8X3pSYYl4BitpJqoy5lAf86JoUq+ 8tNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=3zohgI5bT12sffWm1/pbCblNSv88ZUGyKsi6uvitNEs=; b=rrfxyKSHmSjodyOkw2CN2+EM9unk390dkzlB5e6WFJxaSZhHjfpuMlTDro1eKU3oM5 pI5aDZ8JNvB3anLiHAeQ6+eqAtoNaXtBTbWH3cdICDEdIAl7i24AbVMjgKLIB45lKzbZ NNmLzXug5r16p/2ngVmIkN0pgOQoR2nwvo8xiflo/Tvy7k0OPYPedJtQ4VUl29KnRS6x pMnaMHgHZjJTmVDn3cgfy204xfh9dTmmJP+SdmxAcSJJdq/wfBx+DqjJJcNtAM7nbU/N xbnZLTB97DY086tLjsFJfHsPVoqIem8OYsTq6NCEtSbp6qPamNOR74gvxHakkQXjqAT0 JaKw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b="L7GhH/M8"; 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 oz44-20020a1709077dac00b0076fa83bd1c3si246550ejc.359.2022.09.06.02.25.21; Tue, 06 Sep 2022 02:25:21 -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="L7GhH/M8"; 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 DAC6968B9AE; Tue, 6 Sep 2022 12:25:07 +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 867E468BAAA for ; Tue, 6 Sep 2022 12:25:00 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1662456305; x=1693992305; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=ERy8JaOWsk6L0XykZjN6R9QGqArSerPQEl5OYL109G8=; b=L7GhH/M8nfhT0eWBRpn4lDUVnBSE391XxSItVWGAsmvRMrd8M7zAY4Ow 9pGZIEJMZ/UDEM2fl+5N8M9qaQo5bxeRrkuK9u7G/BuPHrMJlrVI8yLas +aqm5if+ahYYhuBk1QIU5d7lhYhXnTHTFNT+t0YsOewIuRV+x38D7LvtP 2M45eYdJDvUWLqhDpSrf0Ybcq5jIYpPYI+tqHh8bkvIgOtwR8zdx1bkKL bjcVGcgwUiOewgVtD/w3MBOBR/LRuF/kZc1hVbH103UEV2c/eJBHTL+yb COkz5a2vSvkvtgRBQCLchNRxDym2mZJ00VlYY051+TTyJxLoR22VMIY2U g==; X-IronPort-AV: E=McAfee;i="6500,9779,10461"; a="322720547" X-IronPort-AV: E=Sophos;i="5.93,293,1654585200"; d="scan'208";a="322720547" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Sep 2022 02:24:56 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,293,1654585200"; d="scan'208";a="565028239" Received: from wenbin-z390-aorus-ultra.sh.intel.com ([10.239.35.4]) by orsmga003.jf.intel.com with ESMTP; 06 Sep 2022 02:24:56 -0700 From: Wenbin Chen To: ffmpeg-devel@ffmpeg.org Date: Tue, 6 Sep 2022 17:22:53 +0800 Message-Id: <20220906092258.994742-2-wenbin.chen@intel.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220906092258.994742-1-wenbin.chen@intel.com> References: <20220906092258.994742-1-wenbin.chen@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 2/7] libavcodec/qsvenc: Add max_frame_size reset support to qsv 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 7EZfFxxZMynd Signed-off-by: Wenbin Chen --- doc/encoders.texi | 4 ++++ libavcodec/qsvenc.c | 20 ++++++++++++++++++++ libavcodec/qsvenc.h | 2 ++ 3 files changed, 26 insertions(+) diff --git a/doc/encoders.texi b/doc/encoders.texi index d36464d629..aadb6ab9fd 100644 --- a/doc/encoders.texi +++ b/doc/encoders.texi @@ -3344,6 +3344,10 @@ Following options can be used durning qsv encoding. @item @var{b_quant_offset} Supported in h264_qsv and hevc_qsv. Change these value to reset qsv codec's qp configuration. + +@item @var{max_frame_size} +Supported in h264_qsv and hevc_qsv. +Change this value to reset qsv codec's MaxFrameSize configuration. @end table @subsection H264 options diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index 842cfb845e..915a1abd26 100644 --- a/libavcodec/qsvenc.c +++ b/libavcodec/qsvenc.c @@ -824,6 +824,7 @@ static int init_video_param(AVCodecContext *avctx, QSVEncContext *q) q->extco2.ExtBRC = q->extbrc ? MFX_CODINGOPTION_ON : MFX_CODINGOPTION_OFF; if (q->max_frame_size >= 0) q->extco2.MaxFrameSize = q->max_frame_size; + q->old_max_frame_size = q->max_frame_size; if (q->int_ref_type >= 0) q->extco2.IntRefType = q->int_ref_type; if (q->int_ref_cycle_size >= 0) @@ -1675,6 +1676,24 @@ static int update_qp(AVCodecContext *avctx, QSVEncContext *q) return updated; } +static int update_max_frame_size(AVCodecContext *avctx, QSVEncContext *q) +{ + int updated = 0; + + if (avctx->codec_id != AV_CODEC_ID_H264 && avctx->codec_id != AV_CODEC_ID_HEVC) + return 0; + + UPDATE_PARAM(q->old_max_frame_size, q->max_frame_size); + if (!updated) + return 0; + + q->extco2.MaxFrameSize = FFMAX(0, q->max_frame_size); + av_log(avctx, AV_LOG_DEBUG, + "Reset MaxFrameSize: %d;\n", q->extco2.MaxFrameSize); + + return updated; +} + static int update_parameters(AVCodecContext *avctx, QSVEncContext *q, const AVFrame *frame) { @@ -1684,6 +1703,7 @@ static int update_parameters(AVCodecContext *avctx, QSVEncContext *q, return 0; needReset = update_qp(avctx, q); + needReset |= update_max_frame_size(avctx, q); if (!needReset) return 0; diff --git a/libavcodec/qsvenc.h b/libavcodec/qsvenc.h index a983651dda..3984ae7dd8 100644 --- a/libavcodec/qsvenc.h +++ b/libavcodec/qsvenc.h @@ -249,6 +249,8 @@ typedef struct QSVEncContext { float old_i_quant_offset; float old_b_quant_factor; float old_b_quant_offset; + // This is used for max_frame_size reset + int old_max_frame_size; } QSVEncContext; int ff_qsv_enc_init(AVCodecContext *avctx, QSVEncContext *q); From patchwork Tue Sep 6 09:22:54 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Chen, Wenbin" X-Patchwork-Id: 37692 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:139a:b0:8f:1db5:eae2 with SMTP id w26csp3135737pzh; Tue, 6 Sep 2022 02:25:43 -0700 (PDT) X-Google-Smtp-Source: AA6agR7150mLXiSxMnOYcgwJwAsCWjWgRQ8rtKmU7/LKWMp1rGMBfULgo+hEDMhstacGJfitQPgb X-Received: by 2002:a17:906:ef90:b0:730:9d18:17b3 with SMTP id ze16-20020a170906ef9000b007309d1817b3mr39725334ejb.141.1662456343439; Tue, 06 Sep 2022 02:25:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662456343; cv=none; d=google.com; s=arc-20160816; b=ypET6d+F2MCQ+aPyVdKRTrmhN8zSJQopnCSKTx1TfzQnW8CJB/ZCuEsF2Po/bkK0Vh WRwlZobcUNl+Ueoa6eEwQxNH3/F+BENrbH5b5/imO+/zrq6HC9S48pVcNrggtnerI5GT dNQtdsh1fPPl/zPXK+62bqcBvnJvFNV44govuWTBxARLnsTXTRVb37f0nKavf4fsyqi4 13COXuy8fRobKd5fhzdUfMclwIB0fU54crw5oCkRmXapFnZFc/5d5cUZTkS/Z7UhPUSk n3Owx/RxH1ya216WPGOv4LJ1QTFZXne72rHz3JCMMOp2rzk4IZcNaZzg0/a5CC1VvHe7 P6AA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=k+Z0/0x6oiAyakYl3nyHj+z5KsXX2ACfUo3JoTiwy7E=; b=tWCGH6qtuqFflYp+0FqTFT+uHBGONRAgKiMDYTh0E05Ld+QqA/gZS5wJV0lE+MmnS9 T/Q3uq0tGOrmrrhLdIEwsafL7akTfIxW9lDJmR5taQn0flonwGoB3rFK3e8vSa6Qu3Kd jlDDoGWMSQEJjOmdq31V/BIgvg6slGeuKhz4IWYs4+n0tvMigZQlQR+RtIPA024H8yZs CIrq41qWiRW8K+60HICPUg0XJ3286PHKla7Vkp8kNY1+jnjDGIc4fKs5+lCn8jZzQqQS InIuvPRsQRUkonObRu6vTQkr6qjOWo3s46hLWOpKhK5OJmry6BgilZRKf4N9+xGgCyFU 5SUQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=BWjG0Hue; 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 e8-20020a17090658c800b0073d5b609447si1823253ejs.324.2022.09.06.02.25.31; Tue, 06 Sep 2022 02:25:43 -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=BWjG0Hue; 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 0FAC368013B; Tue, 6 Sep 2022 12:25:10 +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 886C168BAB0 for ; Tue, 6 Sep 2022 12:25:02 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1662456307; x=1693992307; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=N2CykzJAk8OKnjDlRTOyOJqM/LYGDBdPhsMb/1lEIPY=; b=BWjG0HuerkPcV+T2eHDFnA0VkzeHzcHzlNbeT6++ihfAEO8eyN3dKju2 iC0fY2qTCxALfb/EmAjiJKsAaRSAr5oFVBkm96lyH/W0dNAACPBpjXnuD sD1jXuWfFtu+GqJr8V1BwEjBiekxHjwUEIzzPW9nhXi3BxcPWydPvJ0Do BFdHLJiu9YZsfbX7nI3Z1XCuWH9PKYRATEHfzg449Bej6OzepdTsqcFFo EaCI1bIhsxipiR45RFYHTp9DIl/c8hO+KLYyXM5lJgeZL3qzoy+KHlHhJ PkUIKrBEoUpPVcXLkCbDNrg9FvJqPTcuS6UgNa1i9SoPkWvEe7jV3RSD0 g==; X-IronPort-AV: E=McAfee;i="6500,9779,10461"; a="322720549" X-IronPort-AV: E=Sophos;i="5.93,293,1654585200"; d="scan'208";a="322720549" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Sep 2022 02:24:57 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,293,1654585200"; d="scan'208";a="565028241" Received: from wenbin-z390-aorus-ultra.sh.intel.com ([10.239.35.4]) by orsmga003.jf.intel.com with ESMTP; 06 Sep 2022 02:24:57 -0700 From: Wenbin Chen To: ffmpeg-devel@ffmpeg.org Date: Tue, 6 Sep 2022 17:22:54 +0800 Message-Id: <20220906092258.994742-3-wenbin.chen@intel.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220906092258.994742-1-wenbin.chen@intel.com> References: <20220906092258.994742-1-wenbin.chen@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 3/7] libavcodec/qsvenc: Add gop_size reset support to qsvenc 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: KQZ3GG33HdOy Signed-off-by: Wenbin Chen --- doc/encoders.texi | 3 +++ libavcodec/qsvenc.c | 16 ++++++++++++++++ libavcodec/qsvenc.h | 2 ++ 3 files changed, 21 insertions(+) diff --git a/doc/encoders.texi b/doc/encoders.texi index aadb6ab9fd..bc1a4dae38 100644 --- a/doc/encoders.texi +++ b/doc/encoders.texi @@ -3348,6 +3348,9 @@ Change these value to reset qsv codec's qp configuration. @item @var{max_frame_size} Supported in h264_qsv and hevc_qsv. Change this value to reset qsv codec's MaxFrameSize configuration. + +@item @var{gop_size} +Change this value to reset qsv codec's gop configuration. @end table @subsection H264 options diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index 915a1abd26..9a0431630a 100644 --- a/libavcodec/qsvenc.c +++ b/libavcodec/qsvenc.c @@ -636,6 +636,7 @@ static int init_video_param(AVCodecContext *avctx, QSVEncContext *q) q->param.mfx.CodecProfile = q->profile; q->param.mfx.TargetUsage = avctx->compression_level; q->param.mfx.GopPicSize = FFMAX(0, avctx->gop_size); + q->old_gop_size = avctx->gop_size; q->param.mfx.GopRefDist = FFMAX(-1, avctx->max_b_frames) + 1; q->param.mfx.GopOptFlag = avctx->flags & AV_CODEC_FLAG_CLOSED_GOP ? MFX_GOP_CLOSED : MFX_GOP_STRICT; @@ -1694,6 +1695,20 @@ static int update_max_frame_size(AVCodecContext *avctx, QSVEncContext *q) return updated; } +static int update_gop_size(AVCodecContext *avctx, QSVEncContext *q) +{ + int updated = 0; + UPDATE_PARAM(q->old_gop_size, avctx->gop_size); + if (!updated) + return 0; + + q->param.mfx.GopPicSize = FFMAX(0, avctx->gop_size); + av_log(avctx, AV_LOG_DEBUG, "reset GopPicSize to %d\n", + q->param.mfx.GopPicSize); + + return updated; +} + static int update_parameters(AVCodecContext *avctx, QSVEncContext *q, const AVFrame *frame) { @@ -1704,6 +1719,7 @@ static int update_parameters(AVCodecContext *avctx, QSVEncContext *q, needReset = update_qp(avctx, q); needReset |= update_max_frame_size(avctx, q); + needReset |= update_gop_size(avctx, q); if (!needReset) return 0; diff --git a/libavcodec/qsvenc.h b/libavcodec/qsvenc.h index 3984ae7dd8..5f6955a3a7 100644 --- a/libavcodec/qsvenc.h +++ b/libavcodec/qsvenc.h @@ -251,6 +251,8 @@ typedef struct QSVEncContext { float old_b_quant_offset; // This is used for max_frame_size reset int old_max_frame_size; + // This is used for gop reset + int old_gop_size; } QSVEncContext; int ff_qsv_enc_init(AVCodecContext *avctx, QSVEncContext *q); From patchwork Tue Sep 6 09:22:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Chen, Wenbin" X-Patchwork-Id: 37691 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:139a:b0:8f:1db5:eae2 with SMTP id w26csp3135726pzh; Tue, 6 Sep 2022 02:25:41 -0700 (PDT) X-Google-Smtp-Source: AA6agR6c8ewTn0NF9o7fGQHI6lQEQKeoHsXE1thoCXua63GH3qdKHKxLw8Edmhw5bQsMDnD1kJ8H X-Received: by 2002:a05:6402:24a4:b0:440:8c0c:8d2b with SMTP id q36-20020a05640224a400b004408c0c8d2bmr45448352eda.311.1662456341044; Tue, 06 Sep 2022 02:25:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662456341; cv=none; d=google.com; s=arc-20160816; b=mY+zjRqu3y7Ljx5asaPVlo8X0KJq9EDGahwvMt6wPq1GlgBVqWN3EM4dKSk5Q7m+nC mm7Mi4pLt2RNziqZPyxaA/G2Ccx/wj7e180qTE9Rch9I93Q/2kWeSsTjIUmA28DZwl22 4rJxp82+efk2skVn1ajkMF9Q/WTnGo9O1TpegVL2kP8mcfFu/YF/ZGSDHDhsxn01kpn6 g4LaLTLEBUZWDVBDxE/KNODgw/50rzJBRm79Sok2e6KnkLfFb+34la+ty1Ws0c4sv4V6 V7dNQMAVHsHlhz8IHcSU2dpnJKBUu7EzgQg52S3egR6KXTkPqhw5SjQ56zZyjB8BWxIL Tdqw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=umL9AQq2n5uDkRyuPLAP5OOpIxSkjqAkqZtAiMpwrV4=; b=0P61bsbLd8qlCiwNqmowiG3aMcWaV0VaUrLqOW0VpRAmkHFM+jEzAxF/DX757mw8lX ObB1OKTckzVcoDGREmTpLx0LKpPXpYSsfmeoqHcFYHedlVQa8o60XyNn/tnR/njlil2q M9fRqLF2oiJdblBmyq6WcU6YpvJ6N0GbSuqXOI7CXPE9jDF+jn8Nvv+YHdJoBSCG++P/ BN+HfRiq26zul4zEiFA/TiEKzytiX4FHPQZr5HOslvIHL4F4SkzjNFflhp+81rvFgDRn Mf4SScDFRgwwATaZesmKkpCqSQDxh+6kmyfS85bXz1LTpq9MWQ4B24ymQkzn7E07gCo8 AoFA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=igEDGTIj; 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 sc27-20020a1709078a1b00b0073d71b3e93dsi9815412ejc.285.2022.09.06.02.25.40; Tue, 06 Sep 2022 02:25:41 -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=igEDGTIj; 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 3F10A68BABA; Tue, 6 Sep 2022 12:25:12 +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 8556A68BAB1 for ; Tue, 6 Sep 2022 12:25:04 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1662456309; x=1693992309; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=UmqcWIEaRKCiRF37H+et1pwHkcg4UehKI8L0LKGvRho=; b=igEDGTIjVWOPKUwQuJ/xaTdR6tycnbLQ/3f3v6dxADfh5ehSI8EMijS2 jJz2Ibzp8cBKont3mDuFdnFdy0ygVDosLLPlopXpAU+Xep6nBm1fqysxw B2fcpQiVMBc++xy+d1bpV54EgJWPuVSgHV3Qwi/XfAMRMu5NyNRAnwfFd sIkfDi+QZDDWsYX3PgOXIaFLZv3mq074MzUubD0zFYho3PvN1BeRYYcG9 sGXYmFyocnDKZkGMhK4LCiT2nvAsY7t6JVIF1N58n7tODgHN4CYruUnyw YD/m6IOiRfHF1F7FklX2nWIuNb9mu+9SkBOC+DuMth3maCPmHIHeaV3jZ g==; X-IronPort-AV: E=McAfee;i="6500,9779,10461"; a="322720553" X-IronPort-AV: E=Sophos;i="5.93,293,1654585200"; d="scan'208";a="322720553" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Sep 2022 02:24:58 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,293,1654585200"; d="scan'208";a="565028243" Received: from wenbin-z390-aorus-ultra.sh.intel.com ([10.239.35.4]) by orsmga003.jf.intel.com with ESMTP; 06 Sep 2022 02:24:58 -0700 From: Wenbin Chen To: ffmpeg-devel@ffmpeg.org Date: Tue, 6 Sep 2022 17:22:55 +0800 Message-Id: <20220906092258.994742-4-wenbin.chen@intel.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220906092258.994742-1-wenbin.chen@intel.com> References: <20220906092258.994742-1-wenbin.chen@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 4/7] libavcodec/qsvenc: Add "slice" intra refresh type to qsvenc 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Fje7S8IOImNM Add "slice" intra refresh type to h264_qsv and hevc_qsv. This type means horizontal refresh by slices without overlapping. Also update the doc. Signed-off-by: Wenbin Chen --- doc/encoders.texi | 12 ++++++++---- libavcodec/qsvenc_h264.c | 1 + libavcodec/qsvenc_hevc.c | 1 + 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/doc/encoders.texi b/doc/encoders.texi index bc1a4dae38..d5d695d39c 100644 --- a/doc/encoders.texi +++ b/doc/encoders.texi @@ -3454,8 +3454,10 @@ Specifies intra refresh type. The major goal of intra refresh is improvement of error resilience without significant impact on encoded bitstream size caused by I frames. The SDK encoder achieves this by encoding part of each frame in refresh cycle using intra MBs. @var{none} means no refresh. @var{vertical} means -vertical refresh, by column of MBs. To enable intra refresh, B frame should be -set to 0. +vertical refresh, by column of MBs. @var{horizontal} means horizontal refresh, +by rows of MBs. @var{slice} means horizontal refresh by slices without +overlapping. In case of @var{slice}, in_ref_cycle_size is ignored. To enable +intra refresh, B frame should be set to 0. @item @var{int_ref_cycle_size} Specifies number of pictures within refresh cycle starting from 2. 0 and 1 are @@ -3641,8 +3643,10 @@ Specifies intra refresh type. The major goal of intra refresh is improvement of error resilience without significant impact on encoded bitstream size caused by I frames. The SDK encoder achieves this by encoding part of each frame in refresh cycle using intra MBs. @var{none} means no refresh. @var{vertical} means -vertical refresh, by column of MBs. To enable intra refresh, B frame should be -set to 0. +vertical refresh, by column of MBs. @var{horizontal} means horizontal refresh, +by rows of MBs. @var{slice} means horizontal refresh by slices without +overlapping. In case of @var{slice}, in_ref_cycle_size is ignored. To enable +intra refresh, B frame should be set to 0. @item @var{int_ref_cycle_size} Specifies number of pictures within refresh cycle starting from 2. 0 and 1 are diff --git a/libavcodec/qsvenc_h264.c b/libavcodec/qsvenc_h264.c index 1bbdc45203..8bc4ef95d2 100644 --- a/libavcodec/qsvenc_h264.c +++ b/libavcodec/qsvenc_h264.c @@ -139,6 +139,7 @@ static const AVOption options[] = { { "none", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, .flags = VE, "int_ref_type" }, { "vertical", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, .flags = VE, "int_ref_type" }, { "horizontal", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 2 }, .flags = VE, "int_ref_type" }, + { "slice" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 3 }, .flags = VE, "int_ref_type" }, { "int_ref_cycle_size", "Number of frames in the intra refresh cycle", OFFSET(qsv.int_ref_cycle_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, UINT16_MAX, VE }, { "int_ref_qp_delta", "QP difference for the refresh MBs", OFFSET(qsv.int_ref_qp_delta), AV_OPT_TYPE_INT, { .i64 = INT16_MIN }, INT16_MIN, INT16_MAX, VE }, { "recovery_point_sei", "Insert recovery point SEI messages", OFFSET(qsv.recovery_point_sei), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 1, VE }, diff --git a/libavcodec/qsvenc_hevc.c b/libavcodec/qsvenc_hevc.c index 5986c3f1a6..ba7cb6fba6 100644 --- a/libavcodec/qsvenc_hevc.c +++ b/libavcodec/qsvenc_hevc.c @@ -270,6 +270,7 @@ static const AVOption options[] = { { "none", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, .flags = VE, "int_ref_type" }, { "vertical", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, .flags = VE, "int_ref_type" }, { "horizontal", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 2 }, .flags = VE, "int_ref_type" }, + { "slice" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 3 }, .flags = VE, "int_ref_type" }, { "int_ref_cycle_size", "Number of frames in the intra refresh cycle", OFFSET(qsv.int_ref_cycle_size), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, UINT16_MAX, VE }, { "int_ref_qp_delta", "QP difference for the refresh MBs", OFFSET(qsv.int_ref_qp_delta), AV_OPT_TYPE_INT, { .i64 = INT16_MIN }, INT16_MIN, INT16_MAX, VE }, { "int_ref_cycle_dist", "Distance between the beginnings of the intra-refresh cycles in frames", OFFSET(qsv.int_ref_cycle_dist), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT16_MAX, VE }, From patchwork Tue Sep 6 09:22:56 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Chen, Wenbin" X-Patchwork-Id: 37693 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:139a:b0:8f:1db5:eae2 with SMTP id w26csp3135793pzh; Tue, 6 Sep 2022 02:25:52 -0700 (PDT) X-Google-Smtp-Source: AA6agR5xh6JsgF4zIxY6D5swMuIB3O2ZT4v+dNB+FiKvUQw7BYZB7PT2qZWFcdQPEDFTh985CJ/2 X-Received: by 2002:a05:6402:516f:b0:44e:9151:d54b with SMTP id d15-20020a056402516f00b0044e9151d54bmr6371423ede.241.1662456352110; Tue, 06 Sep 2022 02:25:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662456352; cv=none; d=google.com; s=arc-20160816; b=r7bbiDegM1zbjrAnfIvUmSX8Hill94zrTRYkYwqwH56XcVZX7ZhcvRn5HpVvkHk+B2 gm5lbQlSS5IEx+P8NpaXnL+cwWenI+8Xp3JLntglbnEIlYuJHIF3zZuepI3qe+G/Houk R+AgvT6MZr0PXXBCXBBjMEAroKhItR0GCLDwXzhlHOOkE9OfCcUGeSOc/LnFxSy0q2aB DTiD9zdZo3tQsnWvVxPFaY/ewb0kRREbqQ9Xk6m5iZ4nwD8aqJ4VNjAlb464NT45fbIQ +U4Y0ZVH5BRfYP3LextR2Fdy7F794O02cDNrSf9eCygGb3hcfhHHN9sXghrO2xthk1ZY Mdnw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=mzN+M1ALt0vPUTCpMfZRS/CGFveiUPTass+2ggbEPB0=; b=tS9VAykVBLEaDupxwQNWx9Skj6EIUkjWND669paz20pjxqCccYzKeiee5YZre3prZ7 3QEyBWWayWfGdL5UC+A5JhFu+DZwkhxorV2WJhYg2DVu102yslLnccTX8Eixb+0VWgKG QhqUuxdoTbkuZ6AHbqckbX1yNlHU+Y8jzNB4J4LjQGiQh+GDzfYgQOkR6Upcu34yutaz /03aw2RhU3xYwvcLrsNUSsKh9m9mz8WRhh9EwFPazUyHX9RXJ5Exd5ouTRht1Lc/cgsg ARC84MCIw7kpVW821G0gGfxhz0O5VE8slcfhCivOk1+J+SgBADnXwx1igdYrnmsCuGJk a2qg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=bRbpOx41; 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 z8-20020a1709060f0800b0073d74bcac8dsi8437795eji.513.2022.09.06.02.25.50; Tue, 06 Sep 2022 02:25:52 -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=bRbpOx41; 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 386BB68BAD5; Tue, 6 Sep 2022 12:25:13 +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 6C8FC68BABA for ; Tue, 6 Sep 2022 12:25:06 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1662456311; x=1693992311; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=Dm6iyAbMXlogXiO6kvVaILWG04BIVyKPE/GXfloc6Yc=; b=bRbpOx418S07Q8bPhN4TsklCkum905H9JG2Gjvm6m4NG+Gus7VxyRyTR t5MXXbj0Jngeh8rGrmOE+e4eyax9To5BvWuOP4u6fmQqsNa5oK0yyTLdB GKn3ePzEH2ROk06KpseOPGB2CekoY3qa0J+EaGG8n+y9vpkt7QXMkX+ke SU8lGOLjpR7lyRb/UrRcKS5rN8I/LOtgxzj5upzsSYdTVSrXFYtK0UO2z +wWT2m6M7K70m6/EvSdp6XgSvrFdp7+tMKM3RMdQIyea7pSA0MLx13Pc4 uEB8kjnUoPKvp0AEGXsvpHpqlfIyEYXkxEYMHs/hHSdnUzImRD0Pk30uj w==; X-IronPort-AV: E=McAfee;i="6500,9779,10461"; a="322720557" X-IronPort-AV: E=Sophos;i="5.93,293,1654585200"; d="scan'208";a="322720557" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Sep 2022 02:24:59 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,293,1654585200"; d="scan'208";a="565028246" Received: from wenbin-z390-aorus-ultra.sh.intel.com ([10.239.35.4]) by orsmga003.jf.intel.com with ESMTP; 06 Sep 2022 02:24:59 -0700 From: Wenbin Chen To: ffmpeg-devel@ffmpeg.org Date: Tue, 6 Sep 2022 17:22:56 +0800 Message-Id: <20220906092258.994742-5-wenbin.chen@intel.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220906092258.994742-1-wenbin.chen@intel.com> References: <20220906092258.994742-1-wenbin.chen@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 5/7] libavcodec/qsvenc: Add intra refresh reset support to qsvenc 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: DXy5Bw9AOhct Signed-off-by: Wenbin Chen --- doc/encoders.texi | 7 +++++++ libavcodec/qsvenc.c | 33 +++++++++++++++++++++++++++++++++ libavcodec/qsvenc.h | 5 +++++ 3 files changed, 45 insertions(+) diff --git a/doc/encoders.texi b/doc/encoders.texi index d5d695d39c..da56159858 100644 --- a/doc/encoders.texi +++ b/doc/encoders.texi @@ -3351,6 +3351,13 @@ Change this value to reset qsv codec's MaxFrameSize configuration. @item @var{gop_size} Change this value to reset qsv codec's gop configuration. + +@item @var{int_ref_type} +@item @var{int_ref_cycle_size} +@item @var{int_ref_qp_delta} +@item @var{int_ref_cycle_dist} +Supported in h264_qsv and hevc_qsv. +Change these value to reset qsv codec's Intra Refresh configuration. @end table @subsection H264 options diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index 9a0431630a..cd0549b249 100644 --- a/libavcodec/qsvenc.c +++ b/libavcodec/qsvenc.c @@ -828,10 +828,13 @@ static int init_video_param(AVCodecContext *avctx, QSVEncContext *q) q->old_max_frame_size = q->max_frame_size; if (q->int_ref_type >= 0) q->extco2.IntRefType = q->int_ref_type; + q->old_int_ref_type = q->int_ref_type; if (q->int_ref_cycle_size >= 0) q->extco2.IntRefCycleSize = q->int_ref_cycle_size; + q->old_int_ref_cycle_size = q->int_ref_cycle_size; if (q->int_ref_qp_delta != INT16_MIN) q->extco2.IntRefQPDelta = q->int_ref_qp_delta; + q->old_int_ref_qp_delta = q->int_ref_qp_delta; if (q->max_slice_size >= 0) q->extco2.MaxSliceSize = q->max_slice_size; q->extco2.DisableDeblockingIdc = q->dblk_idc; @@ -920,6 +923,7 @@ static int init_video_param(AVCodecContext *avctx, QSVEncContext *q) } if (q->int_ref_cycle_dist >= 0) q->extco3.IntRefCycleDist = q->int_ref_cycle_dist; + q->old_int_ref_cycle_dist = q->int_ref_cycle_dist; if (q->low_delay_brc >= 0) q->extco3.LowDelayBRC = q->low_delay_brc ? MFX_CODINGOPTION_ON : MFX_CODINGOPTION_OFF; if (q->max_frame_size_i >= 0) @@ -1709,6 +1713,34 @@ static int update_gop_size(AVCodecContext *avctx, QSVEncContext *q) return updated; } +static int update_rir(AVCodecContext *avctx, QSVEncContext *q) +{ + int updated = 0; + + if (avctx->codec_id != AV_CODEC_ID_H264 && avctx->codec_id != AV_CODEC_ID_HEVC) + return 0; + + UPDATE_PARAM(q->old_int_ref_type, q->int_ref_type); + UPDATE_PARAM(q->old_int_ref_cycle_size, q->int_ref_cycle_size); + UPDATE_PARAM(q->old_int_ref_qp_delta, q->int_ref_qp_delta); + UPDATE_PARAM(q->old_int_ref_cycle_dist, q->int_ref_cycle_dist); + if (!updated) + return 0; + + q->extco2.IntRefType = FFMAX(0, q->int_ref_type); + q->extco2.IntRefCycleSize = FFMAX(0, q->int_ref_cycle_size); + q->extco2.IntRefQPDelta = + q->int_ref_qp_delta != INT16_MIN ? q->int_ref_qp_delta : 0; + q->extco3.IntRefCycleDist = FFMAX(0, q->int_ref_cycle_dist); + av_log(avctx, AV_LOG_DEBUG, + "Reset IntRefType: %d; IntRefCycleSize: %d; " + "IntRefQPDelta: %d; IntRefCycleDist: %d\n", + q->extco2.IntRefType, q->extco2.IntRefCycleSize, + q->extco2.IntRefQPDelta, q->extco3.IntRefCycleDist); + + return updated; +} + static int update_parameters(AVCodecContext *avctx, QSVEncContext *q, const AVFrame *frame) { @@ -1720,6 +1752,7 @@ static int update_parameters(AVCodecContext *avctx, QSVEncContext *q, needReset = update_qp(avctx, q); needReset |= update_max_frame_size(avctx, q); needReset |= update_gop_size(avctx, q); + needReset |= update_rir(avctx, q); if (!needReset) return 0; diff --git a/libavcodec/qsvenc.h b/libavcodec/qsvenc.h index 5f6955a3a7..2eada6ab26 100644 --- a/libavcodec/qsvenc.h +++ b/libavcodec/qsvenc.h @@ -253,6 +253,11 @@ typedef struct QSVEncContext { int old_max_frame_size; // This is used for gop reset int old_gop_size; + // These are used for intra refresh reset + int old_int_ref_type; + int old_int_ref_cycle_size; + int old_int_ref_qp_delta; + int old_int_ref_cycle_dist; } QSVEncContext; int ff_qsv_enc_init(AVCodecContext *avctx, QSVEncContext *q); From patchwork Tue Sep 6 09:22:57 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Chen, Wenbin" X-Patchwork-Id: 37694 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:139a:b0:8f:1db5:eae2 with SMTP id w26csp3135861pzh; Tue, 6 Sep 2022 02:26:01 -0700 (PDT) X-Google-Smtp-Source: AA6agR6/mWnSG28HbgkUsY43tuoavQ73gemEIsqlstutiL2wg8oC4ttswoMtC20Kejmm5i4b923i X-Received: by 2002:a05:6402:e01:b0:442:dd7e:f49d with SMTP id h1-20020a0564020e0100b00442dd7ef49dmr46121358edh.355.1662456361571; Tue, 06 Sep 2022 02:26:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662456361; cv=none; d=google.com; s=arc-20160816; b=ef2t35LgP5uTB7iwM3+PhLWnL6uh3PtIcVKosi5Y7M3Ic3+iV2FK2q7yKIDJDALSfV FmR3uPlbuKjGxb6lc0RYUREdj3BxtP9KXFBdVbUSbvM5tN6RdVVSDm8B02qlT8AMBIK7 TK45imJeCmcNFXPf276eQ08Qe97lweLgXvwoyxT+g534ub8p0L6tufMvCuyKPyIKUVBk i1tFL9rAdzXGYbhS2E4gUYrKl6qKuX3LD0DkS5vCeYj13WotQ1CNMuAh+PF/5HI7pwy8 XgDUmMVUUntNPSaWdcVYFfUUPskPw8UVx+zn583lb3M7W5T57reGv3Fm1IcsNgTYRLVr fp4g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=bmYIRhDgvc7C9hSLPzg4w/i4ExF3yXFfzaM5RnjXbvU=; b=P3By0hvJO4hDmuHkdH1AuCVSaibczz5zMirrWW54e/R4SXQM7A3W7VYOs7QiMRV9cb 4J5OHMOytqKUCGF2hLOnfu4S6dGQcXzb5LWtUw1+CO7tXlFTPDmFemyiLwVp/TYpFBCP Ddz6QLgB2FU8DSwfyUqoQZziMxdgxrrzllsNkEs+Uf3mLoUlLOmbB23zlrCgYeLkfLea WBzvT2VAcaErkMpVGnKAccVHyq1rY+1tMxkXZWyUosJUR6EUSVhMdjGPaT4xAJ02xlm8 XGKF4UnCIfQDgwP3mOeerd6VaiLoICwVUQdLjkldRUlSeUTbGbq0D64DCTShgn1WHH5J sxbQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=oI1a1dCp; 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 k7-20020aa7d2c7000000b0044e6700024asi4617130edr.116.2022.09.06.02.26.01; Tue, 06 Sep 2022 02:26:01 -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=oI1a1dCp; 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 50BB668BADF; Tue, 6 Sep 2022 12:25:15 +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 6EF4668BAD6 for ; Tue, 6 Sep 2022 12:25:08 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1662456313; x=1693992313; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=d+owIHjPMmWOhdv85sibDyZSbAcPrXO5mYfgmp1qKLE=; b=oI1a1dCpiPTp/CXsSQCIQqG3dGsLUW3MVXssEISOKXEGIZZ8ev+rOXbW q5j2WSPqcuxbt1GFh+EjDU5D7kIf65nr1So1Uq6k920zEKizB7RzLyJxQ wkdIQgIQzYYxzvsQOYFIQtOPGErdSokPEJ8NUHzPpGEYoYSaYZfYZDTFj PO7Us/MZ4DUqKK0CY1AD89Avg7b+deQIXFcXZUd7p3P9aR4kJlSfb8hCa ZqclNFncFDx3s5itxT1ohnAbRtz6mrTk38xC+0CvoUHWTcyh7LzQ4cKou jORu9C0GtgwtC6xAhRRBTsBmZ3U8zR0OZFb/4q47k0m19EoHxrksNNUxL A==; X-IronPort-AV: E=McAfee;i="6500,9779,10461"; a="322720562" X-IronPort-AV: E=Sophos;i="5.93,293,1654585200"; d="scan'208";a="322720562" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Sep 2022 02:25:00 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,293,1654585200"; d="scan'208";a="565028251" Received: from wenbin-z390-aorus-ultra.sh.intel.com ([10.239.35.4]) by orsmga003.jf.intel.com with ESMTP; 06 Sep 2022 02:25:00 -0700 From: Wenbin Chen To: ffmpeg-devel@ffmpeg.org Date: Tue, 6 Sep 2022 17:22:57 +0800 Message-Id: <20220906092258.994742-6-wenbin.chen@intel.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220906092258.994742-1-wenbin.chen@intel.com> References: <20220906092258.994742-1-wenbin.chen@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 6/7] libavcodec/qsvenc: Add max/min qp reset support in qsvenc 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: oKhZUhXdbWRI Signed-off-by: Wenbin Chen --- doc/encoders.texi | 11 +++++++ libavcodec/qsvenc.c | 78 +++++++++++++++++++++++++++++++++++++++++++++ libavcodec/qsvenc.h | 9 ++++++ 3 files changed, 98 insertions(+) diff --git a/doc/encoders.texi b/doc/encoders.texi index da56159858..850e3c261c 100644 --- a/doc/encoders.texi +++ b/doc/encoders.texi @@ -3358,6 +3358,17 @@ Change this value to reset qsv codec's gop configuration. @item @var{int_ref_cycle_dist} Supported in h264_qsv and hevc_qsv. Change these value to reset qsv codec's Intra Refresh configuration. + +@item @var{qmax} +@item @var{qmin} +@item @var{max_qp_i} +@item @var{min_qp_i} +@item @var{max_qp_p} +@item @var{min_qp_p} +@item @var{max_qp_b} +@item @var{min_qp_b} +Supported in h264_qsv. +Change these value to reset qsv codec's max/min qp configuration. @end table @subsection H264 options diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index cd0549b249..215e5930ef 100644 --- a/libavcodec/qsvenc.c +++ b/libavcodec/qsvenc.c @@ -858,22 +858,30 @@ static int init_video_param(AVCodecContext *avctx, QSVEncContext *q) q->extco2.MinQPI = avctx->qmin > 51 ? 51 : avctx->qmin; q->extco2.MinQPP = q->extco2.MinQPB = q->extco2.MinQPI; } + q->old_qmin = avctx->qmin; if (avctx->qmax >= 0) { q->extco2.MaxQPI = avctx->qmax > 51 ? 51 : avctx->qmax; q->extco2.MaxQPP = q->extco2.MaxQPB = q->extco2.MaxQPI; } + q->old_qmax = avctx->qmax; if (q->min_qp_i >= 0) q->extco2.MinQPI = q->min_qp_i > 51 ? 51 : q->min_qp_i; + q->old_min_qp_i = q->min_qp_i; if (q->max_qp_i >= 0) q->extco2.MaxQPI = q->max_qp_i > 51 ? 51 : q->max_qp_i; + q->old_max_qp_i = q->max_qp_i; if (q->min_qp_p >= 0) q->extco2.MinQPP = q->min_qp_p > 51 ? 51 : q->min_qp_p; + q->old_min_qp_p = q->min_qp_p; if (q->max_qp_p >= 0) q->extco2.MaxQPP = q->max_qp_p > 51 ? 51 : q->max_qp_p; + q->old_max_qp_p = q->max_qp_p; if (q->min_qp_b >= 0) q->extco2.MinQPB = q->min_qp_b > 51 ? 51 : q->min_qp_b; + q->old_min_qp_b = q->min_qp_b; if (q->max_qp_b >= 0) q->extco2.MaxQPB = q->max_qp_b > 51 ? 51 : q->max_qp_b; + q->old_max_qp_b = q->max_qp_b; if (q->mbbrc >= 0) q->extco2.MBBRC = q->mbbrc ? MFX_CODINGOPTION_ON : MFX_CODINGOPTION_OFF; @@ -1741,6 +1749,71 @@ static int update_rir(AVCodecContext *avctx, QSVEncContext *q) return updated; } +static int update_min_max_qp(AVCodecContext *avctx, QSVEncContext *q) +{ + int updated = 0; + + if (avctx->codec_id != AV_CODEC_ID_H264) + return 0; + + UPDATE_PARAM(q->old_qmax, avctx->qmin); + UPDATE_PARAM(q->old_qmax, avctx->qmin); + UPDATE_PARAM(q->old_min_qp_i, q->min_qp_i); + UPDATE_PARAM(q->old_max_qp_i, q->max_qp_i); + UPDATE_PARAM(q->old_min_qp_p, q->min_qp_p); + UPDATE_PARAM(q->old_max_qp_p, q->max_qp_p); + UPDATE_PARAM(q->old_min_qp_b, q->min_qp_b); + UPDATE_PARAM(q->old_max_qp_b, q->max_qp_b); + if (!updated) + return 0; + + if ((avctx->qmin >= 0 && avctx->qmax >= 0 && avctx->qmin > avctx->qmax) || + (q->max_qp_i >= 0 && q->min_qp_i >= 0 && q->min_qp_i > q->max_qp_i) || + (q->max_qp_p >= 0 && q->min_qp_p >= 0 && q->min_qp_p > q->max_qp_p) || + (q->max_qp_b >= 0 && q->min_qp_b >= 0 && q->min_qp_b > q->max_qp_b)) { + av_log(avctx, AV_LOG_ERROR, + "qmin and or qmax are set but invalid," + " please make sure min <= max\n"); + return AVERROR(EINVAL); + } + + q->extco2.MinQPI = 0; + q->extco2.MaxQPI = 0; + q->extco2.MinQPP = 0; + q->extco2.MaxQPP = 0; + q->extco2.MinQPB = 0; + q->extco2.MaxQPB = 0; + if (avctx->qmin >= 0) { + q->extco2.MinQPI = avctx->qmin > 51 ? 51 : avctx->qmin; + q->extco2.MinQPB = q->extco2.MinQPP = q->extco2.MinQPI; + } + if (avctx->qmax >= 0) { + q->extco2.MaxQPI = avctx->qmax > 51 ? 51 : avctx->qmax; + q->extco2.MaxQPB = q->extco2.MaxQPP = q->extco2.MaxQPI; + } + if (q->min_qp_i >= 0) + q->extco2.MinQPI = q->min_qp_i > 51 ? 51 : q->min_qp_i; + if (q->max_qp_i >= 0) + q->extco2.MaxQPI = q->max_qp_i > 51 ? 51 : q->max_qp_i; + if (q->min_qp_p >= 0) + q->extco2.MinQPP = q->min_qp_p > 51 ? 51 : q->min_qp_p; + if (q->max_qp_p >= 0) + q->extco2.MaxQPP = q->max_qp_p > 51 ? 51 : q->max_qp_p; + if (q->min_qp_b >= 0) + q->extco2.MinQPB = q->min_qp_b > 51 ? 51 : q->min_qp_b; + if (q->max_qp_b >= 0) + q->extco2.MaxQPB = q->max_qp_b > 51 ? 51 : q->max_qp_b; + + av_log(avctx, AV_LOG_VERBOSE, "Reset MinQPI: %d; MaxQPI: %d; " + "MinQPP: %d; MaxQPP: %d; " + "MinQPB: %d; MaxQPB: %d\n", + q->extco2.MinQPI, q->extco2.MaxQPI, + q->extco2.MinQPP, q->extco2.MaxQPP, + q->extco2.MinQPB, q->extco2.MaxQPB); + + return updated; +} + static int update_parameters(AVCodecContext *avctx, QSVEncContext *q, const AVFrame *frame) { @@ -1753,6 +1826,11 @@ static int update_parameters(AVCodecContext *avctx, QSVEncContext *q, needReset |= update_max_frame_size(avctx, q); needReset |= update_gop_size(avctx, q); needReset |= update_rir(avctx, q); + + ret = update_min_max_qp(avctx, q); + if (ret < 0) + return ret; + needReset |= ret; if (!needReset) return 0; diff --git a/libavcodec/qsvenc.h b/libavcodec/qsvenc.h index 2eada6ab26..3ed20f757b 100644 --- a/libavcodec/qsvenc.h +++ b/libavcodec/qsvenc.h @@ -258,6 +258,15 @@ typedef struct QSVEncContext { int old_int_ref_cycle_size; int old_int_ref_qp_delta; int old_int_ref_cycle_dist; + // These are used for max/min qp reset; + int old_qmax; + int old_qmin; + int old_max_qp_i; + int old_min_qp_i; + int old_max_qp_p; + int old_min_qp_p; + int old_max_qp_b; + int old_min_qp_b; } QSVEncContext; int ff_qsv_enc_init(AVCodecContext *avctx, QSVEncContext *q); From patchwork Tue Sep 6 09:22:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Chen, Wenbin" X-Patchwork-Id: 37695 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:139a:b0:8f:1db5:eae2 with SMTP id w26csp3135997pzh; Tue, 6 Sep 2022 02:26:13 -0700 (PDT) X-Google-Smtp-Source: AA6agR5lTX0WyffmEVaWuqTcTLYs03a+iCGpOYtcWLtQLRzhw5+k7osgXUqYKkVGtwDH81IBvWnQ X-Received: by 2002:a17:907:1dec:b0:741:44ca:131a with SMTP id og44-20020a1709071dec00b0074144ca131amr31040934ejc.695.1662456373044; Tue, 06 Sep 2022 02:26:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662456373; cv=none; d=google.com; s=arc-20160816; b=K2RcVLsauT8ahd++Q0K5eZ4UTB4M+QXRS3N9FEdlz60VxHPbMnEVZn/zYzNDzSM4YK yKCNOWWplVvViUkCbgrGLoA8rDdlXQaaEhM3HreOsjxUG8h27NAYXu15JqpqKZpsNUBQ ukLSOGMelkW+ScelEf42N3WL4buLuJ9fP0bV+o70LJegBOB9mZPK1m/FCC3XCPA8l4hG XilC2md6BZFZNCUGH7NPhgi4jdQtsQm5W6F+/FgEorVTolvyJF+7xHtJheyQNzhO0tPf aG4Fc0d3A4Elm7aol82dmm6xNIWCYUebJ/hx0Gz20e8iSN/UBft2V0BaPkOxRDHT7VF9 FWJw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=3/6PeZJ+fK9sV1C8AdrdC6WBpBl27Buv/+H1yFbINUE=; b=pgPjvVv3dNbwUQsZi+OPbNHj6wtXgcGlxoCKjrdjJbkTi99hLqXyxaKyQVDhiQbFgz yLyr6LPNipqyZCXpLGZ5CM2ioNWsB4LwxS37Fms/i+XOZS/hgIvUhAxC1nzxzujK0+LY qchbG3NGjSvVg9mV36nd0txLKocl5zGQ9zOrIH4mtlf1QgIYd9Eiquxqza0kIk6ukWDs qzI5VoOKSn7XnGGOxJlNsw7LmuVJYWNpSzZwa68exPgxGEZfpPsmbJCooLvK7pgjcMrx AJ+lCJSaznHKgjCGUyAyFyaTCba774Pwacvy1dhCNNiUFoxj+mBZ/us5jdHrkMwMbS4d kaYA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=ipsUVhcB; 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 ds7-20020a170907724700b007417ca60a22si10216893ejc.38.2022.09.06.02.26.12; Tue, 06 Sep 2022 02:26:13 -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=ipsUVhcB; 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 6542968BACF; Tue, 6 Sep 2022 12:25:18 +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 473FE68BACF for ; Tue, 6 Sep 2022 12:25:10 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1662456316; x=1693992316; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=UdRXvt14f+eZC7u8DvHLglHbGh+3DONzIIlSQGhdwZs=; b=ipsUVhcBagXWysOOLqdpddzmvaN0MAqsKTLAa51pB/fD6N05FQyrUVKN RDTa9DPZ30Km3VpqeEsDgWajG9NgfBpIcM2cXXdUPgCQMj/liveNrsjc/ DD0Hr9k+sXPJQfSihT3W8KZp9qxXPg+8rRyEAW1Ux9VZ/xhqZXUjy0NYH IxQ/+675S0LuKPzKb16pVDSr3fGT344LEbD08o2dq48wD92JGfuU8/gx1 ea6pTxZ98m/+vn2yd5I42s9uroh+dLcqRH3/dclS5gGe4wu1bxH/LPfgF tNlrVVhw/cQOn6Tbi4HIxGBWuKiGLv6c4K67jy2KAg5zsdrD5O20db/2S A==; X-IronPort-AV: E=McAfee;i="6500,9779,10461"; a="322720564" X-IronPort-AV: E=Sophos;i="5.93,293,1654585200"; d="scan'208";a="322720564" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Sep 2022 02:25:01 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,293,1654585200"; d="scan'208";a="565028260" Received: from wenbin-z390-aorus-ultra.sh.intel.com ([10.239.35.4]) by orsmga003.jf.intel.com with ESMTP; 06 Sep 2022 02:25:01 -0700 From: Wenbin Chen To: ffmpeg-devel@ffmpeg.org Date: Tue, 6 Sep 2022 17:22:58 +0800 Message-Id: <20220906092258.994742-7-wenbin.chen@intel.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220906092258.994742-1-wenbin.chen@intel.com> References: <20220906092258.994742-1-wenbin.chen@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 7/7] libavcodec/qsvenc: Add low_delay_brc reset support to qsvenc 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Yp3W31F348TJ Signed-off-by: Wenbin Chen --- doc/encoders.texi | 4 ++++ libavcodec/qsvenc.c | 23 ++++++++++++++++++++++- libavcodec/qsvenc.h | 2 ++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/doc/encoders.texi b/doc/encoders.texi index 850e3c261c..453150f3e7 100644 --- a/doc/encoders.texi +++ b/doc/encoders.texi @@ -3369,6 +3369,10 @@ Change these value to reset qsv codec's Intra Refresh configuration. @item @var{min_qp_b} Supported in h264_qsv. Change these value to reset qsv codec's max/min qp configuration. + +@item @var{low_delay_brc} +Supported in h264_qsv and hevc_qsv. +Change this value to reset qsv codec's low_delay_brc configuration. @end table @subsection H264 options diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index 215e5930ef..58900d56a7 100644 --- a/libavcodec/qsvenc.c +++ b/libavcodec/qsvenc.c @@ -934,6 +934,7 @@ static int init_video_param(AVCodecContext *avctx, QSVEncContext *q) q->old_int_ref_cycle_dist = q->int_ref_cycle_dist; if (q->low_delay_brc >= 0) q->extco3.LowDelayBRC = q->low_delay_brc ? MFX_CODINGOPTION_ON : MFX_CODINGOPTION_OFF; + q->old_low_delay_brc = q->low_delay_brc; if (q->max_frame_size_i >= 0) q->extco3.MaxFrameSizeI = q->max_frame_size_i; if (q->max_frame_size_p >= 0) @@ -1814,6 +1815,26 @@ static int update_min_max_qp(AVCodecContext *avctx, QSVEncContext *q) return updated; } +static int update_low_delay_brc(AVCodecContext *avctx, QSVEncContext *q) +{ + int updated = 0; + + if (avctx->codec_id != AV_CODEC_ID_H264 && avctx->codec_id != AV_CODEC_ID_HEVC) + return 0; + + UPDATE_PARAM(q->old_low_delay_brc, q->low_delay_brc); + if (!updated) + return 0; + + q->extco3.LowDelayBRC = MFX_CODINGOPTION_UNKNOWN; + if (q->low_delay_brc >= 0) + q->extco3.LowDelayBRC = q->low_delay_brc ? MFX_CODINGOPTION_ON : MFX_CODINGOPTION_OFF; + av_log(avctx, AV_LOG_DEBUG, "Reset LowDelayBRC: %s\n", + print_threestate(q->extco3.LowDelayBRC)); + + return updated; +} + static int update_parameters(AVCodecContext *avctx, QSVEncContext *q, const AVFrame *frame) { @@ -1826,7 +1847,7 @@ static int update_parameters(AVCodecContext *avctx, QSVEncContext *q, needReset |= update_max_frame_size(avctx, q); needReset |= update_gop_size(avctx, q); needReset |= update_rir(avctx, q); - + needReset |= update_low_delay_brc(avctx, q); ret = update_min_max_qp(avctx, q); if (ret < 0) return ret; diff --git a/libavcodec/qsvenc.h b/libavcodec/qsvenc.h index 3ed20f757b..54e5cf89d3 100644 --- a/libavcodec/qsvenc.h +++ b/libavcodec/qsvenc.h @@ -267,6 +267,8 @@ typedef struct QSVEncContext { int old_min_qp_p; int old_max_qp_b; int old_min_qp_b; + // This is used for low_delay_brc reset + int old_low_delay_brc; } QSVEncContext; int ff_qsv_enc_init(AVCodecContext *avctx, QSVEncContext *q);