diff options
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 @@ | |||
1 | From f23ba1b768a4db58ed985a0f066b65d9a65dd61b Mon Sep 17 00:00:00 2001 | ||
2 | From: "Yew, Chang Ching" <chang.ching.yew@intel.com> | ||
3 | Date: Mon, 1 Nov 2021 13:28:06 +0000 | ||
4 | Subject: [PATCH 2/2] [AVCd] Add frame info check and update ChromaFormat in | ||
5 | FillOutputSurface for VDSFC CSC | ||
6 | |||
7 | Upstream-Status: Submitted | ||
8 | innersource PR #3871 | ||
9 | |||
10 | Signed-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 | |||
15 | diff --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 | ||
16 | index 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 | -- | ||
97 | 2.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 @@ | |||
1 | From 99160958668fd4a170cd749492e37ebdb28dae69 Mon Sep 17 00:00:00 2001 | ||
2 | From: "Yew, Chang Ching" <chang.ching.yew@intel.com> | ||
3 | Date: Thu, 23 Sep 2021 21:34:16 +0000 | ||
4 | Subject: [PATCH 1/2] [HEVCd] Add frame info check and update ChromaFormat in | ||
5 | FillOutputSurface for VDSFC CSC | ||
6 | |||
7 | Upstream-Status: Submitted | ||
8 | innersource PR #3871 | ||
9 | |||
10 | Signed-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 | |||
17 | diff --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 | ||
18 | index 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 | |||
115 | diff --git a/_studio/mfx_lib/shared/include/mfx_common_int.h b/_studio/mfx_lib/shared/include/mfx_common_int.h | ||
116 | index 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); | ||
127 | diff --git a/_studio/mfx_lib/shared/src/mfx_common_int.cpp b/_studio/mfx_lib/shared/src/mfx_common_int.cpp | ||
128 | index 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 | -- | ||
172 | 2.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" | |||
19 | SRC_URI = "git://github.com/oneapi-src/oneVPL-intel-gpu.git;protocol=https;branch=main;lfs=0 \ | 19 | SRC_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 | ||
24 | SRCREV = "51608c724044802cc060b7969084126a3e90ca4a" | 26 | SRCREV = "51608c724044802cc060b7969084126a3e90ca4a" |