From e2867cd0673394f5cbe7847acbf0d774196f3dfb Mon Sep 17 00:00:00 2001 From: Christa03 Date: Thu, 31 Oct 2024 12:13:06 +0800 Subject: [PATCH 1/3] [Encode] Av1e linux ARGB caps enable Enable ARGB for linux --- .../linux/Xe_M/ddi/media_libva_caps_dg2.h | 3 ++- .../common/codec/ddi/media_ddi_encode_av1.cpp | 1 + .../common/codec/ddi/media_ddi_encode_av1.h | 19 ++++++++++++++++++ .../codec/ddi/enc/ddi_encode_av1_specific.cpp | 2 +- .../codec/ddi/enc/ddi_encode_av1_specific.h | 20 +++++++++++++++++++ 5 files changed, 43 insertions(+), 2 deletions(-) diff --git a/media_driver/linux/Xe_M/ddi/media_libva_caps_dg2.h b/media_driver/linux/Xe_M/ddi/media_libva_caps_dg2.h index 5b05171f43e..7a284792e74 100644 --- a/media_driver/linux/Xe_M/ddi/media_libva_caps_dg2.h +++ b/media_driver/linux/Xe_M/ddi/media_libva_caps_dg2.h @@ -56,7 +56,8 @@ class MediaLibvaCapsDG2 : public MediaLibvaCapsG12 {VP9, Vdenc, VA_RT_FORMAT_YUV420 | VA_RT_FORMAT_YUV420_10BPP | VA_RT_FORMAT_YUV444 | VA_RT_FORMAT_YUV444_10 | VA_RT_FORMAT_RGB32 | VA_RT_FORMAT_RGB32_10BPP}, - {AV1, Vdenc, VA_RT_FORMAT_YUV420 | VA_RT_FORMAT_YUV420_10BPP} + {AV1, Vdenc, VA_RT_FORMAT_YUV420 | VA_RT_FORMAT_YUV420_10BPP | + VA_RT_FORMAT_RGB32 | VA_RT_FORMAT_RGB32_10BPP} }; m_encodeFormatTable = (struct EncodeFormatTable*)(&encodeFormatTableDG2[0]); m_encodeFormatCount = sizeof(encodeFormatTableDG2)/sizeof(struct EncodeFormatTable); diff --git a/media_driver/linux/common/codec/ddi/media_ddi_encode_av1.cpp b/media_driver/linux/common/codec/ddi/media_ddi_encode_av1.cpp index 2d2eb0f7b82..58b720a556f 100644 --- a/media_driver/linux/common/codec/ddi/media_ddi_encode_av1.cpp +++ b/media_driver/linux/common/codec/ddi/media_ddi_encode_av1.cpp @@ -453,6 +453,7 @@ VAStatus DdiEncodeAV1::ParseSeqParams(void *ptr) #else av1SeqParams->SeqFlags.fields.HierarchicalFlag = seqParams->reserved8b; #endif + av1SeqParams->SeqFlags.fields.DisplayFormatSwizzle = NeedDisplayFormatSwizzle(m_encodeCtx->RTtbl.pCurrentRT); return VA_STATUS_SUCCESS; } diff --git a/media_driver/linux/common/codec/ddi/media_ddi_encode_av1.h b/media_driver/linux/common/codec/ddi/media_ddi_encode_av1.h index 9775c5b3226..8fd9d2308be 100644 --- a/media_driver/linux/common/codec/ddi/media_ddi_encode_av1.h +++ b/media_driver/linux/common/codec/ddi/media_ddi_encode_av1.h @@ -309,6 +309,25 @@ class DdiEncodeAV1 : public DdiEncodeBase VAStatus CheckTile(const VAEncPictureParameterBufferAV1 *picParams); + //! + //! \brief Check whether swizzle needed + //! + //! \param [in] rawSurface + //! Pointer of Raw Surface + //! + //! \return bool, true if need, otherwise false + //! + inline bool NeedDisplayFormatSwizzle(DDI_MEDIA_SURFACE *rawSurface) + { + if (Media_Format_A8R8G8B8 == rawSurface->format || + Media_Format_X8R8G8B8 == rawSurface->format || + Media_Format_B10G10R10A2 == rawSurface->format) + { + return true; + } + + return false; + } uint32_t savedTargetBit[ENCODE_AV1_MAX_NUM_TEMPORAL_LAYERS] = { 0 }; uint32_t savedFrameRate[ENCODE_AV1_MAX_NUM_TEMPORAL_LAYERS] = { 0 }; uint32_t savedMaxBitRate[ENCODE_AV1_MAX_NUM_TEMPORAL_LAYERS] = { 0 }; diff --git a/media_softlet/linux/common/codec/ddi/enc/ddi_encode_av1_specific.cpp b/media_softlet/linux/common/codec/ddi/enc/ddi_encode_av1_specific.cpp index b5dc7dfb578..d0a29855638 100644 --- a/media_softlet/linux/common/codec/ddi/enc/ddi_encode_av1_specific.cpp +++ b/media_softlet/linux/common/codec/ddi/enc/ddi_encode_av1_specific.cpp @@ -435,7 +435,7 @@ VAStatus DdiEncodeAV1::ParseSeqParams(void *ptr) #else av1SeqParams->SeqFlags.fields.HierarchicalFlag = seqParams->reserved8b; #endif - + av1SeqParams->SeqFlags.fields.DisplayFormatSwizzle = NeedDisplayFormatSwizzle(m_encodeCtx->RTtbl.pCurrentRT); return VA_STATUS_SUCCESS; } diff --git a/media_softlet/linux/common/codec/ddi/enc/ddi_encode_av1_specific.h b/media_softlet/linux/common/codec/ddi/enc/ddi_encode_av1_specific.h index 5c75f22eedd..3a7ccd09e19 100644 --- a/media_softlet/linux/common/codec/ddi/enc/ddi_encode_av1_specific.h +++ b/media_softlet/linux/common/codec/ddi/enc/ddi_encode_av1_specific.h @@ -335,6 +335,26 @@ class DdiEncodeAV1 : public encode::DdiEncodeBase //! CODECHAL_MODE GetEncodeCodecMode(VAProfile profile, VAEntrypoint entrypoint) override; + //! + //! \brief Check whether swizzle needed + //! + //! \param [in] rawSurface + //! Pointer of Raw Surface + //! + //! \return bool, true if need, otherwise false + //! + inline bool NeedDisplayFormatSwizzle(DDI_MEDIA_SURFACE *rawSurface) + { + if (Media_Format_A8R8G8B8 == rawSurface->format || + Media_Format_X8R8G8B8 == rawSurface->format || + Media_Format_B10G10R10A2 == rawSurface->format) + { + return true; + } + + return false; + } + uint32_t savedTargetBit[ENCODE_AV1_MAX_NUM_TEMPORAL_LAYERS] = { 0 }; uint32_t savedFrameRate[ENCODE_AV1_MAX_NUM_TEMPORAL_LAYERS] = { 0 }; uint32_t savedMaxBitRate[ENCODE_AV1_MAX_NUM_TEMPORAL_LAYERS] = { 0 }; From b75d53669810d28bb298eade43954a749924e37e Mon Sep 17 00:00:00 2001 From: Christa03 Date: Mon, 18 Nov 2024 12:04:37 +0800 Subject: [PATCH 2/3] [Encode] Fix AV1e linux A2RGB10 issue * [Encode] Fix AV1e linux A2RGB10 issue Change B10G10A10A2 format depth as 10 --- .../codec/hal/enc/av1/features/encode_av1_basic_feature.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/media_softlet/agnostic/common/codec/hal/enc/av1/features/encode_av1_basic_feature.cpp b/media_softlet/agnostic/common/codec/hal/enc/av1/features/encode_av1_basic_feature.cpp index 8a93aece2de..7c89fc32b39 100644 --- a/media_softlet/agnostic/common/codec/hal/enc/av1/features/encode_av1_basic_feature.cpp +++ b/media_softlet/agnostic/common/codec/hal/enc/av1/features/encode_av1_basic_feature.cpp @@ -351,6 +351,8 @@ MOS_STATUS Av1BasicFeature::UpdateFormat(void *params) switch(m_rawSurface.Format) { case Format_P010: + case Format_R10G10B10A2: + case Format_B10G10R10A2: m_is10Bit = true; m_bitDepth = 10; break; From d5dccea650ef1ce86b79c7e64fe781489a40b740 Mon Sep 17 00:00:00 2001 From: "Ma, Caihong" Date: Wed, 15 Jan 2025 14:45:16 +0800 Subject: [PATCH 3/3] [Encode] Add ARGB caps for MTL --- .../av1/ddi/capstable_data_av1_encode_xe_lpm_plus_r0_specific.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/media_softlet/linux/xe_lpm_plus_r0/encode/av1/ddi/capstable_data_av1_encode_xe_lpm_plus_r0_specific.h b/media_softlet/linux/xe_lpm_plus_r0/encode/av1/ddi/capstable_data_av1_encode_xe_lpm_plus_r0_specific.h index d1d938b56dd..757b0628c4c 100644 --- a/media_softlet/linux/xe_lpm_plus_r0/encode/av1/ddi/capstable_data_av1_encode_xe_lpm_plus_r0_specific.h +++ b/media_softlet/linux/xe_lpm_plus_r0/encode/av1/ddi/capstable_data_av1_encode_xe_lpm_plus_r0_specific.h @@ -66,7 +66,7 @@ static ConfigDataList configDataList_VAProfileAV1Profile0_VAEntrypointEncSlice_X //! static const AttribList attribList_VAProfileAV1Profile0_VAEntrypointEncSlice_Xe_Lpm_plus_r0 { - {VAConfigAttribRTFormat, VA_RT_FORMAT_YUV420 | VA_RT_FORMAT_YUV420_10}, + {VAConfigAttribRTFormat, VA_RT_FORMAT_YUV420 | VA_RT_FORMAT_YUV420_10 | VA_RT_FORMAT_RGB32 | VA_RT_FORMAT_RGB32_10BPP}, {VAConfigAttribEncDynamicScaling, 0}, {VAConfigAttribEncDirtyRect, VA_ATTRIB_NOT_SUPPORTED}, {VAConfigAttribEncAV1Ext2, VAProfileAV1Profile0_VAEntrypointEncSlice_encAV1Ext2.value},