From patchwork Wed Mar 30 06:43:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Chen, Wenbin" X-Patchwork-Id: 35053 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c05:b0:7a:e998:b410 with SMTP id bw5csp661986pzb; Tue, 29 Mar 2022 23:44:39 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx6OX1oA07KxFapB5tzJxs5Dpk5f10Bq3Y8f5lLFgMUtr/RM5XLsigQg3K2viIa/7e8xtRt X-Received: by 2002:aa7:d74d:0:b0:418:e883:b4e1 with SMTP id a13-20020aa7d74d000000b00418e883b4e1mr8828206eds.56.1648622679103; Tue, 29 Mar 2022 23:44:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1648622679; cv=none; d=google.com; s=arc-20160816; b=XN9HpzP/QQfyaLiDiuQpDdOMgmHVnKgvaV8hNa6T2/tEADNoG7el4xaISBArnLrZx+ pKjfeCMuAf5jyuIWyBLbjNub06ev4L7OQ+HE2xQaUqJCBoxvcPpTuy8Ikg47ZfaF9eDL r4VhyFx7GR4G6KIrfcBVNFyn89p2YhD6jxuBQrf/GGhXumu/5qTejByLdiISCJv3QvJg RaEBjybrBsJCPN6CNqcw8/t0Haik45n81uEnhcju5qLvNynApEUHQlwFDd/taxk4FGHf Sm03KTQR5/WK8gEVawXXGj84gc1YroBuSRRZVYYNFqbqVEZlPhOiTZkvAEl8EnLwCrd2 nGaw== 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=/4fRMSSXwf22SktY6SnVqxU4FlQdGwkAyVJp5/pM0Ks=; b=hGV+DNANZs/kwJHW7o8Jh13YsMexZcw0oAs4DqunQh15hDqHDrAWM6UVsLH6wUa+tr hBhrA6ur0nrtGPinshkaC7WBAXsVB9yUqDayNPN5xMFjn4Qtwfw0BWFrIZ8ue2FRNfCd 2OHgBW5JNnA0Afi9iq9aHSLr4plCbGQbjjVc2U+9ENVebjJ4KE24a7EeFA/OgoYCMszO 7nfWmjaNyT5LgjgVh37dnGcaYhQkPMzB5/KGnm3qWVvxC1DHPUd8hcijFgBfHgJjzYYr LPClPIoRAZ/JJ8xwrYmV/5PW54sCTaKzBnz0dDEbQr/L7jRM/yMno/hAxH4JpbTGjwE0 fiWQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b="dCnfW5M/"; 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 e11-20020a50fb8b000000b00418c2b5bf3bsi18879079edq.541.2022.03.29.23.44.38; Tue, 29 Mar 2022 23:44:39 -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="dCnfW5M/"; 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 19AC868B1E2; Wed, 30 Mar 2022 09:44:30 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 510CE6802A5 for ; Wed, 30 Mar 2022 09:44:23 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1648622668; x=1680158668; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=RG4q89Gq7FCsoWa1xP/WDUCQtTwBF9rPZ+HA2+iwRBI=; b=dCnfW5M/m5njhT3zQnwavysklYAzp9Pv3FD9KQTfx1IqT502HtG5M20c zqgO5MYL5U6OkiQOa/EjfDkBlP2Y8xyEp9lXKISoFX1MF2M06tyA0huYJ DhiL/htcWWZOZnt+XCeO4s/kOrXrpjDt8xxBw+hml7puYl2gTl1pzf4Ly Tov9kQITbHZRxZNM4NLBwr0z9NtE3Hz2MrCo8j263x/G2mpvwfs1IM4EM AZIzC+gyMoRyR7qolyO1M0ZaNbIOibLdakfbfOK+VSk/crPStDsCm77Iv +CvWUMhryz2ijPQjsKC1RaDVjSeMD/Y3jys4mmeVUHI83p1N27Amw+hkO Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10301"; a="345896686" X-IronPort-AV: E=Sophos;i="5.90,221,1643702400"; d="scan'208";a="345896686" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Mar 2022 23:44:15 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,221,1643702400"; d="scan'208";a="836831305" Received: from wenbin-z390-aorus-ultra.sh.intel.com ([10.239.35.4]) by fmsmga005.fm.intel.com with ESMTP; 29 Mar 2022 23:44:14 -0700 From: Wenbin Chen To: ffmpeg-devel@ffmpeg.org Date: Wed, 30 Mar 2022 14:43:49 +0800 Message-Id: <20220330064349.850881-2-wenbin.chen@intel.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220330064349.850881-1-wenbin.chen@intel.com> References: <20220330064349.850881-1-wenbin.chen@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/2] libavcodec/qsvenc: Add more pixel format 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: esZ3L7i9qlS1 Qsv encoder only support input P010 and nv12 format directly from system memory. For other format, we need to upload frame to device memory and input qsv format to encoder. Now add other system memory format support to qsv encoder. Signed-off-by: Wenbin Chen --- libavcodec/qsvenc.c | 30 ++++-------------------------- libavcodec/qsvenc_hevc.c | 2 ++ 2 files changed, 6 insertions(+), 26 deletions(-) diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index 55ce3d2499..eb94ab0650 100644 --- a/libavcodec/qsvenc.c +++ b/libavcodec/qsvenc.c @@ -1606,32 +1606,10 @@ static int submit_frame(QSVEncContext *q, const AVFrame *frame, else if (frame->repeat_pict == 4) qf->surface.Info.PicStruct |= MFX_PICSTRUCT_FRAME_TRIPLING; - qf->surface.Data.PitchLow = qf->frame->linesize[0]; - qf->surface.Data.Y = qf->frame->data[0]; - qf->surface.Data.UV = qf->frame->data[1]; - - /* The SDK checks Data.V when using system memory for VP9 encoding */ - switch (frame->format) { - case AV_PIX_FMT_NV12: - qf->surface.Data.V = qf->surface.Data.UV + 1; - break; - - case AV_PIX_FMT_P010: - qf->surface.Data.V = qf->surface.Data.UV + 2; - break; - - case AV_PIX_FMT_X2RGB10: - case AV_PIX_FMT_BGRA: - qf->surface.Data.B = qf->frame->data[0]; - qf->surface.Data.G = qf->frame->data[0] + 1; - qf->surface.Data.R = qf->frame->data[0] + 2; - qf->surface.Data.A = qf->frame->data[0] + 3; - break; - - default: - /* should not reach here */ - av_assert0(0); - break; + ret = ff_qsv_map_frame_to_surface(qf->frame, &qf->surface); + if (ret < 0) { + av_log(q->avctx, AV_LOG_ERROR, "map frame to surface failed.\n"); + return AVERROR(EINVAL); } } qf->surface.Data.TimeStamp = av_rescale_q(frame->pts, q->avctx->time_base, (AVRational){1, 90000}); diff --git a/libavcodec/qsvenc_hevc.c b/libavcodec/qsvenc_hevc.c index 5c1571f62f..1814774655 100644 --- a/libavcodec/qsvenc_hevc.c +++ b/libavcodec/qsvenc_hevc.c @@ -303,6 +303,8 @@ const FFCodec ff_hevc_qsv_encoder = { .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HYBRID, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, AV_PIX_FMT_P010, + AV_PIX_FMT_YUYV422, + AV_PIX_FMT_Y210, AV_PIX_FMT_QSV, #if QSV_VERSION_ATLEAST(1, 17) AV_PIX_FMT_BGRA,