summaryrefslogtreecommitdiffstats
path: root/recipes-multimedia
diff options
context:
space:
mode:
authorYew, Chang Ching <chang.ching.yew@intel.com>2021-11-10 14:20:47 +0800
committerAnuj Mittal <anuj.mittal@intel.com>2021-11-11 22:22:24 +0800
commit42a15be8a931c5049310d4e7796db479d4573f58 (patch)
tree5417356f051524ef35ce1faeb4f6befec85df556 /recipes-multimedia
parent5a66f35237cf396b20cea60279262e93a8f52bdc (diff)
downloadmeta-intel-42a15be8a931c5049310d4e7796db479d4573f58.tar.gz
onevpl-intel-gpu: Add VDSFC CSC support
Signed-off-by: Yew, Chang Ching <chang.ching.yew@intel.com> Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
Diffstat (limited to 'recipes-multimedia')
-rw-r--r--recipes-multimedia/onevpl/onevpl-intel-gpu/0001-AVCd-Add-frame-info-check-and-update-ChromaFormat-in.patch98
-rw-r--r--recipes-multimedia/onevpl/onevpl-intel-gpu/0001-HEVCd-Add-frame-info-check-and-update-ChromaFormat-i.patch173
-rw-r--r--recipes-multimedia/onevpl/onevpl-intel-gpu_21.3.4.bb2
3 files changed, 273 insertions, 0 deletions
diff --git a/recipes-multimedia/onevpl/onevpl-intel-gpu/0001-AVCd-Add-frame-info-check-and-update-ChromaFormat-in.patch b/recipes-multimedia/onevpl/onevpl-intel-gpu/0001-AVCd-Add-frame-info-check-and-update-ChromaFormat-in.patch
new file mode 100644
index 00000000..3c41c741
--- /dev/null
+++ b/recipes-multimedia/onevpl/onevpl-intel-gpu/0001-AVCd-Add-frame-info-check-and-update-ChromaFormat-in.patch
@@ -0,0 +1,98 @@
1From f23ba1b768a4db58ed985a0f066b65d9a65dd61b Mon Sep 17 00:00:00 2001
2From: "Yew, Chang Ching" <chang.ching.yew@intel.com>
3Date: Mon, 1 Nov 2021 13:28:06 +0000
4Subject: [PATCH 2/2] [AVCd] Add frame info check and update ChromaFormat in
5 FillOutputSurface for VDSFC CSC
6
7Upstream-Status: Submitted
8innersource PR #3871
9
10Signed-off-by: Yew, Chang Ching <chang.ching.yew@intel.com>
11---
12 .../decode/h264/src/mfx_h264_dec_decode.cpp | 48 +++++++++----------
13 1 file changed, 24 insertions(+), 24 deletions(-)
14
15diff --git a/_studio/mfx_lib/decode/h264/src/mfx_h264_dec_decode.cpp b/_studio/mfx_lib/decode/h264/src/mfx_h264_dec_decode.cpp
16index 84e57f7f18..8e51ad7852 100644
17--- a/_studio/mfx_lib/decode/h264/src/mfx_h264_dec_decode.cpp
18+++ b/_studio/mfx_lib/decode/h264/src/mfx_h264_dec_decode.cpp
19@@ -1140,12 +1140,8 @@ mfxStatus VideoDECODEH264::DecodeFrameCheck(mfxBitstream *bs, mfxFrameSurface1 *
20 isVideoProcCscEnabled = true;
21 }
22 #endif
23- sts = CheckFrameInfoCodecs(&surface_work->Info, MFX_CODEC_AVC);
24- //Decode CSC support more FourCC format, already checked in Init, skip the check return;
25- if(!isVideoProcCscEnabled)
26- {
27- MFX_CHECK(sts == MFX_ERR_NONE, MFX_ERR_UNSUPPORTED);
28- }
29+ sts = isVideoProcCscEnabled ? CheckFrameInfoDecVideoProcCsc(&surface_work->Info, MFX_CODEC_AVC) : CheckFrameInfoCodecs(&surface_work->Info, MFX_CODEC_AVC);
30+ MFX_CHECK(sts == MFX_ERR_NONE, MFX_ERR_INVALID_VIDEO_PARAM)
31
32 sts = CheckFrameData(surface_work);
33 MFX_CHECK_STS(sts);
34@@ -1420,11 +1416,6 @@ void VideoDECODEH264::FillOutputSurface(mfxFrameSurface1 **surf_out, mfxFrameSur
35 }
36 #endif
37
38- surface_out->Info.CropH = (mfxU16)(pFrame->lumaSize().height - pFrame->m_crop_bottom - pFrame->m_crop_top);
39- surface_out->Info.CropW = (mfxU16)(pFrame->lumaSize().width - pFrame->m_crop_right - pFrame->m_crop_left);
40- surface_out->Info.CropX = (mfxU16)(pFrame->m_crop_left);
41- surface_out->Info.CropY = (mfxU16)(pFrame->m_crop_top);
42-
43 #ifndef MFX_DEC_VIDEO_POSTPROCESS_DISABLE
44 mfxExtDecVideoProcessing * videoProcessing = (mfxExtDecVideoProcessing *)GetExtendedBuffer(m_vFirstPar.ExtParam, m_vFirstPar.NumExtParam, MFX_EXTBUFF_DEC_VIDEO_PROCESSING);
45 if (videoProcessing)
46@@ -1433,8 +1424,28 @@ void VideoDECODEH264::FillOutputSurface(mfxFrameSurface1 **surf_out, mfxFrameSur
47 surface_out->Info.CropW = videoProcessing->Out.CropW;
48 surface_out->Info.CropX = videoProcessing->Out.CropX;
49 surface_out->Info.CropY = videoProcessing->Out.CropY;
50- }
51+ surface_out->Info.ChromaFormat = videoProcessing->Out.ChromaFormat;
52+ } else
53 #endif
54+ {
55+ surface_out->Info.CropH = (mfxU16)(pFrame->lumaSize().height - pFrame->m_crop_bottom - pFrame->m_crop_top);
56+ surface_out->Info.CropW = (mfxU16)(pFrame->lumaSize().width - pFrame->m_crop_right - pFrame->m_crop_left);
57+ surface_out->Info.CropX = (mfxU16)(pFrame->m_crop_left);
58+ surface_out->Info.CropY = (mfxU16)(pFrame->m_crop_top);
59+
60+ switch(pFrame->m_chroma_format)
61+ {
62+ case 0:
63+ surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV400;
64+ break;
65+ case 2:
66+ surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV422;
67+ break;
68+ default:
69+ surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
70+ break;
71+ }
72+ }
73
74 bool isShouldUpdate = !(m_vFirstPar.mfx.FrameInfo.AspectRatioH || m_vFirstPar.mfx.FrameInfo.AspectRatioW);
75
76@@ -1447,18 +1458,7 @@ void VideoDECODEH264::FillOutputSurface(mfxFrameSurface1 **surf_out, mfxFrameSur
77 surface_out->Info.FrameRateExtN = isShouldUpdate ? m_vPar.mfx.FrameInfo.FrameRateExtN : m_vFirstPar.mfx.FrameInfo.FrameRateExtN;
78
79 surface_out->Info.PicStruct = 0;
80- switch(pFrame->m_chroma_format)
81- {
82- case 0:
83- surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV400;
84- break;
85- case 2:
86- surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV422;
87- break;
88- default:
89- surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
90- break;
91- }
92+
93
94 switch (pFrame->m_displayPictureStruct)
95 {
96--
972.33.1
98
diff --git a/recipes-multimedia/onevpl/onevpl-intel-gpu/0001-HEVCd-Add-frame-info-check-and-update-ChromaFormat-i.patch b/recipes-multimedia/onevpl/onevpl-intel-gpu/0001-HEVCd-Add-frame-info-check-and-update-ChromaFormat-i.patch
new file mode 100644
index 00000000..69ce1369
--- /dev/null
+++ b/recipes-multimedia/onevpl/onevpl-intel-gpu/0001-HEVCd-Add-frame-info-check-and-update-ChromaFormat-i.patch
@@ -0,0 +1,173 @@
1From 99160958668fd4a170cd749492e37ebdb28dae69 Mon Sep 17 00:00:00 2001
2From: "Yew, Chang Ching" <chang.ching.yew@intel.com>
3Date: Thu, 23 Sep 2021 21:34:16 +0000
4Subject: [PATCH 1/2] [HEVCd] Add frame info check and update ChromaFormat in
5 FillOutputSurface for VDSFC CSC
6
7Upstream-Status: Submitted
8innersource PR #3871
9
10Signed-off-by: Yew, Chang Ching <chang.ching.yew@intel.com>
11---
12 .../decode/h265/src/mfx_h265_dec_decode.cpp | 64 +++++++++++--------
13 .../mfx_lib/shared/include/mfx_common_int.h | 1 +
14 _studio/mfx_lib/shared/src/mfx_common_int.cpp | 33 ++++++++++
15 3 files changed, 71 insertions(+), 27 deletions(-)
16
17diff --git a/_studio/mfx_lib/decode/h265/src/mfx_h265_dec_decode.cpp b/_studio/mfx_lib/decode/h265/src/mfx_h265_dec_decode.cpp
18index fe2bcf2c3f..362ad257d6 100644
19--- a/_studio/mfx_lib/decode/h265/src/mfx_h265_dec_decode.cpp
20+++ b/_studio/mfx_lib/decode/h265/src/mfx_h265_dec_decode.cpp
21@@ -963,8 +963,16 @@ mfxStatus VideoDECODEH265::DecodeFrameCheck(mfxBitstream *bs, mfxFrameSurface1 *
22
23 if (surface_work)
24 {
25- sts = CheckFrameInfoCodecs(&surface_work->Info, MFX_CODEC_HEVC);
26- MFX_CHECK(sts == MFX_ERR_NONE, MFX_ERR_INVALID_VIDEO_PARAM);
27+ bool isVideoProcCscEnabled = false;
28+#ifndef MFX_DEC_VIDEO_POSTPROCESS_DISABLE
29+ mfxExtDecVideoProcessing* videoProcessing = (mfxExtDecVideoProcessing*)GetExtendedBuffer(m_vInitPar.ExtParam, m_vInitPar.NumExtParam, MFX_EXTBUFF_DEC_VIDEO_PROCESSING);
30+ if (videoProcessing && videoProcessing->Out.FourCC != m_vPar.mfx.FrameInfo.FourCC)
31+ {
32+ isVideoProcCscEnabled = true;
33+ }
34+#endif
35+ sts = isVideoProcCscEnabled ? CheckFrameInfoDecVideoProcCsc(&surface_work->Info, MFX_CODEC_HEVC) : CheckFrameInfoCodecs(&surface_work->Info, MFX_CODEC_HEVC);
36+ MFX_CHECK(sts == MFX_ERR_NONE, MFX_ERR_INVALID_VIDEO_PARAM)
37
38 sts = CheckFrameData(surface_work);
39 MFX_CHECK_STS(sts);
40@@ -1172,11 +1180,6 @@ void VideoDECODEH265::FillOutputSurface(mfxFrameSurface1 **surf_out, mfxFrameSur
41
42 surface_out->Info.FrameId.TemporalId = 0;
43
44- surface_out->Info.CropH = (mfxU16)(pFrame->lumaSize().height - pFrame->m_crop_bottom - pFrame->m_crop_top);
45- surface_out->Info.CropW = (mfxU16)(pFrame->lumaSize().width - pFrame->m_crop_right - pFrame->m_crop_left);
46- surface_out->Info.CropX = (mfxU16)(pFrame->m_crop_left);
47- surface_out->Info.CropY = (mfxU16)(pFrame->m_crop_top);
48-
49 #ifndef MFX_DEC_VIDEO_POSTPROCESS_DISABLE
50 mfxExtDecVideoProcessing * videoProcessing = (mfxExtDecVideoProcessing *)GetExtendedBuffer(m_vFirstPar.ExtParam, m_vFirstPar.NumExtParam, MFX_EXTBUFF_DEC_VIDEO_PROCESSING);
51 if (videoProcessing)
52@@ -1185,8 +1188,35 @@ void VideoDECODEH265::FillOutputSurface(mfxFrameSurface1 **surf_out, mfxFrameSur
53 surface_out->Info.CropW = videoProcessing->Out.CropW;
54 surface_out->Info.CropX = videoProcessing->Out.CropX;
55 surface_out->Info.CropY = videoProcessing->Out.CropY;
56+ surface_out->Info.ChromaFormat = videoProcessing->Out.ChromaFormat;
57 }
58+ else
59 #endif
60+ {
61+ surface_out->Info.CropH = (mfxU16)(pFrame->lumaSize().height - pFrame->m_crop_bottom - pFrame->m_crop_top);
62+ surface_out->Info.CropW = (mfxU16)(pFrame->lumaSize().width - pFrame->m_crop_right - pFrame->m_crop_left);
63+ surface_out->Info.CropX = (mfxU16)(pFrame->m_crop_left);
64+ surface_out->Info.CropY = (mfxU16)(pFrame->m_crop_top);
65+
66+ switch(pFrame->m_chroma_format)
67+ {
68+ case 0:
69+ surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV400;
70+ break;
71+ case 1:
72+ surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
73+ break;
74+ case 2:
75+ surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV422;
76+ break;
77+ case 3:
78+ surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV444;
79+ break;
80+ default:
81+ VM_ASSERT(!"Unknown chroma format");
82+ surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
83+ }
84+ }
85
86 bool isShouldUpdate = !(m_vFirstPar.mfx.FrameInfo.AspectRatioH || m_vFirstPar.mfx.FrameInfo.AspectRatioW);
87
88@@ -1198,26 +1228,6 @@ void VideoDECODEH265::FillOutputSurface(mfxFrameSurface1 **surf_out, mfxFrameSur
89 surface_out->Info.FrameRateExtD = isShouldUpdate ? m_vPar.mfx.FrameInfo.FrameRateExtD : m_vFirstPar.mfx.FrameInfo.FrameRateExtD;
90 surface_out->Info.FrameRateExtN = isShouldUpdate ? m_vPar.mfx.FrameInfo.FrameRateExtN : m_vFirstPar.mfx.FrameInfo.FrameRateExtN;
91
92- surface_out->Info.PicStruct = 0;
93- switch(pFrame->m_chroma_format)
94- {
95- case 0:
96- surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV400;
97- break;
98- case 1:
99- surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
100- break;
101- case 2:
102- surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV422;
103- break;
104- case 3:
105- surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV444;
106- break;
107- default:
108- VM_ASSERT(!"Unknown chroma format");
109- surface_out->Info.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
110- }
111-
112 surface_out->Info.PicStruct =
113 UMC2MFX_PicStruct(pFrame->m_DisplayPictureStruct_H265, !!m_vPar.mfx.ExtendedPicStruct);
114
115diff --git a/_studio/mfx_lib/shared/include/mfx_common_int.h b/_studio/mfx_lib/shared/include/mfx_common_int.h
116index 4f12ddb883..73f4667a18 100644
117--- a/_studio/mfx_lib/shared/include/mfx_common_int.h
118+++ b/_studio/mfx_lib/shared/include/mfx_common_int.h
119@@ -29,6 +29,7 @@
120
121 mfxStatus CheckFrameInfoCommon(mfxFrameInfo *info, mfxU32 codecId);
122 mfxStatus CheckFrameInfoEncoders(mfxFrameInfo *info);
123+mfxStatus CheckFrameInfoDecVideoProcCsc(mfxFrameInfo *info, mfxU32 codecId);
124 mfxStatus CheckFrameInfoCodecs(mfxFrameInfo *info, mfxU32 codecId = MFX_CODEC_AVC);
125
126 mfxStatus CheckVideoParamEncoders(mfxVideoParam *in, eMFXHWType type);
127diff --git a/_studio/mfx_lib/shared/src/mfx_common_int.cpp b/_studio/mfx_lib/shared/src/mfx_common_int.cpp
128index 1142457f00..4f2126d944 100644
129--- a/_studio/mfx_lib/shared/src/mfx_common_int.cpp
130+++ b/_studio/mfx_lib/shared/src/mfx_common_int.cpp
131@@ -163,6 +163,39 @@ mfxStatus CheckFrameInfoEncoders(mfxFrameInfo *info)
132 return MFX_ERR_NONE;
133 }
134
135+mfxStatus CheckFrameInfoDecVideoProcCsc(mfxFrameInfo *info, mfxU32 codecId)
136+{
137+ mfxStatus sts = CheckFrameInfoCommon(info, codecId);
138+ MFX_CHECK_STS(sts);
139+
140+ switch(info->FourCC) {
141+ case MFX_FOURCC_NV12:
142+ case MFX_FOURCC_P010:
143+ case MFX_FOURCC_P016:
144+ if (info->ChromaFormat == MFX_CHROMAFORMAT_YUV420)
145+ return MFX_ERR_NONE;
146+ MFX_RETURN(MFX_ERR_INVALID_VIDEO_PARAM);
147+
148+ case MFX_FOURCC_YUY2:
149+ case MFX_FOURCC_Y210:
150+ case MFX_FOURCC_Y216:
151+ if (info->ChromaFormat == MFX_CHROMAFORMAT_YUV422)
152+ return MFX_ERR_NONE;
153+ MFX_RETURN(MFX_ERR_INVALID_VIDEO_PARAM);
154+
155+ case MFX_FOURCC_AYUV:
156+ case MFX_FOURCC_Y410:
157+ case MFX_FOURCC_Y416:
158+ case MFX_FOURCC_RGB4:
159+ if (info->ChromaFormat == MFX_CHROMAFORMAT_YUV444)
160+ return MFX_ERR_NONE;
161+ MFX_RETURN(MFX_ERR_INVALID_VIDEO_PARAM);
162+
163+ default:
164+ MFX_RETURN(MFX_ERR_UNSUPPORTED);
165+ }
166+}
167+
168 mfxStatus CheckFrameInfoCodecs(mfxFrameInfo *info, mfxU32 codecId)
169 {
170 mfxStatus sts = CheckFrameInfoCommon(info, codecId);
171--
1722.33.1
173
diff --git a/recipes-multimedia/onevpl/onevpl-intel-gpu_21.3.4.bb b/recipes-multimedia/onevpl/onevpl-intel-gpu_21.3.4.bb
index d0a8b222..1fc4c4b2 100644
--- a/recipes-multimedia/onevpl/onevpl-intel-gpu_21.3.4.bb
+++ b/recipes-multimedia/onevpl/onevpl-intel-gpu_21.3.4.bb
@@ -19,6 +19,8 @@ DEPENDS += "libdrm libva intel-media-driver onevpl pkgconfig-native"
19SRC_URI = "git://github.com/oneapi-src/oneVPL-intel-gpu.git;protocol=https;branch=main;lfs=0 \ 19SRC_URI = "git://github.com/oneapi-src/oneVPL-intel-gpu.git;protocol=https;branch=main;lfs=0 \
20 file://0001-jpegd-Enable-JPEG-decode-error-report.patch \ 20 file://0001-jpegd-Enable-JPEG-decode-error-report.patch \
21 file://0001-Adding-missing-device-ID-4692-for-ADL-S.patch \ 21 file://0001-Adding-missing-device-ID-4692-for-ADL-S.patch \
22 file://0001-HEVCd-Add-frame-info-check-and-update-ChromaFormat-i.patch \
23 file://0001-AVCd-Add-frame-info-check-and-update-ChromaFormat-in.patch \
22 " 24 "
23 25
24SRCREV = "51608c724044802cc060b7969084126a3e90ca4a" 26SRCREV = "51608c724044802cc060b7969084126a3e90ca4a"