From patchwork Sat Apr 2 09:35: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: 35134 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c05:b0:7a:e998:b410 with SMTP id bw5csp1023342pzb; Sat, 2 Apr 2022 02:36:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxlrDDoqV91aBqnuGDwtMbpFc82ydiUXy91x/oFEVN1yVUvSKBOiX4Yk2YSG8VXj4cJpPZT X-Received: by 2002:a17:907:2ce1:b0:6df:85e4:d65d with SMTP id hz1-20020a1709072ce100b006df85e4d65dmr3233115ejc.209.1648892198442; Sat, 02 Apr 2022 02:36:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1648892198; cv=none; d=google.com; s=arc-20160816; b=vyo4v06mvvwjOnhe2Qw3rwYZgpAIxDkoLHqyUxbGxcKDy401Tsfy7unGhgkWNXpJ6x Bg+vLeyB8Dc2AF2t1/kSk7shlAKLoFNNqwTh0X5NNl7939W9UEBnK6ZByz8KrO5RxMHf 5WQnVufrX6DHr6ctooRISyugxvDhkdZglOjr8Q9zI3gRN73UnAvPRcJfae5Ir81H12/j oNLhK1tsetsZZPeYrDNqgW+KaMrehvTLcLTvDRi9wyxnGl6J7gA3HDGWPB6X5lKixJ5I 3rbJQgnc0K7Vx6KG4DMSYvQ1uUE/u9gsZvt55Tp2BFv2ppzmbL7CJSRCJUOze6WOn+DX Fg2Q== 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=iQ92lM0Ys/aLSCiLojbwXGtmeMinVzX16IB4upLYbus=; b=DmAjYNsPtlF+aqn++Y2c/8eOzw1Esde/7Z9ZGO+o/QAhfI/OIqQRQVOFrK9sIqAX3u 5K9uO8f/8DEaJqovhBxARrjdynPWrhMd34pVbuDVQ10iPgNPRqjnyGcea7Ch/0OoydaP /ANXFI7ESuDpePxsp+o7BmUImLWHxFWliPOKQodbAzMYF+Heij3/OqV01k8ZGuwYV6La NrsfvT+9cgAzTFy+tGJn/QXtZnfsrZl/4TK0UlAcOmzlUmVuXDkkhk3V3qUUefDToLQx SrcAKhPyc26I3jBw/kvie5i6lM28Zunh9U/M8M/+yIZZ4fMR8fxIn5oxY5Vd0L1OLWHu Bvbg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=TTjHsb5r; 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 i4-20020a1709061e4400b006df8927010fsi2709205ejj.777.2022.04.02.02.36.38; Sat, 02 Apr 2022 02:36:38 -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=TTjHsb5r; 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 B6AD668B20C; Sat, 2 Apr 2022 12:36:32 +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 DA75568B20C for ; Sat, 2 Apr 2022 12:36:25 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1648892191; x=1680428191; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=JZO532CCTP/6TLgrxFOL4RCh5ooeQRkaQVezB1X9BXo=; b=TTjHsb5r9aKDU13Yl7zoitQlaapFxlFRmED5kQpTK9tiWq/0w8lY20mh 8xYXYKQe7SyGJI7JE5rk6CerBpB+jjRbMRR0hzwqz0ItStNezKn3W/+3l emBUe+VI8AkJj4/ctYQo3pcDW8s8Qn3J0DarksUCIcy6ZKXv3jlQ8VTHB f0/S6NcPlrsJcnqju2jjmpGhGDkca2A1rrj82wBT2wMxKQa45JQ6+U8vI a5TkYm2RNYZKfjethMT9ok/Sy69Mk/ATHfw9+7aFzXq34XR7kqNMuhcs8 mhleqdzlh97z3DrE8QLoQW7L1IlwvmrQ2Gzl2sFDW4tD2q34WFkM6uI0F w==; X-IronPort-AV: E=McAfee;i="6200,9189,10304"; a="285228668" X-IronPort-AV: E=Sophos;i="5.90,229,1643702400"; d="scan'208";a="285228668" Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Apr 2022 02:36:18 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,229,1643702400"; d="scan'208";a="789051171" Received: from wenbin-z390-aorus-ultra.sh.intel.com ([10.239.35.4]) by fmsmga006.fm.intel.com with ESMTP; 02 Apr 2022 02:36:18 -0700 From: Wenbin Chen To: ffmpeg-devel@ffmpeg.org Date: Sat, 2 Apr 2022 17:35:53 +0800 Message-Id: <20220402093553.965954-2-wenbin.chen@intel.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220402093553.965954-1-wenbin.chen@intel.com> References: <20220402093553.965954-1-wenbin.chen@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 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: mMF5z8QwyEhL 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 40d60cde3c..55cce96022 100644 --- a/libavcodec/qsvenc.c +++ b/libavcodec/qsvenc.c @@ -1602,32 +1602,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 ret; } } 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 ade546d4ca..c8d58f9247 100644 --- a/libavcodec/qsvenc_hevc.c +++ b/libavcodec/qsvenc_hevc.c @@ -303,6 +303,8 @@ const AVCodec ff_hevc_qsv_encoder = { .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HYBRID, .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,