From patchwork Tue Sep 6 04:53: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: 37686 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:139a:b0:8f:1db5:eae2 with SMTP id w26csp3034527pzh; Mon, 5 Sep 2022 21:55:11 -0700 (PDT) X-Google-Smtp-Source: AA6agR43U7GYNbZxCglONStlzF4FkRoDmBrcEESaPb09s8SnidY416Yr0JWoXfKeM1/nTgOfs9ZR X-Received: by 2002:a05:6402:27cf:b0:448:706c:184b with SMTP id c15-20020a05640227cf00b00448706c184bmr32810731ede.1.1662440111370; Mon, 05 Sep 2022 21:55:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662440111; cv=none; d=google.com; s=arc-20160816; b=nstpt/w/6zp/w8bhoZ3n/R1EkeYByjqOUkbOBX14etg8FTSU2mJW+sPhHimgbmVMH7 6OQtmUIiul/WMnzEvic8CtzIaQNRb7HU2ML/r7AIXaCaF9po+WSbbdVenDfc/xcbzhZL D/8TjcqDbeUcWBo66GMObfz+Pa9mIwTU0YqBAYjzKo3G59y3+HaxJ/h5d5bKRivc+RH+ zeorPVzbeyaBzU9tFKH+H00NZDtsen0kSylWH6PWkKdtK/4+jJHrK0W9bfVNz2Ek2UFo pA7HFUigE8Qk3+Pg8YVs1Pz6Dn5ojwzI6eDWTYDHdIUBgWjXsENSH0QOZZNl7gjxf7q9 3b9w== 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=E7oj3vBEWMiMkbYaS+ErDr9qrXwJrOAMrs1nWxerNaw=; b=WvTGYIbcFDQNP76N254AdD9/Gccc4NNXvz+En0DQvS/RMSHoGYjcBcy1qdPpbJ4qfg HT3pZnf99u3FQpovMJIgEbJ1PSnEKSY8hk/w7o1POrO8MCeMN+lP7lwBmSwNMdB4x5od LDfPkVeZNb7LaCA8+jYW+RTBClSRN27raftM2ANxOEaA0Pz+sIMegpxrH+w6ZffIZi2g qobVk6LzapPFcY6S3SLDh+zgF3gdG3zvRgbwEmfeyfKNHASwfqD6YDb3RYLGPqg3+ZtF gQe+IFq9tBcDJ8QuBTBEnjvaj9JXH5Bki72ptcyiHCbNV/6DAdQ8xNjAgHEsmZPhhuMR yQeQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=S2HdhWRR; 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 f7-20020a50d547000000b0044785ed87d7si8311633edj.404.2022.09.05.21.55.10; Mon, 05 Sep 2022 21:55:11 -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=S2HdhWRR; 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 DAE0C68BA1B; Tue, 6 Sep 2022 07:55:06 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B2B3C68B6B6 for ; Tue, 6 Sep 2022 07:54:59 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1662440104; x=1693976104; h=from:to:cc:subject:date:message-id; bh=H02cN/j08Z0ItKN7O0/8hfKOYKzkBtvsQjsokzPLEfU=; b=S2HdhWRR/SrCaiwaCbbWlMhZw+tBFln2xWTTMc7bZkGZL3H2YQcZqEql zyTdVbIJMG5bU8ez5N4kuEl858pHTZ7koTg4KM55nLyi07MVOm6rDgjyx FByyWOadA+DP7wi3tOSNvc89CiWzu/89smmAzIEpXi4ryh+iev1sMtbbD N0g0Npv6fQ6DE3sOFd13rUd401WhkhzzPFthkTizIWS92xhF/ki+InGLd LGlNOOkvcKZCpTlbQQ/+7DBdDk8uZ4jJfik1AoeaoWyis5jRvk6HnMOCV ThjIoKnLZyBOfJS59A9yKxWQu9SYyUjIIXYoBlFjd/URQf4XGsq2wk+mD w==; X-IronPort-AV: E=McAfee;i="6500,9779,10461"; a="276897002" X-IronPort-AV: E=Sophos;i="5.93,293,1654585200"; d="scan'208";a="276897002" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Sep 2022 21:54:56 -0700 X-IronPort-AV: E=Sophos;i="5.93,293,1654585200"; d="scan'208";a="675521571" 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; 05 Sep 2022 21:54:55 -0700 From: "Xiang, Haihao" To: ffmpeg-devel@ffmpeg.org Date: Tue, 6 Sep 2022 12:53:37 +0800 Message-Id: <20220906045338.20683-1-haihao.xiang@intel.com> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH v2 1/2] lavu/hwcontext_qsv: add support for AV_PIX_FMT_VUYX 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: pLB/hgZzYC2S From: Haihao Xiang AV_PIX_FMT_VUYX is used for 8bit 4:4:4 content in FFmpeg VAAPI, so AV_PIX_FMT_VUYX should be used for 8bit 4:4:4 content in FFmpeg QSV too because QSV is based on VAAPI on Linux. However the SDK only declares support for AYUV and does nothing with the alpha, so this commit fudged a mapping between AV_PIX_FMT_VUYX and MFX_FOURCC_AYUV. --- libavutil/hwcontext_qsv.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libavutil/hwcontext_qsv.c b/libavutil/hwcontext_qsv.c index 510f422562..9fa0dfa1c0 100644 --- a/libavutil/hwcontext_qsv.c +++ b/libavutil/hwcontext_qsv.c @@ -119,6 +119,10 @@ static const struct { MFX_FOURCC_YUY2 }, { AV_PIX_FMT_Y210, MFX_FOURCC_Y210 }, + // VUYX is used for VAAPI child device, + // the SDK only delares support for AYUV + { AV_PIX_FMT_VUYX, + MFX_FOURCC_AYUV }, #endif }; @@ -1502,6 +1506,14 @@ static int map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) surface->Data.U16 = (mfxU16 *)frame->data[0] + 1; surface->Data.V16 = (mfxU16 *)frame->data[0] + 3; break; + case AV_PIX_FMT_VUYX: + surface->Data.V = frame->data[0]; + surface->Data.U = frame->data[0] + 1; + surface->Data.Y = frame->data[0] + 2; + // Only set Data.A to a valid address, the SDK doesn't + // use the value from the frame. + surface->Data.A = frame->data[0] + 3; + break; #endif default: return MFX_ERR_UNSUPPORTED; From patchwork Tue Sep 6 04:53: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: 37687 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:139a:b0:8f:1db5:eae2 with SMTP id w26csp3034573pzh; Mon, 5 Sep 2022 21:55:21 -0700 (PDT) X-Google-Smtp-Source: AA6agR4NqCZpH4LLLdTeV+TtaRvN17Xtz6SCAYPd8dRESayQv5Vw8vLZgqjE+yS+MfH4Prk3GuVI X-Received: by 2002:a17:906:af1b:b0:750:bf91:caaa with SMTP id lx27-20020a170906af1b00b00750bf91caaamr13015225ejb.480.1662440121564; Mon, 05 Sep 2022 21:55:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662440121; cv=none; d=google.com; s=arc-20160816; b=x4/AEUK/tyAzPNcnYXUJqcbIhqbTo79GbW4bn4K2SdBVmuXRi5U7+UL0aqGaLSBtdR 1pu3aSX7DITFylGVm4YaRw9TJ3MJgGJFIo5QQfll3D1sd9efCu0seTYPn421t/UME8OY mKr2Tc82oHHdar+GfILXHq1U76VLzoKLOfgUyvryI6UIwoBSjhZ7FztYDHkurBF+dxjH NkjUXuLxM/GnuCwj16oS9P/b1KrJThzXMLbkDqu3s7qpAAtdSc4ydtw/JQ3wchnGEzmP tES248qWSuk8sEcFl8a6lVcuE3JcUaAH4JNBLe9oL34rpWNvqBgNRsxZKfUZt0JfrZ45 cG7w== 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=ZLrTFpR7F5Wxo7HIv2XTnj+iSIX/vf2yYEOX6yoC0sY=; b=V6UBhTPCDwuBPLUlUp3kB1ntPEPVuaOFfOCT8IQa5gZS4RRpnYG3j2mznGmse7amQE nUMW+4xe4grmgQgI3iGRNk6ghtq2Y6Qv8Z+F4zZJDkrJxYrH0Ta2Ilho0eBV/qrAQ5uy kyvi/NkfAkNkQpg5eblTah7bVMCSNHjBn+SXE0lWuQgmawsJLvz4WFIAF096XBUrbahN crG228ru8Pogzw8aaY307SYBTUMaTrDevCAm2kyTyxou3vvNY6IavlYUSdy9cpJj79qT EOvy0eRwA+YXxjmwfcqgGUBsaiYaJrarCjKaMvBW8n9KPYK+iMDHHfQCErp/T/rDlpd7 GIsA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b=XBl1miew; 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 t23-20020a056402241700b0044e725e6ac9si680346eda.460.2022.09.05.21.55.21; Mon, 05 Sep 2022 21:55: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=XBl1miew; 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 F11D968BA39; Tue, 6 Sep 2022 07:55:07 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B596F68B968 for ; Tue, 6 Sep 2022 07:54:59 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1662440104; x=1693976104; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=3MjskazPHl3aJPxddZKWJFi+flGHcDibELmQSpWKz8c=; b=XBl1miew95l1Yz1UKOeqct9hstTZ0WH6irl5ecdskMOWgYXb7Q/0nrnV P68VxLbANVM4osaPxxMu4k3crRe3k4OHaxW0Sn6EKN27Mv5im6uDwevb5 1+t+zZEPKxb8ZOMTujaSj/Ha/toe7letLq0ZTWHTWCczZ2R+XoJ0T2wup YSmPSdLv7VDE2oQ8LG25Qdppu5DG/+jX582Kkl2z9hVyp72ebPo+Uesvm ebDua31z7OV+5rklkOillTho+mZTTWHrbp+5WstoodZ2rVbNCHsb8ChmI XY/s9VKlFjWqEsOlBIqDf8BcMnFW4icGAPiRVij3WIMXyrEqKUNnh1nZ2 w==; X-IronPort-AV: E=McAfee;i="6500,9779,10461"; a="276897013" X-IronPort-AV: E=Sophos;i="5.93,293,1654585200"; d="scan'208";a="276897013" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 Sep 2022 21:54:57 -0700 X-IronPort-AV: E=Sophos;i="5.93,293,1654585200"; d="scan'208";a="675521579" 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; 05 Sep 2022 21:54:56 -0700 From: "Xiang, Haihao" To: ffmpeg-devel@ffmpeg.org Date: Tue, 6 Sep 2022 12:53:38 +0800 Message-Id: <20220906045338.20683-2-haihao.xiang@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220906045338.20683-1-haihao.xiang@intel.com> References: <20220906045338.20683-1-haihao.xiang@intel.com> Subject: [FFmpeg-devel] [PATCH v2 2/2] lavc/qsv: Add support for decoding & encoding 8bit 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: vTrJ9nnqlOax From: Haihao Xiang AV_PIX_FMT_VUYX is used in FFmpeg and MFX_FOURCC_AYUV is used in the SDK --- libavcodec/qsv.c | 14 ++++++++++++++ libavcodec/qsvdec.c | 2 ++ libavcodec/qsvenc_hevc.c | 1 + libavcodec/qsvenc_vp9.c | 1 + 4 files changed, 18 insertions(+) diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c index 3449789a2c..51aac16695 100644 --- a/libavcodec/qsv.c +++ b/libavcodec/qsv.c @@ -211,6 +211,7 @@ enum AVPixelFormat ff_qsv_map_fourcc(uint32_t fourcc) #if CONFIG_VAAPI 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; #endif } return AV_PIX_FMT_NONE; @@ -243,6 +244,9 @@ int ff_qsv_map_pixfmt(enum AVPixelFormat format, uint32_t *fourcc) case AV_PIX_FMT_Y210: *fourcc = MFX_FOURCC_Y210; return AV_PIX_FMT_Y210; + case AV_PIX_FMT_VUYX: + *fourcc = MFX_FOURCC_AYUV; + return AV_PIX_FMT_VUYX; #endif default: return AVERROR(ENOSYS); @@ -277,6 +281,16 @@ int ff_qsv_map_frame_to_surface(const AVFrame *frame, mfxFrameSurface1 *surface) surface->Data.U16 = (mfxU16 *)frame->data[0] + 1; surface->Data.V16 = (mfxU16 *)frame->data[0] + 3; break; + + case AV_PIX_FMT_VUYX: + surface->Data.V = frame->data[0]; + surface->Data.U = frame->data[0] + 1; + surface->Data.Y = frame->data[0] + 2; + // Only set Data.A to a valid address, the SDK doesn't + // use the value from the frame. + surface->Data.A = frame->data[0] + 3; + break; + default: return AVERROR(ENOSYS); } diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c index 0f0d719e23..0254a394bd 100644 --- a/libavcodec/qsvdec.c +++ b/libavcodec/qsvdec.c @@ -141,6 +141,7 @@ static int qsv_get_continuous_buffer(AVCodecContext *avctx, AVFrame *frame, frame->linesize[0] = 2 * FFALIGN(avctx->width, 128); break; case AV_PIX_FMT_Y210: + case AV_PIX_FMT_VUYX: frame->linesize[0] = 4 * FFALIGN(avctx->width, 128); break; default: @@ -1041,6 +1042,7 @@ const FFCodec ff_##x##_qsv_decoder = { \ AV_PIX_FMT_P010, \ AV_PIX_FMT_YUYV422, \ AV_PIX_FMT_Y210, \ + AV_PIX_FMT_VUYX, \ 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 5986c3f1a6..8072e676e1 100644 --- a/libavcodec/qsvenc_hevc.c +++ b/libavcodec/qsvenc_hevc.c @@ -314,6 +314,7 @@ const FFCodec ff_hevc_qsv_encoder = { AV_PIX_FMT_QSV, AV_PIX_FMT_BGRA, AV_PIX_FMT_X2RGB10, + AV_PIX_FMT_VUYX, 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 61d50156d3..044a882d1a 100644 --- a/libavcodec/qsvenc_vp9.c +++ b/libavcodec/qsvenc_vp9.c @@ -113,6 +113,7 @@ const FFCodec ff_vp9_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_VUYX, AV_PIX_FMT_QSV, AV_PIX_FMT_NONE }, .p.priv_class = &class,