From patchwork Thu Jan 13 05:45:25 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 33546 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp148301iog; Wed, 12 Jan 2022 21:45:49 -0800 (PST) X-Google-Smtp-Source: ABdhPJyM8b+qgURyjml29yLXv8sK3LnWxBcPtadCX4IL9tdYt4x/Wvr0LWls+O3B2DOHdYtd1e9w X-Received: by 2002:a05:6402:d44:: with SMTP id ec4mr2798397edb.109.1642052749611; Wed, 12 Jan 2022 21:45:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642052749; cv=none; d=google.com; s=arc-20160816; b=uPBGN4qOqsQ3IZ3Jd/sMT54rBVSM2Z4AEFWiw0uYqp91oSw+IG7XcAPI0VGTYqGWzB TqHFK0sLf2ctdDPrat0VkDTfFBHwFcj07KW9sKlNrEKrNZXMpCJbhViLgeWzH66/ZXpl 8eREl0sJLu8qkuLd1CDozWwMntMIUG1jF6cKGnN8lK/+jAVyuQ857EQWUHp1HwYBYSPA qhdjs5OZwIAeS1W37UqnGbwZnPttA7FEUX1vRKnFgs2r6u4eWSnR7BS1f1bRU4FqA+qD 3i3AeTSSj7mAynXKDpUYFckDZkYdHrGi/RoUUOWMruwTRvslTHKvc1R2WO5KOfu1ZFut 9b6w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to; bh=+0pxQZY3JCleLiV5CyGKFHgtlIFT/6JBQVHCZdIyYL8=; b=GbF+7Vy3L84KNw9v1YDsn8RuJwtZVVGGZMJaO9iENnHLgBgHYKEcQFWLiTqZH/I11I OWTfUd0mw3bCy2gX012Jq9/7Z2QKEKL4WdSodw7MRMJwvLVgbGJQMR4khEneGZeDbkpu CjxXHy07agzdmFpWlyTX+5vpX0OWu0EU0tFMMtl1i4u9f6u8gW5AJgYiCg8Njf39k9TJ q+8HGW4mGdtXuBkARjuAfwkI+CeH0aXjg9nb8W/7RrsplVVpMf4FTk8VZxv/txMSHQC8 WekQu35EE5C9p9Yl8R0OywId47mcLCcY83HH//MhTRgqWSEJmxd46be3BGlsiq73pR1L HOZQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=hiZh92Ap; 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 ds10si1136338ejc.507.2022.01.12.21.45.48; Wed, 12 Jan 2022 21:45:49 -0800 (PST) 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=hiZh92Ap; 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 91E5F68BB86; Thu, 13 Jan 2022 07:45:45 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3F82B68B915 for ; Thu, 13 Jan 2022 07:45:38 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1642052743; x=1673588743; h=from:to:cc:subject:date:message-id; bh=CbChA7I0mo02JT7Gst69NNO52tYvxZaUt9bSn19HAW8=; b=hiZh92ApplJw7LOegZ5jRMbI+FSzNVRRuxJuLOnX7gDehPCxuV0DqecY AV668KjF9oRb8LGiGie8NXHw1g5D4BgZ4pFPF1whmtahEY4xlVhWJKpgg kzNwRUtXGOJYE7ZJzUhBGBZHknffWVgXPRc4lyLNQN7KJ1xr5ZPBOVZjH 8RRnKz19jbWRKBStNpiTMhimKlTaP+wA/Q2eL8uh6YZM5aB7CeavuGliU ljnINgpZWDyL8eue8d6sgwbakW0iQZWiOmwoqT+o3q+qr6hnZzmvjny4u 9QzGZH0pkudMySGav1N4D8/qA6HcFp4RsRJDN5GiFEw9pa/AXECOxgH9s w==; X-IronPort-AV: E=McAfee;i="6200,9189,10225"; a="223920115" X-IronPort-AV: E=Sophos;i="5.88,284,1635231600"; d="scan'208";a="223920115" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jan 2022 21:45:35 -0800 X-IronPort-AV: E=Sophos;i="5.88,284,1635231600"; d="scan'208";a="529526783" Received: from xhh-dg164.sh.intel.com ([10.239.159.167]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jan 2022 21:45:34 -0800 From: Haihao Xiang To: ffmpeg-devel@ffmpeg.org Date: Thu, 13 Jan 2022 13:45:25 +0800 Message-Id: <20220113054525.14057-1-haihao.xiang@intel.com> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH v2] lavc/qsvenc: add tile encoding support for VP9 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: Haihao Xiang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: ZLhExBm04kmb Add -tile_rows and -tile_cols options to specify the number of tile rows and columns Signed-off-by: Haihao Xiang --- v2: add option descriptions in the doc doc/encoders.texi | 6 ++++++ libavcodec/qsvenc.c | 4 ++++ libavcodec/qsvenc.h | 1 + libavcodec/qsvenc_vp9.c | 10 ++++++++++ 4 files changed, 21 insertions(+) diff --git a/doc/encoders.texi b/doc/encoders.texi index 7cc8be1209..a4176089d5 100644 --- a/doc/encoders.texi +++ b/doc/encoders.texi @@ -3457,6 +3457,12 @@ These options are used by vp9_qsv @item profile2 @item profile3 @end table + +@item @var{tile_cols} +Number of columns for tiled encoding (requires libmfx >= 1.29). + +@item @var{tile_rows} +Number of rows for tiled encoding (requires libmfx >= 1.29). @end table @section snow diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index 4e7a15f060..4cbc9ff4dc 100644 --- a/libavcodec/qsvenc.c +++ b/libavcodec/qsvenc.c @@ -939,6 +939,10 @@ static int init_video_param(AVCodecContext *avctx, QSVEncContext *q) q->extvp9param.Header.BufferId = MFX_EXTBUFF_VP9_PARAM; q->extvp9param.Header.BufferSz = sizeof(q->extvp9param); q->extvp9param.WriteIVFHeaders = MFX_CODINGOPTION_OFF; +#if QSV_HAVE_EXT_VP9_TILES + q->extvp9param.NumTileColumns = q->tile_cols; + q->extvp9param.NumTileRows = q->tile_rows; +#endif q->extparam_internal[q->nb_extparam_internal++] = (mfxExtBuffer *)&q->extvp9param; } #endif diff --git a/libavcodec/qsvenc.h b/libavcodec/qsvenc.h index 31516b8e55..00ee52a5d1 100644 --- a/libavcodec/qsvenc.h +++ b/libavcodec/qsvenc.h @@ -41,6 +41,7 @@ #define QSV_HAVE_EXT_HEVC_TILES QSV_VERSION_ATLEAST(1, 13) #define QSV_HAVE_EXT_VP9_PARAM QSV_VERSION_ATLEAST(1, 26) +#define QSV_HAVE_EXT_VP9_TILES QSV_VERSION_ATLEAST(1, 29) #define QSV_HAVE_TRELLIS QSV_VERSION_ATLEAST(1, 8) #define QSV_HAVE_MAX_SLICE_SIZE QSV_VERSION_ATLEAST(1, 9) diff --git a/libavcodec/qsvenc_vp9.c b/libavcodec/qsvenc_vp9.c index 9329990d11..1168ddda0e 100644 --- a/libavcodec/qsvenc_vp9.c +++ b/libavcodec/qsvenc_vp9.c @@ -73,6 +73,16 @@ static const AVOption options[] = { { "profile2", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_PROFILE_VP9_2 }, INT_MIN, INT_MAX, VE, "profile" }, { "profile3", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = MFX_PROFILE_VP9_3 }, INT_MIN, INT_MAX, VE, "profile" }, +#if QSV_HAVE_EXT_VP9_TILES + /* The minimum tile width in luma pixels is 256, set maximum tile_cols to 32 for 8K video */ + { "tile_cols", "Number of columns for tiled encoding", OFFSET(qsv.tile_cols), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 32, VE }, + /* Set maximum tile_rows to 4 per VP9 spec */ + { "tile_rows", "Number of rows for tiled encoding", OFFSET(qsv.tile_rows), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 4, VE }, +#else + { "tile_cols", "(not supported)", OFFSET(qsv.tile_cols), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 0, VE }, + { "tile_rows", "(not supported)", OFFSET(qsv.tile_rows), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 0, VE }, +#endif + { NULL }, };