From patchwork Thu Oct 6 07:35:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 38576 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4d9:b0:9c:f4b:4e41 with SMTP id 25csp67992pzd; Thu, 6 Oct 2022 00:38:15 -0700 (PDT) X-Google-Smtp-Source: AMsMyM685vCIZm7jUn+1Yh3GMgronBtllIu3bk507k7GusXaWGThaJM0kXd7pKXdA3njlBCHUeAv X-Received: by 2002:a05:6402:34c3:b0:459:cd99:3c7c with SMTP id w3-20020a05640234c300b00459cd993c7cmr2888813edc.213.1665041894814; Thu, 06 Oct 2022 00:38:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1665041894; cv=none; d=google.com; s=arc-20160816; b=vYYGs2SVIDoiIXNTvJ55wd2y0nHipUVGL43w9S/4VdjUzWI+LID+ojXVp1ON5Gg0c0 gUCozs4+PXD8FyJ+giiFyW3BDdx55yLDZMc6H4B3HvPMo7Fp/oBWp/1gBfpkqNGFn3v6 ZpkawsWGD0dEFwKLxsD20HZTEWyinqHqkIvZYKfbBN7KpYAQLcBrorkBhQBq/2GU+u89 BbXsfW6BdKmlCExtKxml1AO1QV0b3QJmzi/CxhvjjfYCSKy2Ge6j6dZSaBQNL+Npp03W gGIEq4/any1iWDQ7hmAy6uue9FBhROEmknlbzmki1qjqxhZ4dqn3+zCSM1zQxyuIen4a cvnA== 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=RHJRBijtDjrG1Tl7iUjF44I0ytX+lVt8y5p4OUC1kCE=; b=g6i5DNM03/5fF1xPZCwxzdWzaiOeCWNrGoT/mEfzBlyQhUL4LcqAz6x7X4L+Ku2nKm k9W1DSKnOHtiCvg5t++lrN6watF0OYkCp+v8HDxed/iKjIlrJq8Vv8cIujh54XN81t0k ADGf+JZsVYisPw/2xgl5Vj9D7pJwx+7+pMcS3ojpQHmlEfdpYbA1XQ4kZnCxFSAogt2q YGB/Stato3+6jLWAXwW9E7rVAdfjXuTgXq6GpvqKV8669KvRWZZECqxF/740Midq6Ou7 VqPuz06E8jISHxlty6IyHlOpfXeTlhOH2+gxJ70YlzTdVKfIJR/o8BDb4FN38KDy3gb+ niSw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=jGN7Oxpg; 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 nb34-20020a1709071ca200b0073c100331cbsi19712463ejc.384.2022.10.06.00.38.14; Thu, 06 Oct 2022 00:38:14 -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=jGN7Oxpg; 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 1B7DB68BBBA; Thu, 6 Oct 2022 10:38:10 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BE7BA68B726 for ; Thu, 6 Oct 2022 10:38: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=1665041888; x=1696577888; h=from:to:cc:subject:date:message-id; bh=HegEkV9lSTUuN0VftaMxLDlCZmkVJSaICO30tiVG4t4=; b=jGN7Oxpg8jFF0FrLes/+tpH4+Yt8r/D1OD6B/0jO+vIljVm4vQ54HGuS bdXPF/Qt4a0mAi2qxUHfKmlykTiSB2jjyvQAlOyBsIZrsyvNg5X8CTFYu gF/+imuuA6nUfTynuD+0kmzH1lPGa6WvEEJ7J545tAz8/B7z3m5Wz7w+S a7mB1iwI1ZsQrFMgIzA+Dww3k4H1erhCHJWuSURuoqQPyj+3QWQ+y+hKF +UFtktuhtkAHlal8L7ci3GFGHTL8SE4eB+/7A+Vk18ETZ3NDZAT0nVmdf 63TpqiTQn5Qe5aL8gzL4NG3G/fQKdJP/dh7EB7j6iXYEPuyOhA89GTR/A A==; X-IronPort-AV: E=McAfee;i="6500,9779,10491"; a="300974384" X-IronPort-AV: E=Sophos;i="5.95,163,1661842800"; d="scan'208";a="300974384" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Oct 2022 00:38:00 -0700 X-IronPort-AV: E=McAfee;i="6500,9779,10491"; a="687318967" X-IronPort-AV: E=Sophos;i="5.95,163,1661842800"; d="scan'208";a="687318967" Received: from xhh-dg164.sh.intel.com ([10.238.5.169]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Oct 2022 00:37:59 -0700 From: "Xiang, Haihao" To: ffmpeg-devel@ffmpeg.org Date: Thu, 6 Oct 2022 15:35:33 +0800 Message-Id: <20221006073538.27710-1-haihao.xiang@intel.com> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH 1/6] lavu/hwcontext_qsv: specify Shift for each format 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: KmRxikKNQziN From: Haihao Xiang We can't get Shift from bit depth for some formats in the SDK. For example, bit depth is 10, however Shift is 0 for Y410 (XV30 in FFmpeg). In order to support these formats in the next commits, this patch specified Shift for each format Signed-off-by: Haihao Xiang --- libavutil/hwcontext_qsv.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c index 9fa0dfa1c0..2272df52f2 100644 --- a/libavutil/hwcontext_qsv.c +++ b/libavutil/hwcontext_qsv.c @@ -109,20 +109,21 @@ typedef struct QSVFramesContext { static const struct { enum AVPixelFormat pix_fmt; uint32_t fourcc; + uint16_t mfx_shift; } supported_pixel_formats[] = { - { AV_PIX_FMT_NV12, MFX_FOURCC_NV12 }, - { AV_PIX_FMT_BGRA, MFX_FOURCC_RGB4 }, - { AV_PIX_FMT_P010, MFX_FOURCC_P010 }, - { AV_PIX_FMT_PAL8, MFX_FOURCC_P8 }, + { AV_PIX_FMT_NV12, MFX_FOURCC_NV12, 0 }, + { AV_PIX_FMT_BGRA, MFX_FOURCC_RGB4, 0 }, + { AV_PIX_FMT_P010, MFX_FOURCC_P010, 1 }, + { AV_PIX_FMT_PAL8, MFX_FOURCC_P8, 0 }, #if CONFIG_VAAPI { AV_PIX_FMT_YUYV422, - MFX_FOURCC_YUY2 }, + MFX_FOURCC_YUY2, 0 }, { AV_PIX_FMT_Y210, - MFX_FOURCC_Y210 }, + MFX_FOURCC_Y210, 1 }, // VUYX is used for VAAPI child device, // the SDK only delares support for AYUV { AV_PIX_FMT_VUYX, - MFX_FOURCC_AYUV }, + MFX_FOURCC_AYUV, 0 }, #endif }; @@ -170,6 +171,16 @@ static uint32_t qsv_fourcc_from_pix_fmt(enum AVPixelFormat pix_fmt) return 0; } +static uint16_t qsv_shift_from_pix_fmt(enum AVPixelFormat pix_fmt) +{ + for (int i = 0; i < FF_ARRAY_ELEMS(supported_pixel_formats); i++) { + if (supported_pixel_formats[i].pix_fmt == pix_fmt) + return supported_pixel_formats[i].mfx_shift; + } + + return 0; +} + #if CONFIG_D3D11VA static uint32_t qsv_get_d3d11va_bind_flags(int mem_type) { @@ -503,7 +514,7 @@ static int qsv_init_surface(AVHWFramesContext *ctx, mfxFrameSurface1 *surf) surf->Info.BitDepthLuma = desc->comp[0].depth; surf->Info.BitDepthChroma = desc->comp[0].depth; - surf->Info.Shift = desc->comp[0].depth > 8; + surf->Info.Shift = qsv_shift_from_pix_fmt(ctx->sw_format); if (desc->log2_chroma_w && desc->log2_chroma_h) surf->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV420; From patchwork Thu Oct 6 07:35:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 38577 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4d9:b0:9c:f4b:4e41 with SMTP id 25csp68018pzd; Thu, 6 Oct 2022 00:38:25 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6cp89SBFBz0LD5WuDr8PrIdPFbBBa+le1hxoSwaiMRcNSUXjcxba3aktMqxap87QDk2Qgg X-Received: by 2002:a17:906:591:b0:73d:c3ef:84ae with SMTP id 17-20020a170906059100b0073dc3ef84aemr2901507ejn.155.1665041905244; Thu, 06 Oct 2022 00:38:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1665041905; cv=none; d=google.com; s=arc-20160816; b=O5HKa6aHkqpT7SM8Rer/QAnqslRPLwD+MXXGNEhGMCF7MILFl5iDJ2r5FfYQTAf6N5 kW7ThFRLfMK9Rt8fGKLCJT0iOzo3sBaSt0+6HNIM3noHgVTQHJJQlBPh5fxxrZZ+WnU2 gQm+nnZuxgh5L5knz5al+RWUnp0huffmoLFdhFQ8XmhgUVIEdYu4yFiz/R//Z+kAs/1V KMwxK3OhXYmGvZZ+2gkovZtXIr6IEPiQRAVVMA4IfxB9gC8+lyQ+5lOhD4QiLgVm8pTD v7o1FRZrRBOXUL3Bo+oyNkoMvI4S3E6K/wHP6JZOecei4ghHFenubDSUuqIFc9UwYV2x apzQ== 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:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to; bh=oDdLoYoMmavhm4SfCxiuwccNkoixG9TI4y7vwU+o9eM=; b=AINt66NtSpbS3RS53d1xcIqz3rPf+ILvqUCtrMWc+juseA4yzRxjc31xX4gk4S+ecT xYxFefgSODKkP17qiWdPmw0W4oCX8EX12iFSLPGBdngZNhOR72bZ47rsF93g7pbxwyuA uxDRjuE4cZ6KiMPUTeq6MgZ+IjoNAGRcfKzaTgWEIU35/J0/ckCy8amZra8OEPI3f5fZ PaJGlSLBKlD9dv857jR/WYuD6zAXjd4iqxHcLE0z5BFzs6o5wP6oxfuV3vWERVrbJkGn Yj7GbGXyCsZHTPXACRQZMq9WQPYVYQUea3ceLIan/uLjSFjnnTm0epA1z7OIWCgUMItL wLCQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=c4cbHybf; 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 b13-20020aa7d48d000000b00458b42ff418si10852870edr.221.2022.10.06.00.38.24; Thu, 06 Oct 2022 00:38:25 -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=c4cbHybf; 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 3699168BB3E; Thu, 6 Oct 2022 10:38:12 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E131768BBA5 for ; Thu, 6 Oct 2022 10:38: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=1665041890; x=1696577890; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=YyAHGYzBmXCjpNky0GKh/umuXVSgB6Y4D2OA/20CYJQ=; b=c4cbHybf6yMrOyhJ3iJVaqr6jXBM0w41evVagEPTqBYvIDXJxqAl++x8 XCFUmNOBGTQoVBwgCwnSIjdCKvDi1tjAD9U09ZRO9IsY3xNbO0c7I90aw QbLCeKIVtwlhYLGMvwZfM0oNVHlUpuHcavcNC01PRI7QSrFFdz8w1PwrT 2U5o1jvFPs3q9ypMRxtQNWP7ZWkxMOWbbAgaAjWIl1CpcTmDunFYFzhYu QBDbtepV4S5gX+Z+CVut25pHwu+AFMfjPnZWMLr1zkf9Mf+qeoiI8OwuI Cy/JtHSyGePF5OX4vvNrWby+NSgSPn6w5jKzV8fqFmVPlPJVqTBhraAKI A==; X-IronPort-AV: E=McAfee;i="6500,9779,10491"; a="300974387" X-IronPort-AV: E=Sophos;i="5.95,163,1661842800"; d="scan'208";a="300974387" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Oct 2022 00:38:01 -0700 X-IronPort-AV: E=McAfee;i="6500,9779,10491"; a="687318979" X-IronPort-AV: E=Sophos;i="5.95,163,1661842800"; d="scan'208";a="687318979" Received: from xhh-dg164.sh.intel.com ([10.238.5.169]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Oct 2022 00:38:00 -0700 From: "Xiang, Haihao" To: ffmpeg-devel@ffmpeg.org Date: Thu, 6 Oct 2022 15:35:34 +0800 Message-Id: <20221006073538.27710-2-haihao.xiang@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20221006073538.27710-1-haihao.xiang@intel.com> References: <20221006073538.27710-1-haihao.xiang@intel.com> Subject: [FFmpeg-devel] [PATCH 2/6] lavc/qsv: specify Shift for each format too 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: hMq+nHkESaDk From: Haihao Xiang Signed-off-by: Haihao Xiang --- libavcodec/qsv.c | 9 ++++++++- libavcodec/qsv_internal.h | 2 +- libavcodec/qsvenc.c | 6 ++---- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c index 51aac16695..4e11b33a7d 100644 --- a/libavcodec/qsv.c +++ b/libavcodec/qsv.c @@ -217,35 +217,42 @@ enum AVPixelFormat ff_qsv_map_fourcc(uint32_t fourcc) return AV_PIX_FMT_NONE; } -int ff_qsv_map_pixfmt(enum AVPixelFormat format, uint32_t *fourcc) +int ff_qsv_map_pixfmt(enum AVPixelFormat format, uint32_t *fourcc, uint16_t *shift) { switch (format) { case AV_PIX_FMT_YUV420P: case AV_PIX_FMT_YUVJ420P: case AV_PIX_FMT_NV12: *fourcc = MFX_FOURCC_NV12; + *shift = 0; return AV_PIX_FMT_NV12; case AV_PIX_FMT_YUV420P10: case AV_PIX_FMT_P010: *fourcc = MFX_FOURCC_P010; + *shift = 1; return AV_PIX_FMT_P010; case AV_PIX_FMT_X2RGB10: *fourcc = MFX_FOURCC_A2RGB10; + *shift = 1; return AV_PIX_FMT_X2RGB10; case AV_PIX_FMT_BGRA: *fourcc = MFX_FOURCC_RGB4; + *shift = 0; return AV_PIX_FMT_BGRA; #if CONFIG_VAAPI case AV_PIX_FMT_YUV422P: case AV_PIX_FMT_YUYV422: *fourcc = MFX_FOURCC_YUY2; + *shift = 0; return AV_PIX_FMT_YUYV422; case AV_PIX_FMT_YUV422P10: case AV_PIX_FMT_Y210: *fourcc = MFX_FOURCC_Y210; + *shift = 1; return AV_PIX_FMT_Y210; case AV_PIX_FMT_VUYX: *fourcc = MFX_FOURCC_AYUV; + *shift = 0; return AV_PIX_FMT_VUYX; #endif default: diff --git a/libavcodec/qsv_internal.h b/libavcodec/qsv_internal.h index f914956596..f95e23c5e8 100644 --- a/libavcodec/qsv_internal.h +++ b/libavcodec/qsv_internal.h @@ -132,7 +132,7 @@ int ff_qsv_codec_id_to_mfx(enum AVCodecID codec_id); enum AVPixelFormat ff_qsv_map_fourcc(uint32_t fourcc); -int ff_qsv_map_pixfmt(enum AVPixelFormat format, uint32_t *fourcc); +int ff_qsv_map_pixfmt(enum AVPixelFormat format, uint32_t *fourcc, uint16_t *shift); enum AVPictureType ff_qsv_map_pictype(int mfx_pic_type); enum AVFieldOrder ff_qsv_map_picstruct(int mfx_pic_struct); diff --git a/libavcodec/qsvenc.c b/libavcodec/qsvenc.c index 398fa6ff22..dc5479d0f3 100644 --- a/libavcodec/qsvenc.c +++ b/libavcodec/qsvenc.c @@ -553,7 +553,7 @@ static int init_video_param_jpeg(AVCodecContext *avctx, QSVEncContext *q) if (!desc) return AVERROR_BUG; - ret = ff_qsv_map_pixfmt(sw_format, &q->param.mfx.FrameInfo.FourCC); + ret = ff_qsv_map_pixfmt(sw_format, &q->param.mfx.FrameInfo.FourCC, &q->param.mfx.FrameInfo.Shift); if (ret < 0) return AVERROR_BUG; @@ -567,7 +567,6 @@ static int init_video_param_jpeg(AVCodecContext *avctx, QSVEncContext *q) !desc->log2_chroma_w + !desc->log2_chroma_h; q->param.mfx.FrameInfo.BitDepthLuma = desc->comp[0].depth; q->param.mfx.FrameInfo.BitDepthChroma = desc->comp[0].depth; - q->param.mfx.FrameInfo.Shift = desc->comp[0].depth > 8; q->param.mfx.FrameInfo.Width = FFALIGN(avctx->width, 16); q->param.mfx.FrameInfo.Height = FFALIGN(avctx->height, 16); @@ -653,7 +652,7 @@ static int init_video_param(AVCodecContext *avctx, QSVEncContext *q) if (!desc) return AVERROR_BUG; - ret = ff_qsv_map_pixfmt(sw_format, &q->param.mfx.FrameInfo.FourCC); + ret = ff_qsv_map_pixfmt(sw_format, &q->param.mfx.FrameInfo.FourCC, &q->param.mfx.FrameInfo.Shift); if (ret < 0) return AVERROR_BUG; @@ -667,7 +666,6 @@ static int init_video_param(AVCodecContext *avctx, QSVEncContext *q) !desc->log2_chroma_w + !desc->log2_chroma_h; q->param.mfx.FrameInfo.BitDepthLuma = desc->comp[0].depth; q->param.mfx.FrameInfo.BitDepthChroma = desc->comp[0].depth; - q->param.mfx.FrameInfo.Shift = desc->comp[0].depth > 8; // If the minor version is greater than or equal to 19, // then can use the same alignment settings as H.264 for HEVC From patchwork Thu Oct 6 07:35:35 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 38578 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4d9:b0:9c:f4b:4e41 with SMTP id 25csp68040pzd; Thu, 6 Oct 2022 00:38:34 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4X7FDX72enc+Zo1yug6XB1ks2GNmujukbsR/Sm9MOTpO5tEzBS1Y8jVJewBEUd4YQq36Rs X-Received: by 2002:a50:ed86:0:b0:458:e1da:af2 with SMTP id h6-20020a50ed86000000b00458e1da0af2mr3274935edr.364.1665041913852; Thu, 06 Oct 2022 00:38:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1665041913; cv=none; d=google.com; s=arc-20160816; b=CDrs63m+Y6G8L5SH6KmDjPUDSMBkzdS1Ml2MzO834F1gGx8FA5EjqzkLw7Poucyjgo m3NMR4mf1uT6wGL0yWAlGp47jwhGP47wDTyyq/3JjAtsHT1qdSvAfL4yDrWeMHpC3iO4 NEb7py5JT42fJQXGLHzAVFH+fiV5ACBbpH6QnIbM31+N8Fc1+f6ILVms7+ovCynqb8FQ 6d/TlCC1xUvxTESyrdbaYkTQpFQkiqs9br3uiYd/A6/jlbjyglzNw3jjbRPgBrEeG8AL s3uCCKZaxY7zEhSk4znZR9bQ1NaUJJ0KWW3woQu6GCoHlMBPYZJ4osqQqjq2lw9/nkGA Vk8A== 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:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to; bh=Z7UvK/2HVkRs0wPoqqfwF88/ZcExnWVEQvTsLqIkOs4=; b=MePhQ70NoAku6nuNOrSifHaWQASwjxX07/hedSEkPmdFu7kvS3M4odkoKUOb/ynDdb BETtmBXMDJSYBFTYEe6XejPJ6hEJbkpGOhFtxqXA/bz0Qhff2b0MFig8HDd+d/c514v0 2JzaExmKA32zeX6KFgyWUbaicq+Tk/bqZ+8OWLkZPR+/dXkJ4ePgWCls31ZqeCEXj+0o A4O0ouuJ9K78YXOpu/HuC3BoFGk+7z5N37phh7uwroMdGdDe2F9c+p3OixMu85cOsd70 muFh7gpHEYUbMlF8sHdE1f6cWDR5DA8FF+/GYpfvzw00zWayFzrMD6VQFvNiMpKafWqp cQCQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=TmszPwPh; 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 r12-20020a05640251cc00b00459ee0ee1a3si740821edd.362.2022.10.06.00.38.33; Thu, 06 Oct 2022 00:38:33 -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=TmszPwPh; 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 1AE6A68BC02; Thu, 6 Oct 2022 10:38:13 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4A76D68BBA8 for ; Thu, 6 Oct 2022 10:38: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=1665041891; x=1696577891; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=BYfm1ostf8sNZutm0iRVc+NbqiyOvo0XblQ+SB98SBI=; b=TmszPwPhJzGLIGzyge77OpRrDvsFBkZVYaWpJLnWxMubyQyLYFnwg9N9 p1x16RaKemGdDBw8EX44ZNL0RPFqUyTvAfJCICFsIrWo4ndeW5BVHfluF +nlWcFlE/Zsn2JQT9Sh96KLbpx5mPIuyyHMvqzn6sTzehMmBLnnYYzNO5 cCI0X3Z5jI9Vd7sgvF92bGulJqZWrDSQZMVeNNxrXGFIASOWkAmXRcc55 i616LCfTvfpw+SuACn/ahQqLBmJb002WFcwH8Y93FOHGqM1VOmFjB1ATt 4L2FUwMncFAv5SKyv3rzPh4eeTDtTBpuuLp4vAjjfWh14rotYy3/JlIBB g==; X-IronPort-AV: E=McAfee;i="6500,9779,10491"; a="300974391" X-IronPort-AV: E=Sophos;i="5.95,163,1661842800"; d="scan'208";a="300974391" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Oct 2022 00:38:02 -0700 X-IronPort-AV: E=McAfee;i="6500,9779,10491"; a="687318991" X-IronPort-AV: E=Sophos;i="5.95,163,1661842800"; d="scan'208";a="687318991" Received: from xhh-dg164.sh.intel.com ([10.238.5.169]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Oct 2022 00:38:01 -0700 From: "Xiang, Haihao" To: ffmpeg-devel@ffmpeg.org Date: Thu, 6 Oct 2022 15:35:35 +0800 Message-Id: <20221006073538.27710-3-haihao.xiang@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20221006073538.27710-1-haihao.xiang@intel.com> References: <20221006073538.27710-1-haihao.xiang@intel.com> Subject: [FFmpeg-devel] [PATCH 3/6] lavu/hwcontext_qsv: add support for 10bit 4:4:4 content on Linux 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: wh/PQdkp/Loj From: Haihao Xiang XV30 is used for 10bit 4:4:4 content in FFmpeg VAAPI, so XV30 should be used for 10bit 4:4:4 content in FFmpeg QSV too because QSV is based on VAAPI on Linux. However the SDK only declares support for Y410 but does nothing with the alpha in Y410, so this commit fudged a mapping between AV_PIX_FMT_XV30 and MFX_FOURCC_Y410. Signed-off-by: Haihao Xiang --- libavutil/hwcontext_qsv.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c index 2272df52f2..93ecd2f1a3 100644 --- a/libavutil/hwcontext_qsv.c +++ b/libavutil/hwcontext_qsv.c @@ -124,6 +124,10 @@ static const struct { // the SDK only delares support for AYUV { AV_PIX_FMT_VUYX, MFX_FOURCC_AYUV, 0 }, + // XV30 is used for VAAPI child device, + // the SDK only delares support for Y410 + { AV_PIX_FMT_XV30, + MFX_FOURCC_Y410, 0 }, #endif }; @@ -1525,6 +1529,9 @@ static int map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) // use the value from the frame. surface->Data.A = frame->data[0] + 3; break; + case AV_PIX_FMT_XV30: + surface->Data.U = frame->data[0]; + break; #endif default: return MFX_ERR_UNSUPPORTED; From patchwork Thu Oct 6 07:35:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 38579 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4d9:b0:9c:f4b:4e41 with SMTP id 25csp68079pzd; Thu, 6 Oct 2022 00:38:42 -0700 (PDT) X-Google-Smtp-Source: AMsMyM44sGG6x7Ojbv+Id5tLk2QDHj/SFkPEennOn9iOIn+dBUMYCQ3tMlbe+KRB3XFetEeXZ9K0 X-Received: by 2002:a17:907:9483:b0:782:242:a364 with SMTP id dm3-20020a170907948300b007820242a364mr2790977ejc.595.1665041922489; Thu, 06 Oct 2022 00:38:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1665041922; cv=none; d=google.com; s=arc-20160816; b=P4KzzNZ0kemjsjFnr10ffJ9C+D+ZEtpnJ+qQZtttL2C1ytYostDAxI42bjCVXsoUoh /Ao8RPevp56aVmlgsdxWP+sG/eKQL03Mu9DVzwxm3FyLX2PypFq2uuq8x2B3cg8nVEel Y++sKFFQ4uCfXOBFv74QI3URGnv8UH28BlsAKIqN6Jtb1xRUy8wHZniajWXC0F/dB7xu OqmBZZf2x5YVZ+Dh+7cOAy6jTe5CmNjyEA2mbqFb0iV6MOLw9vtduSmjJD0uC2K+QAMt vE9Vm8orIno6A3AtICh1SeD8NEEuHkC8IXL+38ijd6wunGUqwIefKFessjQ74fcUbI5p W9pA== 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:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to; bh=FHr1T7Ic3V9oKMEnEJ7IiO/OrC7nzqEk7L9qTDj6RaE=; b=cvgawcemwyv3ZZ2Q3cUoAKdGcJV+v6g9BbAHTTvdARZ7ak3jbXZeIPNRZWoyE4aJr7 gQV2+F3GjXkQ80g7YibsU07ziLXX3c8QfvX+ZTXqbKdMKdKhDqFQjWypOjs+396IXj57 Fvmi666nKZJSG0HIq4jM9Oh6EnCeabdNnnXdIjWzc3FDURIOesn6dPwbI6RXHWAy26tK ogiTweugcohuSsYK5t1BK9yjFA/h298bLGTaNr54026eJEiP5F8Jzv311JqE1Z7F8wWf hH/XD4pbqUOql4YWAydn5l6/xILrcSnoaEvdxjvqFSaPE9FxhlyDljQ5fT+aH7GnZvy6 LzlA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=guMvvznL; 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 y13-20020a056402358d00b004571dcc94e9si571556edc.229.2022.10.06.00.38.42; Thu, 06 Oct 2022 00:38:42 -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=guMvvznL; 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 2377468BC08; Thu, 6 Oct 2022 10:38:16 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A723468BC05 for ; Thu, 6 Oct 2022 10:38: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=1665041893; x=1696577893; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=sODq3rTXUECfR/Ia7pmzHHWesofClCZ1mHsiN2pbn0A=; b=guMvvznLZKRCphIITWRosQaVcnhsZwv5rLNPKHN+TXDk8kfkQLtp7ty+ ZRp2k+SYR90tulmxvLjayoYlM0XhK06eZ99AMXL+R54MNTw+sJPppCX+8 VseiO+6XCs/CtXm8f3/r7IqfjVzI8i2L88bFIkCUH8c3q7mij4mPk1S4n SeGZO7cvDy9ymcW1Sdgzvp4rccLIMX7zeIG3iyrSN9p2snChNhWNC2hI0 yPO4M1hHB8eMT8GWxyX2dA/y1FafajU8+rZ8uvoPbV7LzFaEAczB1ZCCC J6vNqtsyJrYRHEYjPjo2b0aZkB/i30gejWu4IuTdbbrNDRNx55+kNKPWD A==; X-IronPort-AV: E=McAfee;i="6500,9779,10491"; a="300974398" X-IronPort-AV: E=Sophos;i="5.95,163,1661842800"; d="scan'208";a="300974398" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Oct 2022 00:38:03 -0700 X-IronPort-AV: E=McAfee;i="6500,9779,10491"; a="687319000" X-IronPort-AV: E=Sophos;i="5.95,163,1661842800"; d="scan'208";a="687319000" Received: from xhh-dg164.sh.intel.com ([10.238.5.169]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Oct 2022 00:38:02 -0700 From: "Xiang, Haihao" To: ffmpeg-devel@ffmpeg.org Date: Thu, 6 Oct 2022 15:35:36 +0800 Message-Id: <20221006073538.27710-4-haihao.xiang@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20221006073538.27710-1-haihao.xiang@intel.com> References: <20221006073538.27710-1-haihao.xiang@intel.com> Subject: [FFmpeg-devel] [PATCH 4/6] lavc/qsv: add support for decoding & encoding 10bit 4:4:4 content 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: gNWG9WZ5RiHh From: Haihao Xiang AV_PIX_FMT_XV30 is used in FFmpeg and MFX_FOURCC_Y410 is used in the SDK. Signed-off-by: Haihao Xiang --- libavcodec/qsv.c | 9 +++++++++ libavcodec/qsvdec.c | 2 ++ libavcodec/qsvenc_hevc.c | 1 + libavcodec/qsvenc_vp9.c | 1 + 4 files changed, 13 insertions(+) diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c index 4e11b33a7d..f38c617fc3 100644 --- a/libavcodec/qsv.c +++ b/libavcodec/qsv.c @@ -212,6 +212,7 @@ enum AVPixelFormat ff_qsv_map_fourcc(uint32_t fourcc) case MFX_FOURCC_YUY2: return AV_PIX_FMT_YUYV422; case MFX_FOURCC_Y210: return AV_PIX_FMT_Y210; case MFX_FOURCC_AYUV: return AV_PIX_FMT_VUYX; + case MFX_FOURCC_Y410: return AV_PIX_FMT_XV30; #endif } return AV_PIX_FMT_NONE; @@ -254,6 +255,10 @@ int ff_qsv_map_pixfmt(enum AVPixelFormat format, uint32_t *fourcc, uint16_t *shi *fourcc = MFX_FOURCC_AYUV; *shift = 0; return AV_PIX_FMT_VUYX; + case AV_PIX_FMT_XV30: + *fourcc = MFX_FOURCC_Y410; + *shift = 0; + return AV_PIX_FMT_XV30; #endif default: return AVERROR(ENOSYS); @@ -298,6 +303,10 @@ int ff_qsv_map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) surface->Data.A = frame->data[0] + 3; break; + case AV_PIX_FMT_XV30: + surface->Data.U = frame->data[0]; + break; + default: return AVERROR(ENOSYS); } diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c index 0254a394bd..912d58965a 100644 --- a/libavcodec/qsvdec.c +++ b/libavcodec/qsvdec.c @@ -142,6 +142,7 @@ static int qsv_get_continuous_buffer(AVCodecContext *avctx, AVFrame *frame, break; case AV_PIX_FMT_Y210: case AV_PIX_FMT_VUYX: + case AV_PIX_FMT_XV30: frame->linesize[0] = 4 * FFALIGN(avctx->width, 128); break; default: @@ -1043,6 +1044,7 @@ const FFCodec ff_##x##_qsv_decoder = { \ AV_PIX_FMT_YUYV422, \ AV_PIX_FMT_Y210, \ AV_PIX_FMT_VUYX, \ + AV_PIX_FMT_XV30, \ AV_PIX_FMT_QSV, \ AV_PIX_FMT_NONE }, \ .hw_configs = qsv_hw_configs, \ diff --git a/libavcodec/qsvenc_hevc.c b/libavcodec/qsvenc_hevc.c index a5bf915954..1e1574a6f2 100644 --- a/libavcodec/qsvenc_hevc.c +++ b/libavcodec/qsvenc_hevc.c @@ -316,6 +316,7 @@ const FFCodec ff_hevc_qsv_encoder = { AV_PIX_FMT_BGRA, AV_PIX_FMT_X2RGB10, AV_PIX_FMT_VUYX, + AV_PIX_FMT_XV30, AV_PIX_FMT_NONE }, .p.priv_class = &class, .defaults = qsv_enc_defaults, diff --git a/libavcodec/qsvenc_vp9.c b/libavcodec/qsvenc_vp9.c index 044a882d1a..d0340ef94b 100644 --- a/libavcodec/qsvenc_vp9.c +++ b/libavcodec/qsvenc_vp9.c @@ -115,6 +115,7 @@ const FFCodec ff_vp9_qsv_encoder = { AV_PIX_FMT_P010, AV_PIX_FMT_VUYX, AV_PIX_FMT_QSV, + AV_PIX_FMT_XV30, AV_PIX_FMT_NONE }, .p.priv_class = &class, .defaults = qsv_enc_defaults, From patchwork Thu Oct 6 07:35:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 38580 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4d9:b0:9c:f4b:4e41 with SMTP id 25csp68117pzd; Thu, 6 Oct 2022 00:38:51 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5npc3Qt1RcyjaglW/MSeNQWwpw9kbkMIbIh82b99TADcngOlHRZqIKUMwPxRjWufSUNkYR X-Received: by 2002:a17:907:2d9e:b0:782:69f2:a0ec with SMTP id gt30-20020a1709072d9e00b0078269f2a0ecmr2754027ejc.680.1665041931179; Thu, 06 Oct 2022 00:38:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1665041931; cv=none; d=google.com; s=arc-20160816; b=fBUmJow8YRBkfmIMTQLrRkbryxB10NyytRwHCfAgJL4g0ywunrLMP3+S3G7IMoUQE6 R52dFxuYq0snk/RFI/C2mpdK7Z7I9U6qfaEhT7LP/ZtpOXr+OU3+07QlCUieC1SmID23 3Ydw5HtUfoB4JyrAjVZhj3Kqskr3loZIFGpurFYxXNCsFEu7uz8HGj8tjvs7qOJtSlP3 52h/7uaeP0/slS8XIn4Ox5jdpcvZXJBgWTms7MMvi6zSG4/DOohwaHOJQR2qb20io3vW KVsa/exqU/gawQ1PRvg7y1QsN9o3T3uaFuG/80Wg05/Ma5t6opOOGHW5+WAGjuoCySnA Ddhg== 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:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to; bh=SuFsRbbB7UPm0nSZQBooUo+cpX3od6S6Z4JYYLrZmxI=; b=wm3Mh3+wcOI3Y9p0mNfwBmh+eCU4/xd51r4pt+i5cuu+ae4nJzYKHgcoo9yJVpjsDn DYOn/QV2rIq0PDUhrKzRdjG+Nw56KHy7zDGonNWwbqagBMnFA0jkFPduL0VAKc/tnT4s dFTfYD8BoyVltorYWJBtkPCbnn2TzN/XPVaigAsfi7QFAQo3Sh7dLHqxH4c8oq0YT0NR SFIkoPnRXI9MFCVmlNJ+AycVsMlFSixN9B2X2AZtYBlVmPMLuUJSUIrQamKlloQ4oI1o +tAL5obA4t90XpwyBPegElvi2B9OCgMuPbbKec9K59pa7m8uQiQhM5PCkGS5ZdOCal8P cAWA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b="DCS1eOg/"; 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 w1-20020a1709067c8100b0070fc7c9d71dsi13518480ejo.989.2022.10.06.00.38.50; Thu, 06 Oct 2022 00:38:51 -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="DCS1eOg/"; 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 32D9368BBFC; Thu, 6 Oct 2022 10:38:20 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C956568BBFD for ; Thu, 6 Oct 2022 10:38: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=1665041898; x=1696577898; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=v1paPjRXxAPs/9p+0qOFUndf2sEmbycEFwbZiMY1l2A=; b=DCS1eOg/1drGupsPJcGQg67t6O1DCOtNVYJVF5oYXc045TrfriyzxZAV QV/fEKjKFBE6hA22YzE4dkT2Zg3wD++DWJ4TbtxzLFSj+mSdvQV2bwg4G m5Vkb+wVNqI1qxwZ1ZOpDBvX6WNQ7gE7/2nzJqqi1Gphfebh+zwY4gc/X ec574VDdEPJbJ7AO7tZLC87o5FwwxjIhFxHLT+PU8aFltd1iHTsR0ojtj wHImWnfhMFIngW2nr+9hKDvzedO8r2VRnE29PZBhGL6g/Om8rMRmxy6/8 CU3y3miGXMEKdpzq0t3Rs93hW9OfLKJdNqadqZUzfh2zku5zDptmU7OPV A==; X-IronPort-AV: E=McAfee;i="6500,9779,10491"; a="300974400" X-IronPort-AV: E=Sophos;i="5.95,163,1661842800"; d="scan'208";a="300974400" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Oct 2022 00:38:04 -0700 X-IronPort-AV: E=McAfee;i="6500,9779,10491"; a="687319006" X-IronPort-AV: E=Sophos;i="5.95,163,1661842800"; d="scan'208";a="687319006" Received: from xhh-dg164.sh.intel.com ([10.238.5.169]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Oct 2022 00:38:03 -0700 From: "Xiang, Haihao" To: ffmpeg-devel@ffmpeg.org Date: Thu, 6 Oct 2022 15:35:37 +0800 Message-Id: <20221006073538.27710-5-haihao.xiang@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20221006073538.27710-1-haihao.xiang@intel.com> References: <20221006073538.27710-1-haihao.xiang@intel.com> Subject: [FFmpeg-devel] [PATCH 5/6] lavu/hwcontext_qsv: add support for 12bit content on Linux 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 , Wenbin Chen , Fei Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: koL6PoqU4Edq From: Fei Wang P012, Y212 and XV36 are used for 12bit content in FFmpeg VAAPI, so these formats should be used in FFmpeg QSV too, however the SDK only declares support for P016, Y216 and Y416. So this commit fudged mappings between AV_PIX_FMT_P012 and MFX_FOURCC_P016, AV_PIX_FMT_Y212 and MFX_FOURCC_Y216, AV_PIX_FMT_XV36 and MFX_FOURCC_Y416. Signed-off-by: Fei Wang Signed-off-by: Wenbin Chen Signed-off-by: Haihao Xiang --- libavutil/hwcontext_qsv.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c index 93ecd2f1a3..ec0f72b329 100644 --- a/libavutil/hwcontext_qsv.c +++ b/libavutil/hwcontext_qsv.c @@ -128,6 +128,20 @@ static const struct { // the SDK only delares support for Y410 { AV_PIX_FMT_XV30, MFX_FOURCC_Y410, 0 }, +#if QSV_VERSION_ATLEAST(1, 31) + // P012 is used for VAAPI child device, + // the SDK only delares support for P016 + { AV_PIX_FMT_P012, + MFX_FOURCC_P016, 1 }, + // Y212 is used for VAAPI child device, + // the SDK only delares support for Y216 + { AV_PIX_FMT_Y212, + MFX_FOURCC_Y216, 1 }, + // XV36 is used for VAAPI child device, + // the SDK only delares support for Y416 + { AV_PIX_FMT_XV36, + MFX_FOURCC_Y416, 1 }, +#endif #endif }; @@ -1493,6 +1507,7 @@ static int map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) switch (frame->format) { case AV_PIX_FMT_NV12: case AV_PIX_FMT_P010: + case AV_PIX_FMT_P012: surface->Data.Y = frame->data[0]; surface->Data.UV = frame->data[1]; break; @@ -1517,6 +1532,7 @@ static int map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) break; case AV_PIX_FMT_Y210: + case AV_PIX_FMT_Y212: surface->Data.Y16 = (mfxU16 *)frame->data[0]; surface->Data.U16 = (mfxU16 *)frame->data[0] + 1; surface->Data.V16 = (mfxU16 *)frame->data[0] + 3; @@ -1532,6 +1548,14 @@ static int map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) case AV_PIX_FMT_XV30: surface->Data.U = frame->data[0]; break; + case AV_PIX_FMT_XV36: + surface->Data.U = frame->data[0]; + surface->Data.Y = frame->data[0] + 2; + surface->Data.V = frame->data[0] + 4; + // Only set Data.A to a valid address, the SDK doesn't + // use the value from the frame. + surface->Data.A = frame->data[0] + 6; + break; #endif default: return MFX_ERR_UNSUPPORTED; From patchwork Thu Oct 6 07:35:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 38581 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4d9:b0:9c:f4b:4e41 with SMTP id 25csp68150pzd; Thu, 6 Oct 2022 00:39:00 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4NYMe0XUaszyO6FPcUpqMsmZ6jTHVazFuYIa6QIM+RXPb380mYNJ3rFfPGYxpqidVb1yJv X-Received: by 2002:a17:907:160d:b0:782:bc5d:162e with SMTP id hb13-20020a170907160d00b00782bc5d162emr2914993ejc.291.1665041939894; Thu, 06 Oct 2022 00:38:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1665041939; cv=none; d=google.com; s=arc-20160816; b=aKbO/Ssurjol0jN6Hszv3Lk4JSYcefwO9S0wRc9IEDYCS759bYwGK/iBSYyClL+CUV Z7Isfxw1Ve+v/+iZIh083j6J8d7EyiFLfAuSo42FUkRif1whe54PTCf1M8Ex5M5jolof f7dVO68tlcSviUPC8TP7j02WDcwcoxuzs6xv2lwOFeUADf8Ylu+ysMNZNM0isJu1gPLb m5CNfKxRFD7dzFdjm+7QY0LR1GnQxZ1lYxPQ8viaR1cT2Jgml1y+cHorcn1E1Y+vpERq gErSaANcvtIt0KFj90H0izYnzelNJthVnOy0agMhO5KvIRSYlGMk3xA9O3izQBX0epzN /w4Q== 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:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to; bh=cGws01xoAqQaSKKW9p7XQ/DJHAI5Ba1Zx8OJa0nXbtQ=; b=fK3gMch4QRj5EnTvotdIxVGa0ClrQF1rF+JcEAOII242YG6Ib13H0+iXLNNO/WehTs q/c4erbc2XE5nu80MIxrniXQQk3Mi329tTbWs08bfAgfxJddXnI90yMeVSSCGBbptbx6 tnByqtbw361f9ewgSixbqU2px3Lz2OKmE33hWnrp8yJXrZKppRTWsTDFeF1oBOS4qiol Zlt98QcOu5wkA5/IL8mPlnrrQATrT5qwpvKJkl1r6+OIosBVO7hc8DxXnCqLhomSTds4 iW1qIPcalbkmjo57C+kDay6HVNUI1cRp+8KgVUzaPgv5jzzDVpZLwLResZNIww8Fh74V 34yw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=P9+HNdue; 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 z98-20020a509e6b000000b00458b9b7bb2fsi15000435ede.396.2022.10.06.00.38.59; Thu, 06 Oct 2022 00:38:59 -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=P9+HNdue; 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 3B8D168BC15; Thu, 6 Oct 2022 10:38:21 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3069A68BC05 for ; Thu, 6 Oct 2022 10:38:12 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1665041898; x=1696577898; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=j6GSkWjxew7m9ty8j54/4kD7o5rNd87DDaQ8y/oB02E=; b=P9+HNdueJz2ULzKFHThpSfUQOYVHgBQUE//VdPBJOd60PwaBsiBpynKU r4tgs7YdNPqO6W4yhmJh0Jv1Ejv0kp4brHsSydWXge1EHH8RJAXzdmEHf 3DfzoCSU7axqE6QWCtuwRkSBGDQ57IvLsCZxaImUEK/Z9Xs53EDEfXYfW 4r7f3nLCb8Fgn3XJZBiAMBdA4wLrLLKKs7g4lDZaNYL0Uud0C/d1/Kux5 wVl7D7hLU/QJgt1UaoAa1TCrWmhxyC/fzkezPlyLknGgZBI2iNMzYWADs ydZnCe1OUSRgg+MnlzotrgHSIXx+BHooeKZLEoeab9TZNwYSpT2qMOES7 w==; X-IronPort-AV: E=McAfee;i="6500,9779,10491"; a="300974408" X-IronPort-AV: E=Sophos;i="5.95,163,1661842800"; d="scan'208";a="300974408" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Oct 2022 00:38:06 -0700 X-IronPort-AV: E=McAfee;i="6500,9779,10491"; a="687319010" X-IronPort-AV: E=Sophos;i="5.95,163,1661842800"; d="scan'208";a="687319010" Received: from xhh-dg164.sh.intel.com ([10.238.5.169]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Oct 2022 00:38:04 -0700 From: "Xiang, Haihao" To: ffmpeg-devel@ffmpeg.org Date: Thu, 6 Oct 2022 15:35:38 +0800 Message-Id: <20221006073538.27710-6-haihao.xiang@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20221006073538.27710-1-haihao.xiang@intel.com> References: <20221006073538.27710-1-haihao.xiang@intel.com> Subject: [FFmpeg-devel] [PATCH 6/6] lavc/qsv: add support for decoding & encoding 12bit content 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 , Wenbin Chen , Fei Wang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: jneBDMwGeldk From: Fei Wang AV_PIX_FMT_P012, AV_PIX_FMT_Y212 and AV_PIX_FMT_XV36 are used in FFmpeg and MFX_FOURCC_P016, MFX_FOURCC_Y216, and MFX_FOURCC_Y416 are used in the SDK Signed-off-by: Fei Wang Signed-off-by: Wenbin Chen Signed-off-by: Haihao Xiang --- libavcodec/qsv.c | 30 ++++++++++++++++++++++++++++++ libavcodec/qsvdec.c | 11 ++++++++++- libavcodec/qsvenc_hevc.c | 1 + 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c index f38c617fc3..7af154202c 100644 --- a/libavcodec/qsv.c +++ b/libavcodec/qsv.c @@ -213,6 +213,11 @@ enum AVPixelFormat ff_qsv_map_fourcc(uint32_t fourcc) case MFX_FOURCC_Y210: return AV_PIX_FMT_Y210; case MFX_FOURCC_AYUV: return AV_PIX_FMT_VUYX; case MFX_FOURCC_Y410: return AV_PIX_FMT_XV30; +#if QSV_VERSION_ATLEAST(1, 31) + case MFX_FOURCC_P016: return AV_PIX_FMT_P012; + case MFX_FOURCC_Y216: return AV_PIX_FMT_Y212; + case MFX_FOURCC_Y416: return AV_PIX_FMT_XV36; +#endif #endif } return AV_PIX_FMT_NONE; @@ -259,6 +264,20 @@ int ff_qsv_map_pixfmt(enum AVPixelFormat format, uint32_t *fourcc, uint16_t *shi *fourcc = MFX_FOURCC_Y410; *shift = 0; return AV_PIX_FMT_XV30; +#if QSV_VERSION_ATLEAST(1, 31) + case AV_PIX_FMT_P012: + *fourcc = MFX_FOURCC_P016; + *shift = 1; + return AV_PIX_FMT_P012; + case AV_PIX_FMT_Y212: + *fourcc = MFX_FOURCC_Y216; + *shift = 1; + return AV_PIX_FMT_Y212; + case AV_PIX_FMT_XV36: + *fourcc = MFX_FOURCC_Y416; + *shift = 1; + return AV_PIX_FMT_XV36; +#endif #endif default: return AVERROR(ENOSYS); @@ -270,6 +289,7 @@ int ff_qsv_map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) switch (frame->format) { case AV_PIX_FMT_NV12: case AV_PIX_FMT_P010: + case AV_PIX_FMT_P012: surface->Data.Y = frame->data[0]; surface->Data.UV = frame->data[1]; /* The SDK checks Data.V when using system memory for VP9 encoding */ @@ -289,6 +309,7 @@ int ff_qsv_map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) break; case AV_PIX_FMT_Y210: + case AV_PIX_FMT_Y212: surface->Data.Y16 = (mfxU16 *)frame->data[0]; surface->Data.U16 = (mfxU16 *)frame->data[0] + 1; surface->Data.V16 = (mfxU16 *)frame->data[0] + 3; @@ -307,6 +328,15 @@ int ff_qsv_map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) surface->Data.U = frame->data[0]; break; + case AV_PIX_FMT_XV36: + surface->Data.U = frame->data[0]; + surface->Data.Y = frame->data[0] + 2; + surface->Data.V = frame->data[0] + 4; + // Only set Data.A to a valid address, the SDK doesn't + // use the value from the frame. + surface->Data.A = frame->data[0] + 6; + break; + default: return AVERROR(ENOSYS); } diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c index 912d58965a..73405b5747 100644 --- a/libavcodec/qsvdec.c +++ b/libavcodec/qsvdec.c @@ -137,14 +137,19 @@ static int qsv_get_continuous_buffer(AVCodecContext *avctx, AVFrame *frame, frame->linesize[0] = FFALIGN(avctx->width, 128); break; case AV_PIX_FMT_P010: + case AV_PIX_FMT_P012: case AV_PIX_FMT_YUYV422: frame->linesize[0] = 2 * FFALIGN(avctx->width, 128); break; case AV_PIX_FMT_Y210: case AV_PIX_FMT_VUYX: case AV_PIX_FMT_XV30: + case AV_PIX_FMT_Y212: frame->linesize[0] = 4 * FFALIGN(avctx->width, 128); break; + case AV_PIX_FMT_XV36: + frame->linesize[0] = 8 * FFALIGN(avctx->width, 128); + break; default: av_log(avctx, AV_LOG_ERROR, "Unsupported pixel format.\n"); return AVERROR(EINVAL); @@ -156,7 +161,8 @@ static int qsv_get_continuous_buffer(AVCodecContext *avctx, AVFrame *frame, frame->data[0] = frame->buf[0]->data; if (avctx->pix_fmt == AV_PIX_FMT_NV12 || - avctx->pix_fmt == AV_PIX_FMT_P010) { + avctx->pix_fmt == AV_PIX_FMT_P010 || + avctx->pix_fmt == AV_PIX_FMT_P012) { frame->linesize[1] = frame->linesize[0]; frame->data[1] = frame->data[0] + frame->linesize[0] * FFALIGN(avctx->height, 64); @@ -1041,10 +1047,13 @@ const FFCodec ff_##x##_qsv_decoder = { \ .p.priv_class = &x##_qsv_class, \ .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12, \ AV_PIX_FMT_P010, \ + AV_PIX_FMT_P012, \ AV_PIX_FMT_YUYV422, \ AV_PIX_FMT_Y210, \ + AV_PIX_FMT_Y212, \ AV_PIX_FMT_VUYX, \ AV_PIX_FMT_XV30, \ + AV_PIX_FMT_XV36, \ AV_PIX_FMT_QSV, \ AV_PIX_FMT_NONE }, \ .hw_configs = qsv_hw_configs, \ diff --git a/libavcodec/qsvenc_hevc.c b/libavcodec/qsvenc_hevc.c index 1e1574a6f2..8127fcc6c3 100644 --- a/libavcodec/qsvenc_hevc.c +++ b/libavcodec/qsvenc_hevc.c @@ -310,6 +310,7 @@ 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_P012, AV_PIX_FMT_YUYV422, AV_PIX_FMT_Y210, AV_PIX_FMT_QSV,