summaryrefslogtreecommitdiffstats
path: root/recipes-multimedia/onevpl
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-multimedia/onevpl')
-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-Adding-missing-device-ID-4692-for-ADL-S.patch33
-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/0001-jpegd-Enable-JPEG-decode-error-report.patch502
-rw-r--r--recipes-multimedia/onevpl/onevpl-intel-gpu_21.3.4.bb29
-rw-r--r--recipes-multimedia/onevpl/onevpl/0001-Extends-errorTypes-to-support-JPEG-errors.patch59
-rw-r--r--recipes-multimedia/onevpl/onevpl/0001-Fix-basename-build-issue-with-musl_libc.patch37
-rw-r--r--recipes-multimedia/onevpl/onevpl/0001-sample_decode-Add-VDSFC-CSC-for-AVC-HEVC.patch132
-rw-r--r--recipes-multimedia/onevpl/onevpl/0001-sample_misc-Addin-basic-wayland-dmabuf-support.patch90
-rw-r--r--recipes-multimedia/onevpl/onevpl/0001-sample_misc-use-wayland-dmabuf-to-render-nv12.patch94
-rw-r--r--recipes-multimedia/onevpl/onevpl/0001-samples-Addin-wayland-scanner-auto-generate-on-cmake.patch98
-rw-r--r--recipes-multimedia/onevpl/onevpl/0001-samples-use-find_program-to-detect-wayland-scanner-i.patch108
-rw-r--r--recipes-multimedia/onevpl/onevpl_2021.6.0.bb46
13 files changed, 0 insertions, 1499 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
deleted file mode 100644
index 3c41c741..00000000
--- a/recipes-multimedia/onevpl/onevpl-intel-gpu/0001-AVCd-Add-frame-info-check-and-update-ChromaFormat-in.patch
+++ /dev/null
@@ -1,98 +0,0 @@
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-Adding-missing-device-ID-4692-for-ADL-S.patch b/recipes-multimedia/onevpl/onevpl-intel-gpu/0001-Adding-missing-device-ID-4692-for-ADL-S.patch
deleted file mode 100644
index 9d8577bc..00000000
--- a/recipes-multimedia/onevpl/onevpl-intel-gpu/0001-Adding-missing-device-ID-4692-for-ADL-S.patch
+++ /dev/null
@@ -1,33 +0,0 @@
1From 1579b536f1a82fb7c80f49fc7b76cda65b8bd18e Mon Sep 17 00:00:00 2001
2From: "Teng, Jin Chung" <jin.chung.teng@intel.com>
3Date: Thu, 28 Oct 2021 13:49:58 +0800
4Subject: [PATCH] Adding missing device ID 4692 for ADL-S
5
6Upstream-Status: Submitted
7innersource PR #3717
8
9[Internal]
10Issue:-
11Test:-
12OSPR:N/A
13
14Signed-off-by: Teng, Jin Chung <jin.chung.teng@intel.com>
15---
16 _studio/shared/include/mfxstructures-int.h | 1 +
17 1 file changed, 1 insertion(+)
18
19diff --git a/_studio/shared/include/mfxstructures-int.h b/_studio/shared/include/mfxstructures-int.h
20index c71f126..fa1329d 100755
21--- a/_studio/shared/include/mfxstructures-int.h
22+++ b/_studio/shared/include/mfxstructures-int.h
23@@ -427,6 +427,7 @@ typedef struct {
24 { 0x4683, MFX_HW_ADL_S, MFX_GT1 },//ADL-S
25 { 0x4690, MFX_HW_ADL_S, MFX_GT1 },//ADL-S
26 { 0x4691, MFX_HW_ADL_S, MFX_GT1 },//ADL-S
27+ { 0x4692, MFX_HW_ADL_S, MFX_GT1 },//ADL-S
28 { 0x4693, MFX_HW_ADL_S, MFX_GT1 },//ADL-S
29 { 0x4698, MFX_HW_ADL_S, MFX_GT1 },//ADL-S
30 { 0x4699, MFX_HW_ADL_S, MFX_GT1 },//ADL-S
31--
322.7.4
33
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
deleted file mode 100644
index 69ce1369..00000000
--- a/recipes-multimedia/onevpl/onevpl-intel-gpu/0001-HEVCd-Add-frame-info-check-and-update-ChromaFormat-i.patch
+++ /dev/null
@@ -1,173 +0,0 @@
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/0001-jpegd-Enable-JPEG-decode-error-report.patch b/recipes-multimedia/onevpl/onevpl-intel-gpu/0001-jpegd-Enable-JPEG-decode-error-report.patch
deleted file mode 100644
index 21482ed7..00000000
--- a/recipes-multimedia/onevpl/onevpl-intel-gpu/0001-jpegd-Enable-JPEG-decode-error-report.patch
+++ /dev/null
@@ -1,502 +0,0 @@
1From fe25ec3db9a48308bd6d3e9fe800e67335f8a369 Mon Sep 17 00:00:00 2001
2From: "Yew, Chang Ching" <chang.ching.yew@intel.com>
3Date: Mon, 4 Oct 2021 13:56:08 +0800
4Subject: [PATCH] [jpegd] Enable JPEG decode error report
5
6Upstream-Status: Submitted
7innersource PR #3318
8
9[Internal]
10 Issue: NA
11 Test: manual. Gst-MSDK with mfxExtDecodeErrorReport
12 OSPR: N/A
13
14Signed-off-by: Cheah, Vincent Beng Keat vincent.beng.keat.cheah@intel.com>
15---
16 .../mjpeg/include/mfx_mjpeg_dec_decode.h | 2 ++
17 .../decode/mjpeg/src/mfx_mjpeg_dec_decode.cpp | 19 ++++++++++-
18 .../umc/codec/jpeg_dec/include/jpegdec.h | 1 +
19 .../umc/codec/jpeg_dec/include/jpegdec_base.h | 19 +++++++++++
20 .../jpeg_dec/include/umc_mjpeg_mfx_decode.h | 2 +-
21 .../include/umc_mjpeg_mfx_decode_base.h | 4 +--
22 .../shared/umc/codec/jpeg_dec/src/jpegdec.cpp | 17 ++++++++--
23 .../umc/codec/jpeg_dec/src/jpegdec_base.cpp | 29 +++++++++++++++-
24 .../jpeg_dec/src/umc_mjpeg_mfx_decode.cpp | 6 ++--
25 .../src/umc_mjpeg_mfx_decode_base.cpp | 6 ++--
26 api/vpl/mfxstructures.h | 33 +++++++++++++++----
27 11 files changed, 121 insertions(+), 17 deletions(-)
28
29diff --git a/_studio/mfx_lib/decode/mjpeg/include/mfx_mjpeg_dec_decode.h b/_studio/mfx_lib/decode/mjpeg/include/mfx_mjpeg_dec_decode.h
30index c6641d3e71..a2ea6b5cec 100644
31--- a/_studio/mfx_lib/decode/mjpeg/include/mfx_mjpeg_dec_decode.h
32+++ b/_studio/mfx_lib/decode/mjpeg/include/mfx_mjpeg_dec_decode.h
33@@ -37,6 +37,7 @@
34 #endif
35
36 #include "mfx_task.h"
37+#include "umc_media_data.h"
38
39 #include "mfx_vpp_jpeg.h"
40
41@@ -46,6 +47,7 @@ namespace UMC
42 class JpegFrameConstructor;
43 class MediaDataEx;
44 class FrameData;
45+ class MediaData;
46 };
47
48 class VideoDECODEMJPEGBase
49diff --git a/_studio/mfx_lib/decode/mjpeg/src/mfx_mjpeg_dec_decode.cpp b/_studio/mfx_lib/decode/mjpeg/src/mfx_mjpeg_dec_decode.cpp
50index 3769fe8a72..0775fbb1be 100644
51--- a/_studio/mfx_lib/decode/mjpeg/src/mfx_mjpeg_dec_decode.cpp
52+++ b/_studio/mfx_lib/decode/mjpeg/src/mfx_mjpeg_dec_decode.cpp
53@@ -456,6 +456,14 @@ mfxStatus VideoDECODEMJPEG::DecodeHeader(VideoCORE *core, mfxBitstream *bs, mfxV
54 UMC::Status umcRes = decoder.Init(&umcVideoParams);
55 MFX_CHECK_INIT(umcRes == UMC::UMC_OK);
56
57+ mfxExtBuffer* extbuf = (bs) ? GetExtendedBuffer(bs->ExtParam, bs->NumExtParam, MFX_EXTBUFF_DECODE_ERROR_REPORT) : NULL;
58+
59+ if (extbuf)
60+ {
61+ reinterpret_cast<mfxExtDecodeErrorReport *>(extbuf)->ErrorTypes = 0;
62+ in.SetExtBuffer(extbuf);
63+ }
64+
65 umcRes = decoder.DecodeHeader(&in);
66
67 in.Save(bs);
68@@ -770,6 +778,14 @@ mfxStatus VideoDECODEMJPEG::DecodeFrameCheck(mfxBitstream *bs, mfxFrameSurface1
69 MFXMediaDataAdapter src(bs);
70 UMC::MediaDataEx *pSrcData;
71
72+ mfxExtBuffer* extbuf = (bs) ? GetExtendedBuffer(bs->ExtParam, bs->NumExtParam, MFX_EXTBUFF_DECODE_ERROR_REPORT) : NULL;
73+
74+ if (extbuf)
75+ {
76+ reinterpret_cast<mfxExtDecodeErrorReport *>(extbuf)->ErrorTypes = 0;
77+ src.SetExtBuffer(extbuf);
78+ }
79+
80 if (!m_isHeaderFound && bs)
81 {
82 umcRes = pMJPEGVideoDecoder->FindStartOfImage(&src);
83@@ -785,7 +801,8 @@ mfxStatus VideoDECODEMJPEG::DecodeFrameCheck(mfxBitstream *bs, mfxFrameSurface1
84
85 if (!m_isHeaderParsed && bs)
86 {
87- umcRes = pMJPEGVideoDecoder->_GetFrameInfo((uint8_t*)src.GetDataPointer(), src.GetDataSize());
88+ umcRes = pMJPEGVideoDecoder->_GetFrameInfo((uint8_t*)src.GetDataPointer(), src.GetDataSize(), &src);
89+
90 if (umcRes != UMC::UMC_OK)
91 {
92 if(umcRes != UMC::UMC_ERR_NOT_ENOUGH_DATA)
93diff --git a/_studio/shared/umc/codec/jpeg_dec/include/jpegdec.h b/_studio/shared/umc/codec/jpeg_dec/include/jpegdec.h
94index 1e70931284..561e1c2889 100644
95--- a/_studio/shared/umc/codec/jpeg_dec/include/jpegdec.h
96+++ b/_studio/shared/umc/codec/jpeg_dec/include/jpegdec.h
97@@ -27,6 +27,7 @@
98 #include "omp.h"
99 #endif
100 #include "jpegdec_base.h"
101+#include "umc_media_data.h"
102
103 class CBaseStreamInput;
104
105diff --git a/_studio/shared/umc/codec/jpeg_dec/include/jpegdec_base.h b/_studio/shared/umc/codec/jpeg_dec/include/jpegdec_base.h
106index 5e9c139c2c..42647f871c 100644
107--- a/_studio/shared/umc/codec/jpeg_dec/include/jpegdec_base.h
108+++ b/_studio/shared/umc/codec/jpeg_dec/include/jpegdec_base.h
109@@ -29,6 +29,13 @@
110 #include "colorcomp.h"
111 #include "membuffin.h"
112 #include "bitstreamin.h"
113+#include "mfxstructures.h"
114+#include "umc_media_data.h"
115+
116+namespace UMC
117+{
118+ class MediaData;
119+};
120
121 class CJPEGDecoderBase
122 {
123@@ -146,6 +153,18 @@ public:
124 JERRCODE SkipMarker(void);
125
126 JERRCODE DetectSampling(void);
127+
128+ void SetDecodeErrorTypes(void);
129+
130+ void SetDecodeErrorReportParam(UMC::MediaData *in)
131+ {
132+ UMC::MediaData::AuxInfo* aux = (in) ? in->GetAuxInfo(MFX_EXTBUFF_DECODE_ERROR_REPORT) : NULL;
133+ m_pDecodeErrorReport = (aux) ? reinterpret_cast<mfxExtDecodeErrorReport*>(aux->ptr) : NULL;
134+ }
135+
136+protected:
137+ mfxExtDecodeErrorReport* m_pDecodeErrorReport;
138+
139 };
140
141 #endif // MFX_ENABLE_MJPEG_VIDEO_DECODE
142diff --git a/_studio/shared/umc/codec/jpeg_dec/include/umc_mjpeg_mfx_decode.h b/_studio/shared/umc/codec/jpeg_dec/include/umc_mjpeg_mfx_decode.h
143index fbe535cd95..2edd4d57a8 100644
144--- a/_studio/shared/umc/codec/jpeg_dec/include/umc_mjpeg_mfx_decode.h
145+++ b/_studio/shared/umc/codec/jpeg_dec/include/umc_mjpeg_mfx_decode.h
146@@ -94,7 +94,7 @@ public:
147 JCOLOR GetColorType();
148
149 // All memory sizes should come in size_t type
150- Status _GetFrameInfo(const uint8_t* pBitStream, size_t nSize);
151+ Status _GetFrameInfo(const uint8_t* pBitStream, size_t nSize, MediaData *in);
152
153 // Allocate the destination frame
154 Status AllocateFrame() override;
155diff --git a/_studio/shared/umc/codec/jpeg_dec/include/umc_mjpeg_mfx_decode_base.h b/_studio/shared/umc/codec/jpeg_dec/include/umc_mjpeg_mfx_decode_base.h
156index 9cee49e9c1..90ce5888ea 100644
157--- a/_studio/shared/umc/codec/jpeg_dec/include/umc_mjpeg_mfx_decode_base.h
158+++ b/_studio/shared/umc/codec/jpeg_dec/include/umc_mjpeg_mfx_decode_base.h
159@@ -63,7 +63,7 @@ public:
160 // Close decoding & free all allocated resources
161 virtual Status Close(void);
162
163- virtual Status GetFrame(UMC::MediaDataEx *, UMC::FrameData** , const mfxU32 ) { return MFX_ERR_NONE; };
164+ virtual Status GetFrame(UMC::MediaDataEx *, UMC::FrameData** , const mfxU32) { return MFX_ERR_NONE; };
165
166 virtual void SetFrameAllocator(FrameAllocator * frameAllocator);
167
168@@ -79,7 +79,7 @@ public:
169 Status FindStartOfImage(MediaData * in);
170
171 // All memory sizes should come in size_t type
172- Status _GetFrameInfo(const uint8_t* pBitStream, size_t nSize);
173+ Status _GetFrameInfo(const uint8_t* pBitStream, size_t nSize, MediaData *in);
174
175 Status SetRotation(uint16_t rotation);
176
177diff --git a/_studio/shared/umc/codec/jpeg_dec/src/jpegdec.cpp b/_studio/shared/umc/codec/jpeg_dec/src/jpegdec.cpp
178index 127133ae4c..54441dc534 100644
179--- a/_studio/shared/umc/codec/jpeg_dec/src/jpegdec.cpp
180+++ b/_studio/shared/umc/codec/jpeg_dec/src/jpegdec.cpp
181@@ -1120,6 +1120,7 @@ JERRCODE CJPEGDecoder::ParseJPEGBitStream(JOPERATION op)
182 jerr = ParseAPP0();
183 if(JPEG_OK != jerr)
184 {
185+ SetDecodeErrorTypes();
186 return jerr;
187 }
188 break;
189@@ -1128,6 +1129,7 @@ JERRCODE CJPEGDecoder::ParseJPEGBitStream(JOPERATION op)
190 jerr = ParseAPP1();
191 if(JPEG_OK != jerr)
192 {
193+ SetDecodeErrorTypes();
194 return jerr;
195 }
196 break;
197@@ -1136,6 +1138,7 @@ JERRCODE CJPEGDecoder::ParseJPEGBitStream(JOPERATION op)
198 jerr = ParseAPP14();
199 if(JPEG_OK != jerr)
200 {
201+ SetDecodeErrorTypes();
202 return jerr;
203 }
204 break;
205@@ -1152,6 +1155,7 @@ JERRCODE CJPEGDecoder::ParseJPEGBitStream(JOPERATION op)
206 jerr = ParseDQT();
207 if(JPEG_OK != jerr)
208 {
209+ SetDecodeErrorTypes();
210 return jerr;
211 }
212 break;
213@@ -1160,6 +1164,7 @@ JERRCODE CJPEGDecoder::ParseJPEGBitStream(JOPERATION op)
214 jerr = ParseSOF0();
215 if(JPEG_OK != jerr)
216 {
217+ SetDecodeErrorTypes();
218 return jerr;
219 }
220 break;
221@@ -1206,6 +1211,7 @@ JERRCODE CJPEGDecoder::ParseJPEGBitStream(JOPERATION op)
222 jerr = ParseDHT();
223 if(JPEG_OK != jerr)
224 {
225+ SetDecodeErrorTypes();
226 return jerr;
227 }
228 break;
229@@ -1214,6 +1220,7 @@ JERRCODE CJPEGDecoder::ParseJPEGBitStream(JOPERATION op)
230 jerr = ParseDRI();
231 if(JPEG_OK != jerr)
232 {
233+ SetDecodeErrorTypes();
234 return jerr;
235 }
236 break;
237@@ -1222,6 +1229,7 @@ JERRCODE CJPEGDecoder::ParseJPEGBitStream(JOPERATION op)
238 jerr = ParseSOS(op);
239 if(JPEG_OK != jerr)
240 {
241+ SetDecodeErrorTypes();
242 return jerr;
243 }
244
245@@ -1231,7 +1239,10 @@ JERRCODE CJPEGDecoder::ParseJPEGBitStream(JOPERATION op)
246 {
247 jerr = m_BitStreamIn.Seek(-(m_sos_len + 2));
248 if(JPEG_OK != jerr)
249+ {
250+ SetDecodeErrorTypes();
251 return jerr;
252+ }
253 }
254 else
255 {
256@@ -1246,7 +1257,10 @@ JERRCODE CJPEGDecoder::ParseJPEGBitStream(JOPERATION op)
257 {
258 jerr = ParseData();
259 if(JPEG_OK != jerr)
260+ {
261+ SetDecodeErrorTypes();
262 return jerr;
263+ }
264
265 }
266 break;
267@@ -1288,10 +1302,10 @@ JERRCODE CJPEGDecoder::ParseJPEGBitStream(JOPERATION op)
268 default:
269 TRC1("-> Unknown marker ",m_marker);
270 TRC0("..Skipping");
271+ SetDecodeErrorTypes();
272 jerr = SkipMarker();
273 if(JPEG_OK != jerr)
274 return jerr;
275-
276 break;
277 }
278 }
279@@ -4575,7 +4589,6 @@ JERRCODE CJPEGDecoder::ReadHeader(
280 JERRCODE CJPEGDecoder::ReadData(void)
281 {
282 return ParseJPEGBitStream(JO_READ_DATA);
283-
284 } // CJPEGDecoder::ReadData(void)
285
286 JERRCODE CJPEGDecoder::ReadData(uint32_t restartNum, uint32_t restartsToDecode)
287diff --git a/_studio/shared/umc/codec/jpeg_dec/src/jpegdec_base.cpp b/_studio/shared/umc/codec/jpeg_dec/src/jpegdec_base.cpp
288index d6244e827b..4409b51cee 100644
289--- a/_studio/shared/umc/codec/jpeg_dec/src/jpegdec_base.cpp
290+++ b/_studio/shared/umc/codec/jpeg_dec/src/jpegdec_base.cpp
291@@ -282,6 +282,23 @@ JERRCODE CJPEGDecoderBase::DetectSampling(void)
292 return JPEG_OK;
293 } // CJPEGDecoderBase::DetectSampling()
294
295+void CJPEGDecoderBase::SetDecodeErrorTypes(void)
296+{
297+ if (!m_pDecodeErrorReport)
298+ return;
299+
300+ switch (m_marker)
301+ {
302+ case JM_APP0: m_pDecodeErrorReport->ErrorTypes |= MFX_ERROR_JPEG_APP0_MARKER; break;
303+ case JM_APP14: m_pDecodeErrorReport->ErrorTypes |= MFX_ERROR_JPEG_APP14_MARKER; break;
304+ case JM_DQT: m_pDecodeErrorReport->ErrorTypes |= MFX_ERROR_JPEG_DQT_MARKER; break;
305+ case JM_SOF0: m_pDecodeErrorReport->ErrorTypes |= MFX_ERROR_JPEG_SOF0_MARKER; break;
306+ case JM_DHT: m_pDecodeErrorReport->ErrorTypes |= MFX_ERROR_JPEG_DHT_MARKER; break;
307+ case JM_DRI: m_pDecodeErrorReport->ErrorTypes |= MFX_ERROR_JPEG_DRI_MARKER; break;
308+ case JM_SOS: m_pDecodeErrorReport->ErrorTypes |= MFX_ERROR_JPEG_SOS_MARKER; break;
309+ default: m_pDecodeErrorReport->ErrorTypes |= MFX_ERROR_JPEG_UNKNOWN_MARKER; break;
310+ };
311+}
312
313 JERRCODE CJPEGDecoderBase::NextMarker(JMARKER* marker)
314 {
315@@ -1265,6 +1282,7 @@ JERRCODE CJPEGDecoderBase::ParseJPEGBitStream(JOPERATION op)
316 jerr = ParseAPP0();
317 if(JPEG_OK != jerr)
318 {
319+ SetDecodeErrorTypes();
320 return jerr;
321 }
322 break;
323@@ -1273,6 +1291,7 @@ JERRCODE CJPEGDecoderBase::ParseJPEGBitStream(JOPERATION op)
324 jerr = ParseAPP14();
325 if(JPEG_OK != jerr)
326 {
327+ SetDecodeErrorTypes();
328 return jerr;
329 }
330 break;
331@@ -1281,6 +1300,7 @@ JERRCODE CJPEGDecoderBase::ParseJPEGBitStream(JOPERATION op)
332 jerr = ParseDQT();
333 if(JPEG_OK != jerr)
334 {
335+ SetDecodeErrorTypes();
336 return jerr;
337 }
338 break;
339@@ -1289,6 +1309,7 @@ JERRCODE CJPEGDecoderBase::ParseJPEGBitStream(JOPERATION op)
340 jerr = ParseSOF0();
341 if(JPEG_OK != jerr)
342 {
343+ SetDecodeErrorTypes();
344 return jerr;
345 }
346 break;
347@@ -1311,6 +1332,7 @@ JERRCODE CJPEGDecoderBase::ParseJPEGBitStream(JOPERATION op)
348 jerr = ParseDHT();
349 if(JPEG_OK != jerr)
350 {
351+ SetDecodeErrorTypes();
352 return jerr;
353 }
354 break;
355@@ -1319,6 +1341,7 @@ JERRCODE CJPEGDecoderBase::ParseJPEGBitStream(JOPERATION op)
356 jerr = ParseDRI();
357 if(JPEG_OK != jerr)
358 {
359+ SetDecodeErrorTypes();
360 return jerr;
361 }
362 break;
363@@ -1327,6 +1350,7 @@ JERRCODE CJPEGDecoderBase::ParseJPEGBitStream(JOPERATION op)
364 jerr = ParseSOS(op);
365 if(JPEG_OK != jerr)
366 {
367+ SetDecodeErrorTypes();
368 return jerr;
369 }
370
371@@ -1336,7 +1360,10 @@ JERRCODE CJPEGDecoderBase::ParseJPEGBitStream(JOPERATION op)
372 {
373 jerr = m_BitStreamIn.Seek(-(m_sos_len + 2));
374 if(JPEG_OK != jerr)
375+ {
376+ SetDecodeErrorTypes();
377 return jerr;
378+ }
379 }
380 else
381 {
382@@ -1355,10 +1382,10 @@ JERRCODE CJPEGDecoderBase::ParseJPEGBitStream(JOPERATION op)
383 default:
384 TRC1("-> Unknown marker ",m_marker);
385 TRC0("..Skipping");
386+ SetDecodeErrorTypes();
387 jerr = SkipMarker();
388 if(JPEG_OK != jerr)
389 return jerr;
390-
391 break;
392 }
393 }
394diff --git a/_studio/shared/umc/codec/jpeg_dec/src/umc_mjpeg_mfx_decode.cpp b/_studio/shared/umc/codec/jpeg_dec/src/umc_mjpeg_mfx_decode.cpp
395index 01a513e883..0ffcfaf7ab 100644
396--- a/_studio/shared/umc/codec/jpeg_dec/src/umc_mjpeg_mfx_decode.cpp
397+++ b/_studio/shared/umc/codec/jpeg_dec/src/umc_mjpeg_mfx_decode.cpp
398@@ -378,7 +378,7 @@ Status MJPEGVideoDecoderMFX::DecodeHeader(MediaData* in)
399 }
400 }
401
402- Status sts = _GetFrameInfo((uint8_t*)in->GetDataPointer(), in->GetDataSize());
403+ Status sts = _GetFrameInfo((uint8_t*)in->GetDataPointer(), in->GetDataSize(), in);
404
405 if (sts == UMC_ERR_NOT_ENOUGH_DATA &&
406 (!(in->GetFlags() & MediaData::FLAG_VIDEO_DATA_NOT_FULL_FRAME) ||
407@@ -937,7 +937,7 @@ Status MJPEGVideoDecoderMFX::PostProcessing(double pts)
408 return UMC_OK;
409 }
410
411-Status MJPEGVideoDecoderMFX::_GetFrameInfo(const uint8_t* pBitStream, size_t nSize)
412+Status MJPEGVideoDecoderMFX::_GetFrameInfo(const uint8_t* pBitStream, size_t nSize, MediaData *in)
413 {
414 int32_t nchannels;
415 int32_t precision;
416@@ -945,6 +945,8 @@ Status MJPEGVideoDecoderMFX::_GetFrameInfo(const uint8_t* pBitStream, size_t nSi
417 JCOLOR color;
418 JERRCODE jerr;
419
420+ m_dec[0]->SetDecodeErrorReportParam(in);
421+
422 if (!m_IsInit)
423 return UMC_ERR_NOT_INITIALIZED;
424
425diff --git a/_studio/shared/umc/codec/jpeg_dec/src/umc_mjpeg_mfx_decode_base.cpp b/_studio/shared/umc/codec/jpeg_dec/src/umc_mjpeg_mfx_decode_base.cpp
426index 06fd1a681b..3150492ab2 100644
427--- a/_studio/shared/umc/codec/jpeg_dec/src/umc_mjpeg_mfx_decode_base.cpp
428+++ b/_studio/shared/umc/codec/jpeg_dec/src/umc_mjpeg_mfx_decode_base.cpp
429@@ -322,7 +322,7 @@ Status MJPEGVideoDecoderBaseMFX::DecodeHeader(MediaData* in)
430 }
431 }
432
433- Status sts = _GetFrameInfo((uint8_t*)in->GetDataPointer(), in->GetDataSize());
434+ Status sts = _GetFrameInfo((uint8_t*)in->GetDataPointer(), in->GetDataSize(), in);
435
436 if (sts == UMC_ERR_NOT_ENOUGH_DATA &&
437 (!(in->GetFlags() & MediaData::FLAG_VIDEO_DATA_NOT_FULL_FRAME) ||
438@@ -345,7 +345,7 @@ Status MJPEGVideoDecoderBaseMFX::SetRotation(uint16_t rotation)
439 return UMC_OK;
440 }
441
442-Status MJPEGVideoDecoderBaseMFX::_GetFrameInfo(const uint8_t* pBitStream, size_t nSize)
443+Status MJPEGVideoDecoderBaseMFX::_GetFrameInfo(const uint8_t* pBitStream, size_t nSize, MediaData *in)
444 {
445 int32_t nchannels;
446 int32_t precision;
447@@ -353,6 +353,8 @@ Status MJPEGVideoDecoderBaseMFX::_GetFrameInfo(const uint8_t* pBitStream, size_t
448 JCOLOR color;
449 JERRCODE jerr;
450
451+ m_decBase->SetDecodeErrorReportParam(in);
452+
453 if (!m_IsInit)
454 return UMC_ERR_NOT_INITIALIZED;
455
456diff --git a/api/vpl/mfxstructures.h b/api/vpl/mfxstructures.h
457index 879a431602..1bfdaf68c2 100644
458--- a/api/vpl/mfxstructures.h
459+++ b/api/vpl/mfxstructures.h
460@@ -3520,12 +3520,33 @@ MFX_PACK_END()
461
462 /*! The ErrorTypes enumerator uses bit-ORed values to itemize bitstream error types. */
463 enum {
464- MFX_ERROR_NO = 0, /*!< No error in bitstream. */
465- MFX_ERROR_PPS = (1 << 0), /*!< Invalid/corrupted PPS. */
466- MFX_ERROR_SPS = (1 << 1), /*!< Invalid/corrupted SPS. */
467- MFX_ERROR_SLICEHEADER = (1 << 2), /*!< Invalid/corrupted slice header. */
468- MFX_ERROR_SLICEDATA = (1 << 3), /*!< Invalid/corrupted slice data. */
469- MFX_ERROR_FRAME_GAP = (1 << 4), /*!< Missed frames. */
470+ MFX_ERROR_NO = 0, /*!< No error in bitstream. */
471+ MFX_ERROR_PPS = (1 << 0), /*!< Invalid/corrupted PPS. */
472+ MFX_ERROR_SPS = (1 << 1), /*!< Invalid/corrupted SPS. */
473+ MFX_ERROR_SLICEHEADER = (1 << 2), /*!< Invalid/corrupted slice header. */
474+ MFX_ERROR_SLICEDATA = (1 << 3), /*!< Invalid/corrupted slice data. */
475+ MFX_ERROR_FRAME_GAP = (1 << 4), /*!< Missed frames. */
476+ MFX_ERROR_JPEG_APP0_MARKER = (1 << 5), /*!< Invalid/corrupted APP0 marker. */
477+ MFX_ERROR_JPEG_APP1_MARKER = (1 << 6), /*!< Invalid/corrupted APP1 marker. */
478+ MFX_ERROR_JPEG_APP2_MARKER = (1 << 7), /*!< Invalid/corrupted APP2 marker. */
479+ MFX_ERROR_JPEG_APP3_MARKER = (1 << 8), /*!< Invalid/corrupted APP3 marker. */
480+ MFX_ERROR_JPEG_APP4_MARKER = (1 << 9), /*!< Invalid/corrupted APP4 marker. */
481+ MFX_ERROR_JPEG_APP5_MARKER = (1 << 10), /*!< Invalid/corrupted APP5 marker. */
482+ MFX_ERROR_JPEG_APP6_MARKER = (1 << 11), /*!< Invalid/corrupted APP6 marker. */
483+ MFX_ERROR_JPEG_APP7_MARKER = (1 << 12), /*!< Invalid/corrupted APP7 marker. */
484+ MFX_ERROR_JPEG_APP8_MARKER = (1 << 13), /*!< Invalid/corrupted APP8 marker. */
485+ MFX_ERROR_JPEG_APP9_MARKER = (1 << 14), /*!< Invalid/corrupted APP9 marker. */
486+ MFX_ERROR_JPEG_APP10_MARKER = (1 << 15), /*!< Invalid/corrupted APP10 marker. */
487+ MFX_ERROR_JPEG_APP11_MARKER = (1 << 16), /*!< Invalid/corrupted APP11 marker. */
488+ MFX_ERROR_JPEG_APP12_MARKER = (1 << 17), /*!< Invalid/corrupted APP12 marker. */
489+ MFX_ERROR_JPEG_APP13_MARKER = (1 << 18), /*!< Invalid/corrupted APP13 marker. */
490+ MFX_ERROR_JPEG_APP14_MARKER = (1 << 19), /*!< Invalid/corrupted APP14 marker. */
491+ MFX_ERROR_JPEG_DQT_MARKER = (1 << 20), /*!< Invalid/corrupted DQT marker. */
492+ MFX_ERROR_JPEG_SOF0_MARKER = (1 << 21), /*!< Invalid/corrupted SOF0 marker. */
493+ MFX_ERROR_JPEG_DHT_MARKER = (1 << 22), /*!< Invalid/corrupted DHT marker. */
494+ MFX_ERROR_JPEG_DRI_MARKER = (1 << 23), /*!< Invalid/corrupted DRI marker. */
495+ MFX_ERROR_JPEG_SOS_MARKER = (1 << 24), /*!< Invalid/corrupted SOS marker. */
496+ MFX_ERROR_JPEG_UNKNOWN_MARKER = (1 << 25), /*!< Unknown Marker. */
497 };
498
499 MFX_PACK_BEGIN_USUAL_STRUCT()
500--
5012.33.0
502
diff --git a/recipes-multimedia/onevpl/onevpl-intel-gpu_21.3.4.bb b/recipes-multimedia/onevpl/onevpl-intel-gpu_21.3.4.bb
deleted file mode 100644
index 1fc4c4b2..00000000
--- a/recipes-multimedia/onevpl/onevpl-intel-gpu_21.3.4.bb
+++ /dev/null
@@ -1,29 +0,0 @@
1SUMMARY = "Intel(R) oneVPL runtime for Intel GPU accelerated media processing"
2DESCRIPTION = "Intel(R) oneVPL runtime provides an runtime to access hardware-accelerated \
3video decode, encode and filtering on Intel® graphics."
4
5HOMEPAGE = "https://github.com/oneapi-src/oneVPL-intel-gpu"
6BUGTRACKER = "https://github.com/oneapi-src/oneVPL-intel-gpu/issues"
7
8LICENSE = "MIT"
9LIC_FILES_CHKSUM = "file://LICENSE;md5=eb8cb45b9b57dbaa9fcc9adc4230202b"
10
11PE = "1"
12
13# Only for 64 bit
14COMPATIBLE_HOST = '(x86_64).*-linux'
15COMPATIBLE_HOST:x86-x32 = "null"
16
17DEPENDS += "libdrm libva intel-media-driver onevpl pkgconfig-native"
18
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 \
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 \
24 "
25
26SRCREV = "51608c724044802cc060b7969084126a3e90ca4a"
27S = "${WORKDIR}/git"
28
29inherit cmake
diff --git a/recipes-multimedia/onevpl/onevpl/0001-Extends-errorTypes-to-support-JPEG-errors.patch b/recipes-multimedia/onevpl/onevpl/0001-Extends-errorTypes-to-support-JPEG-errors.patch
deleted file mode 100644
index 063dd3fb..00000000
--- a/recipes-multimedia/onevpl/onevpl/0001-Extends-errorTypes-to-support-JPEG-errors.patch
+++ /dev/null
@@ -1,59 +0,0 @@
1From acdab0d47785f61aa06c1f0955450bf1574f202c Mon Sep 17 00:00:00 2001
2From: Vincent Cheah Beng Keat <vincent.beng.keat.cheah@intel.com>
3Date: Tue, 28 Sep 2021 03:06:40 +0000
4Subject: [PATCH] Extends errorTypes to support JPEG errors
5
6Upstream-Status: Submitted
7innersource PR #251
8
9---
10 api/vpl/mfxstructures.h | 33 +++++++++++++++++++++++++++------
11 1 file changed, 27 insertions(+), 6 deletions(-)
12
13diff --git a/api/vpl/mfxstructures.h b/api/vpl/mfxstructures.h
14index 9c8dd2b1..a9ccb4ae 100644
15--- a/api/vpl/mfxstructures.h
16+++ b/api/vpl/mfxstructures.h
17@@ -3546,12 +3546,33 @@ MFX_PACK_END()
18
19 /*! The ErrorTypes enumerator uses bit-ORed values to itemize bitstream error types. */
20 enum {
21- MFX_ERROR_NO = 0, /*!< No error in bitstream. */
22- MFX_ERROR_PPS = (1 << 0), /*!< Invalid/corrupted PPS. */
23- MFX_ERROR_SPS = (1 << 1), /*!< Invalid/corrupted SPS. */
24- MFX_ERROR_SLICEHEADER = (1 << 2), /*!< Invalid/corrupted slice header. */
25- MFX_ERROR_SLICEDATA = (1 << 3), /*!< Invalid/corrupted slice data. */
26- MFX_ERROR_FRAME_GAP = (1 << 4), /*!< Missed frames. */
27+ MFX_ERROR_NO = 0, /*!< No error in bitstream. */
28+ MFX_ERROR_PPS = (1 << 0), /*!< Invalid/corrupted PPS. */
29+ MFX_ERROR_SPS = (1 << 1), /*!< Invalid/corrupted SPS. */
30+ MFX_ERROR_SLICEHEADER = (1 << 2), /*!< Invalid/corrupted slice header. */
31+ MFX_ERROR_SLICEDATA = (1 << 3), /*!< Invalid/corrupted slice data. */
32+ MFX_ERROR_FRAME_GAP = (1 << 4), /*!< Missed frames. */
33+ MFX_ERROR_JPEG_APP0_MARKER = (1 << 5), /*!< Invalid/corrupted APP0 marker. */
34+ MFX_ERROR_JPEG_APP1_MARKER = (1 << 6), /*!< Invalid/corrupted APP1 marker. */
35+ MFX_ERROR_JPEG_APP2_MARKER = (1 << 7), /*!< Invalid/corrupted APP2 marker. */
36+ MFX_ERROR_JPEG_APP3_MARKER = (1 << 8), /*!< Invalid/corrupted APP3 marker. */
37+ MFX_ERROR_JPEG_APP4_MARKER = (1 << 9), /*!< Invalid/corrupted APP4 marker. */
38+ MFX_ERROR_JPEG_APP5_MARKER = (1 << 10), /*!< Invalid/corrupted APP5 marker. */
39+ MFX_ERROR_JPEG_APP6_MARKER = (1 << 11), /*!< Invalid/corrupted APP6 marker. */
40+ MFX_ERROR_JPEG_APP7_MARKER = (1 << 12), /*!< Invalid/corrupted APP7 marker. */
41+ MFX_ERROR_JPEG_APP8_MARKER = (1 << 13), /*!< Invalid/corrupted APP8 marker. */
42+ MFX_ERROR_JPEG_APP9_MARKER = (1 << 14), /*!< Invalid/corrupted APP9 marker. */
43+ MFX_ERROR_JPEG_APP10_MARKER = (1 << 15), /*!< Invalid/corrupted APP10 marker. */
44+ MFX_ERROR_JPEG_APP11_MARKER = (1 << 16), /*!< Invalid/corrupted APP11 marker. */
45+ MFX_ERROR_JPEG_APP12_MARKER = (1 << 17), /*!< Invalid/corrupted APP12 marker. */
46+ MFX_ERROR_JPEG_APP13_MARKER = (1 << 18), /*!< Invalid/corrupted APP13 marker. */
47+ MFX_ERROR_JPEG_APP14_MARKER = (1 << 19), /*!< Invalid/corrupted APP14 marker. */
48+ MFX_ERROR_JPEG_DQT_MARKER = (1 << 20), /*!< Invalid/corrupted DQT marker. */
49+ MFX_ERROR_JPEG_SOF0_MARKER = (1 << 21), /*!< Invalid/corrupted SOF0 marker. */
50+ MFX_ERROR_JPEG_DHT_MARKER = (1 << 22), /*!< Invalid/corrupted DHT marker. */
51+ MFX_ERROR_JPEG_DRI_MARKER = (1 << 23), /*!< Invalid/corrupted DRI marker. */
52+ MFX_ERROR_JPEG_SOS_MARKER = (1 << 24), /*!< Invalid/corrupted SOS marker. */
53+ MFX_ERROR_JPEG_UNKNOWN_MARKER = (1 << 25), /*!< Unknown Marker. */
54 };
55
56 MFX_PACK_BEGIN_USUAL_STRUCT()
57--
582.33.0
59
diff --git a/recipes-multimedia/onevpl/onevpl/0001-Fix-basename-build-issue-with-musl_libc.patch b/recipes-multimedia/onevpl/onevpl/0001-Fix-basename-build-issue-with-musl_libc.patch
deleted file mode 100644
index 93e5ed0d..00000000
--- a/recipes-multimedia/onevpl/onevpl/0001-Fix-basename-build-issue-with-musl_libc.patch
+++ /dev/null
@@ -1,37 +0,0 @@
1From d16afe9f9302e4995f12d699019eba170bb6db21 Mon Sep 17 00:00:00 2001
2From: "Yew, Chang Ching" <chang.ching.yew@intel.com>
3Date: Fri, 8 Oct 2021 08:45:39 +0800
4Subject: [PATCH] Fix basename() build issue with musl_libc
5
6Upstream-Status: Submitted
7innersource PR #264
8
9Signed-off-by: Yew, Chang Ching <chang.ching.yew@intel.com>
10---
11 tools/legacy/sample_common/src/vaapi_utils.cpp | 3 ++-
12 1 file changed, 2 insertions(+), 1 deletion(-)
13
14diff --git a/tools/legacy/sample_common/src/vaapi_utils.cpp b/tools/legacy/sample_common/src/vaapi_utils.cpp
15index b69dbe44..9382535a 100644
16--- a/tools/legacy/sample_common/src/vaapi_utils.cpp
17+++ b/tools/legacy/sample_common/src/vaapi_utils.cpp
18@@ -7,6 +7,7 @@
19 #ifdef LIBVA_SUPPORT
20
21 #include "vaapi_utils.h"
22+ #include <libgen.h>
23 #include <dlfcn.h>
24 #include <stdexcept>
25
26@@ -26,7 +27,7 @@ SimpleLoader::SimpleLoader(const char* name) {
27 dlerror();
28 so_handle = dlopen(name, RTLD_GLOBAL | RTLD_NOW);
29 if (NULL == so_handle) {
30- so_handle = dlopen(basename(name), RTLD_GLOBAL | RTLD_NOW);
31+ so_handle = dlopen(basename((char *)name), RTLD_GLOBAL | RTLD_NOW);
32 if (NULL == so_handle) {
33 std::cerr << dlerror() << std::endl;
34 throw std::runtime_error("Can't load library");
35--
362.33.0
37
diff --git a/recipes-multimedia/onevpl/onevpl/0001-sample_decode-Add-VDSFC-CSC-for-AVC-HEVC.patch b/recipes-multimedia/onevpl/onevpl/0001-sample_decode-Add-VDSFC-CSC-for-AVC-HEVC.patch
deleted file mode 100644
index db8baa3e..00000000
--- a/recipes-multimedia/onevpl/onevpl/0001-sample_decode-Add-VDSFC-CSC-for-AVC-HEVC.patch
+++ /dev/null
@@ -1,132 +0,0 @@
1From f8d87fc857d5bfd69247c985ed82ba88e167ef30 Mon Sep 17 00:00:00 2001
2From: "Yew, Chang Ching" <chang.ching.yew@intel.com>
3Date: Fri, 9 Jul 2021 13:59:33 +0000
4Subject: [PATCH] sample_decode: Add VDSFC CSC for AVC/HEVC
5
6Upstream-Status: Submitted
7innersource PR #289
8
9Signed-off-by: Yew, Chang Ching <chang.ching.yew@intel.com>
10---
11 .../sample_decode/src/pipeline_decode.cpp | 84 +++++++++++++++++--
12 1 file changed, 77 insertions(+), 7 deletions(-)
13
14diff --git a/tools/legacy/sample_decode/src/pipeline_decode.cpp b/tools/legacy/sample_decode/src/pipeline_decode.cpp
15index 4dc811c5..d817ff2a 100644
16--- a/tools/legacy/sample_decode/src/pipeline_decode.cpp
17+++ b/tools/legacy/sample_decode/src/pipeline_decode.cpp
18@@ -765,6 +765,14 @@ bool CDecodingPipeline::IsVppRequired(sInputParams* pParams) {
19 if (pParams->eDeinterlace) {
20 bVppIsUsed = true;
21 }
22+
23+ if ((MODE_DECODER_POSTPROC_AUTO == pParams->nDecoderPostProcessing) ||
24+ (MODE_DECODER_POSTPROC_FORCE == pParams->nDecoderPostProcessing)) {
25+ /* Decoder will make decision about internal post-processing usage slightly later */
26+ if ((pParams->videoType == MFX_CODEC_AVC) || (pParams->videoType == MFX_CODEC_HEVC))
27+ bVppIsUsed = false;
28+ }
29+
30 return bVppIsUsed;
31 }
32
33@@ -1014,6 +1022,8 @@ mfxStatus CDecodingPipeline::InitMfxParams(sInputParams* pParams) {
34 if (!m_bVppIsUsed) {
35 if ((m_mfxVideoParams.mfx.FrameInfo.CropW != pParams->Width && pParams->Width) ||
36 (m_mfxVideoParams.mfx.FrameInfo.CropH != pParams->Height && pParams->Height) ||
37+ (pParams->nDecoderPostProcessing && pParams->videoType == MFX_CODEC_AVC) ||
38+ (pParams->nDecoderPostProcessing && pParams->videoType == MFX_CODEC_HEVC) ||
39 (pParams->nDecoderPostProcessing && pParams->videoType == MFX_CODEC_JPEG &&
40 pParams->fourcc == MFX_FOURCC_RGB4 &&
41 // No need to use decoder's post processing for decoding of JPEG with RGB 4:4:4
42@@ -1027,7 +1037,10 @@ mfxStatus CDecodingPipeline::InitMfxParams(sInputParams* pParams) {
43 if (((MODE_DECODER_POSTPROC_AUTO == pParams->nDecoderPostProcessing) ||
44 (MODE_DECODER_POSTPROC_FORCE == pParams->nDecoderPostProcessing)) &&
45 (MFX_CODEC_AVC == m_mfxVideoParams.mfx.CodecId ||
46- MFX_CODEC_JPEG == m_mfxVideoParams.mfx.CodecId) && /* Only for AVC and JPEG */
47+ MFX_CODEC_JPEG == m_mfxVideoParams.mfx.CodecId ||
48+ MFX_CODEC_HEVC == m_mfxVideoParams.mfx.CodecId ||
49+ MFX_CODEC_VP9 == m_mfxVideoParams.mfx.CodecId ||
50+ MFX_CODEC_AV1 == m_mfxVideoParams.mfx.CodecId) &&
51 (MFX_PICSTRUCT_PROGRESSIVE ==
52 m_mfxVideoParams.mfx.FrameInfo.PicStruct)) /* ...And only for progressive!*/
53 { /* it is possible to use decoder's post-processing */
54@@ -1050,12 +1063,69 @@ mfxStatus CDecodingPipeline::InitMfxParams(sInputParams* pParams) {
55
56 decPostProcessing->Out.FourCC = m_mfxVideoParams.mfx.FrameInfo.FourCC;
57 decPostProcessing->Out.ChromaFormat = m_mfxVideoParams.mfx.FrameInfo.ChromaFormat;
58- decPostProcessing->Out.Width = MSDK_ALIGN16(pParams->Width);
59- decPostProcessing->Out.Height = MSDK_ALIGN16(pParams->Height);
60- decPostProcessing->Out.CropX = 0;
61- decPostProcessing->Out.CropY = 0;
62- decPostProcessing->Out.CropW = pParams->Width;
63- decPostProcessing->Out.CropH = pParams->Height;
64+
65+ if (pParams->videoType == MFX_CODEC_AVC || pParams->videoType == MFX_CODEC_HEVC) {
66+ switch (pParams->fourcc) {
67+ case MFX_FOURCC_RGB4:
68+ decPostProcessing->Out.FourCC = MFX_FOURCC_RGB4;
69+ decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV444;
70+ break;
71+
72+ case MFX_FOURCC_NV12:
73+ decPostProcessing->Out.FourCC = MFX_FOURCC_NV12;
74+ decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
75+ break;
76+
77+ case MFX_FOURCC_P010:
78+ decPostProcessing->Out.FourCC = MFX_FOURCC_P010;
79+ decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
80+ break;
81+
82+ case MFX_FOURCC_P016:
83+ decPostProcessing->Out.FourCC = MFX_FOURCC_P016;
84+ decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV420;
85+ break;
86+
87+ case MFX_FOURCC_YUY2:
88+ decPostProcessing->Out.FourCC = MFX_FOURCC_YUY2;
89+ decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV422;
90+ break;
91+
92+ case MFX_FOURCC_Y210:
93+ decPostProcessing->Out.FourCC = MFX_FOURCC_Y210;
94+ decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV422;
95+ break;
96+
97+ case MFX_FOURCC_Y216:
98+ decPostProcessing->Out.FourCC = MFX_FOURCC_Y216;
99+ decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV422;
100+ break;
101+
102+ case MFX_FOURCC_AYUV:
103+ decPostProcessing->Out.FourCC = MFX_FOURCC_AYUV;
104+ decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV444;
105+ break;
106+
107+ case MFX_FOURCC_Y410:
108+ decPostProcessing->Out.FourCC = MFX_FOURCC_Y410;
109+ decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV444;
110+ break;
111+
112+ case MFX_FOURCC_Y416:
113+ decPostProcessing->Out.FourCC = MFX_FOURCC_Y416;
114+ decPostProcessing->Out.ChromaFormat = MFX_CHROMAFORMAT_YUV444;
115+ break;
116+
117+ default:
118+ break;
119+ }
120+ }
121+ decPostProcessing->Out.Width = MSDK_ALIGN16(pParams->Width);
122+ decPostProcessing->Out.Height = MSDK_ALIGN16(pParams->Height);
123+ decPostProcessing->Out.CropX = 0;
124+ decPostProcessing->Out.CropY = 0;
125+ decPostProcessing->Out.CropW = pParams->Width;
126+ decPostProcessing->Out.CropH = pParams->Height;
127
128 msdk_printf(MSDK_STRING("Decoder's post-processing is used for resizing\n"));
129 }
130--
1312.33.1
132
diff --git a/recipes-multimedia/onevpl/onevpl/0001-sample_misc-Addin-basic-wayland-dmabuf-support.patch b/recipes-multimedia/onevpl/onevpl/0001-sample_misc-Addin-basic-wayland-dmabuf-support.patch
deleted file mode 100644
index 96110ef8..00000000
--- a/recipes-multimedia/onevpl/onevpl/0001-sample_misc-Addin-basic-wayland-dmabuf-support.patch
+++ /dev/null
@@ -1,90 +0,0 @@
1From 2e2bcb1817f2dc91adf85f5255a4792a6213a74e Mon Sep 17 00:00:00 2001
2From: "Ung, Teng En" <teng.en.ung@intel.com>
3Date: Fri, 8 Oct 2021 14:19:40 +0000
4Subject: [PATCH 2/3] sample_misc: Addin basic wayland dmabuf support.
5
6Upstream-Status: Submitted
7innersource PR #269
8
9---
10 .../sample_misc/wayland/include/class_wayland.h | 16 ++++++++++++++++
11 .../sample_misc/wayland/src/class_wayland.cpp | 8 ++++++++
12 2 files changed, 24 insertions(+)
13
14diff --git a/tools/legacy/sample_misc/wayland/include/class_wayland.h b/tools/legacy/sample_misc/wayland/include/class_wayland.h
15index 564b9b8b..e5267ec2 100644
16--- a/tools/legacy/sample_misc/wayland/include/class_wayland.h
17+++ b/tools/legacy/sample_misc/wayland/include/class_wayland.h
18@@ -32,6 +32,9 @@ extern "C" {
19 #include "sample_defs.h"
20 #include "vpl/mfxstructures.h"
21 #include "wayland-drm-client-protocol.h"
22+#if defined(WAYLAND_LINUX_DMABUF_SUPPORT)
23+ #include "linux-dmabuf-unstable-v1.h"
24+#endif
25
26 typedef struct buffer wld_buffer;
27
28@@ -93,6 +96,11 @@ public:
29 struct wl_drm* GetDrm() {
30 return m_drm;
31 }
32+#if defined(WAYLAND_LINUX_DMABUF_SUPPORT)
33+ struct zwp_linux_dmabuf_v1* GetDMABuf() {
34+ return m_dmabuf;
35+ }
36+#endif
37 struct wl_shm* GetShm() {
38 return m_shm;
39 };
40@@ -120,6 +128,11 @@ public:
41 void SetDrm(struct wl_drm* drm) {
42 m_drm = drm;
43 }
44+#if defined(WAYLAND_LINUX_DMABUF_SUPPORT)
45+ void SetDMABuf(struct zwp_linux_dmabuf_v1* dmabuf) {
46+ m_dmabuf = dmabuf;
47+ }
48+#endif
49 void DrmHandleDevice(const char* device);
50 void DrmHandleAuthenticated();
51 void RegistryGlobal(struct wl_registry* registry,
52@@ -147,6 +160,9 @@ private:
53 struct wl_compositor* m_compositor;
54 struct wl_shell* m_shell;
55 struct wl_drm* m_drm;
56+#if defined(WAYLAND_LINUX_DMABUF_SUPPORT)
57+ struct zwp_linux_dmabuf_v1* m_dmabuf;
58+#endif
59 struct wl_shm* m_shm;
60 struct wl_shm_pool* m_pool;
61 struct wl_surface* m_surface;
62diff --git a/tools/legacy/sample_misc/wayland/src/class_wayland.cpp b/tools/legacy/sample_misc/wayland/src/class_wayland.cpp
63index 65147973..dc2fc718 100644
64--- a/tools/legacy/sample_misc/wayland/src/class_wayland.cpp
65+++ b/tools/legacy/sample_misc/wayland/src/class_wayland.cpp
66@@ -50,6 +50,9 @@ Wayland::Wayland()
67 m_compositor(NULL),
68 m_shell(NULL),
69 m_drm(NULL),
70+#if defined(WAYLAND_LINUX_DMABUF_SUPPORT)
71+ m_dmabuf(NULL),
72+#endif
73 m_shm(NULL),
74 m_pool(NULL),
75 m_surface(NULL),
76@@ -360,6 +363,11 @@ void Wayland::RegistryGlobal(struct wl_registry* registry,
77 m_drm = static_cast<wl_drm*>(wl_registry_bind(registry, name, &wl_drm_interface, 2));
78 wl_drm_add_listener(m_drm, &drm_listener, this);
79 }
80+#if defined(WAYLAND_LINUX_DMABUF_SUPPORT)
81+ else if(0 == strcmp(interface, "zwp_linux_dmabuf_v1"))
82+ m_dmabuf = static_cast<zwp_linux_dmabuf_v1*>(
83+ wl_registry_bind(registry, name, &zwp_linux_dmabuf_v1_interface, version));
84+#endif
85 }
86
87 void Wayland::DrmHandleDevice(const char* name) {
88--
892.31.1
90
diff --git a/recipes-multimedia/onevpl/onevpl/0001-sample_misc-use-wayland-dmabuf-to-render-nv12.patch b/recipes-multimedia/onevpl/onevpl/0001-sample_misc-use-wayland-dmabuf-to-render-nv12.patch
deleted file mode 100644
index d061e3ef..00000000
--- a/recipes-multimedia/onevpl/onevpl/0001-sample_misc-use-wayland-dmabuf-to-render-nv12.patch
+++ /dev/null
@@ -1,94 +0,0 @@
1From 0091d3fea76e64ffbd537b2ae47b8912c89c09d7 Mon Sep 17 00:00:00 2001
2From: "Ung, Teng En" <teng.en.ung@intel.com>
3Date: Fri, 8 Oct 2021 14:38:45 +0000
4Subject: [PATCH 3/3] sample_misc: use wayland dmabuf to render nv12
5
6Upstream-Status: Submitted
7innersource PR #269
8
9---
10 .../sample_misc/wayland/src/class_wayland.cpp | 60 +++++++++++++++----
11 1 file changed, 47 insertions(+), 13 deletions(-)
12
13diff --git a/tools/legacy/sample_misc/wayland/src/class_wayland.cpp b/tools/legacy/sample_misc/wayland/src/class_wayland.cpp
14index dc2fc718..d2e7e4e2 100644
15--- a/tools/legacy/sample_misc/wayland/src/class_wayland.cpp
16+++ b/tools/legacy/sample_misc/wayland/src/class_wayland.cpp
17@@ -26,6 +26,7 @@ or https://software.intel.com/en-us/media-client-solutions-support.
18 #include <iostream>
19 extern "C" {
20 #include <drm.h>
21+#include <drm_fourcc.h>
22 #include <intel_bufmgr.h>
23 #include <xf86drm.h>
24 }
25@@ -305,20 +306,53 @@ struct wl_buffer* Wayland::CreatePrimeBuffer(uint32_t name,
26 int32_t offsets[3],
27 int32_t pitches[3]) {
28 struct wl_buffer* buffer = NULL;
29- if (NULL == m_drm)
30- return NULL;
31
32- buffer = wl_drm_create_prime_buffer(m_drm,
33- name,
34- width,
35- height,
36- format,
37- offsets[0],
38- pitches[0],
39- offsets[1],
40- pitches[1],
41- offsets[2],
42- pitches[2]);
43+#if defined(WAYLAND_LINUX_DMABUF_SUPPORT)
44+ if (format == WL_DRM_FORMAT_NV12) {
45+ if(NULL == m_dmabuf)
46+ return NULL;
47+
48+ struct zwp_linux_buffer_params_v1 *dmabuf_params = NULL;
49+ int i = 0;
50+ uint64_t modifier = I915_FORMAT_MOD_Y_TILED;
51+
52+ dmabuf_params = zwp_linux_dmabuf_v1_create_params(m_dmabuf);
53+ for(i = 0; i < 2; i++) {
54+ zwp_linux_buffer_params_v1_add(dmabuf_params,
55+ name,
56+ i,
57+ offsets[i],
58+ pitches[i],
59+ modifier >> 32,
60+ modifier & 0xffffffff);
61+ }
62+
63+ buffer = zwp_linux_buffer_params_v1_create_immed(dmabuf_params,
64+ width,
65+ height,
66+ format,
67+ 0);
68+
69+ zwp_linux_buffer_params_v1_destroy(dmabuf_params);
70+ } else
71+#endif
72+ {
73+ if(NULL == m_drm)
74+ return NULL;
75+
76+ buffer = wl_drm_create_prime_buffer(m_drm,
77+ name,
78+ width,
79+ height,
80+ format,
81+ offsets[0],
82+ pitches[0],
83+ offsets[1],
84+ pitches[1],
85+ offsets[2],
86+ pitches[2]);
87+ }
88+
89 return buffer;
90 }
91
92--
932.31.1
94
diff --git a/recipes-multimedia/onevpl/onevpl/0001-samples-Addin-wayland-scanner-auto-generate-on-cmake.patch b/recipes-multimedia/onevpl/onevpl/0001-samples-Addin-wayland-scanner-auto-generate-on-cmake.patch
deleted file mode 100644
index 6fab79e5..00000000
--- a/recipes-multimedia/onevpl/onevpl/0001-samples-Addin-wayland-scanner-auto-generate-on-cmake.patch
+++ /dev/null
@@ -1,98 +0,0 @@
1From 6ef9dd02e297ae20da422f2f3f4f298061efd6e9 Mon Sep 17 00:00:00 2001
2From: "Ung, Teng En" <teng.en.ung@intel.com>
3Date: Fri, 15 Oct 2021 11:55:13 +0000
4Subject: [PATCH 1/3] samples: Addin wayland-scanner auto generate on cmake.
5
6Upstream-Status: Submitted
7innersource PR #269
8
9---
10 tools/legacy/sample_common/CMakeLists.txt | 21 ++++++++++
11 .../legacy/sample_misc/wayland/CMakeLists.txt | 39 +++++++++++++++++++
12 2 files changed, 60 insertions(+)
13
14diff --git a/tools/legacy/sample_common/CMakeLists.txt b/tools/legacy/sample_common/CMakeLists.txt
15index 0ff83aa4..0ed8b390 100644
16--- a/tools/legacy/sample_common/CMakeLists.txt
17+++ b/tools/legacy/sample_common/CMakeLists.txt
18@@ -92,6 +92,27 @@ if(UNIX)
19 target_include_directories(
20 ${TARGET}
21 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../sample_misc/wayland/include)
22+
23+ pkg_check_modules(PKG_WAYLAND_SCANNER "wayland-scanner>=1.15")
24+ pkg_check_modules(PKG_WAYLAND_PROTCOLS "wayland-protocols>=1.15")
25+
26+ if(PKG_WAYLAND_SCANNER_FOUND AND PKG_WAYLAND_PROTCOLS_FOUND)
27+ pkg_get_variable(WAYLAND_PROTOCOLS_PATH wayland-protocols pkgdatadir)
28+ if(WAYLAND_PROTOCOLS_PATH)
29+ find_file(
30+ WAYLAND_LINUX_DMABUF_XML_PATH linux-dmabuf-unstable-v1.xml
31+ PATHS ${WAYLAND_PROTOCOLS_PATH}/unstable/linux-dmabuf
32+ NO_DEFAULT_PATH)
33+ endif()
34+ endif()
35+
36+ if(WAYLAND_LINUX_DMABUF_XML_PATH)
37+ target_compile_definitions(
38+ ${TARGET} PUBLIC -DWAYLAND_LINUX_DMABUF_SUPPORT)
39+ target_include_directories(
40+ ${TARGET}
41+ PUBLIC ${CMAKE_BINARY_DIR}/tools/legacy/sample_misc/wayland)
42+ endif()
43 else()
44 message(
45 WARNING
46diff --git a/tools/legacy/sample_misc/wayland/CMakeLists.txt b/tools/legacy/sample_misc/wayland/CMakeLists.txt
47index 1fe98da4..01e6029b 100644
48--- a/tools/legacy/sample_misc/wayland/CMakeLists.txt
49+++ b/tools/legacy/sample_misc/wayland/CMakeLists.txt
50@@ -29,6 +29,45 @@ target_sources(
51 ${CMAKE_CURRENT_SOURCE_DIR}/src/listener_wayland.cpp
52 ${CMAKE_CURRENT_SOURCE_DIR}/src/wayland-drm-protocol.c)
53
54+if(PKG_WAYLAND_SCANNER_FOUND AND PKG_WAYLAND_PROTCOLS_FOUND AND WAYLAND_LINUX_DMABUF_XML_PATH)
55+ pkg_get_variable(WAYLAND_SCANNER_BIN_PATH wayland-scanner bindir)
56+ pkg_get_variable(WAYLAND_SCANNER_BIN wayland-scanner wayland_scanner)
57+
58+ if(WAYLAND_SCANNER_BIN_PATH AND WAYLAND_SCANNER_BIN)
59+ execute_process(
60+ COMMAND "${WAYLAND_SCANNER_BIN_PATH}\/${WAYLAND_SCANNER_BIN}"
61+ "client-header" "${WAYLAND_LINUX_DMABUF_XML_PATH}"
62+ "tools/legacy/sample_misc/wayland/linux-dmabuf-unstable-v1.h"
63+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
64+ RESULT_VARIABLE WAYLAND_SCANNER_RESULT)
65+ if (WAYLAND_SCANNER_RESULT)
66+ message(ERROR "Failed to generate linux-dmabuf-unstable-v1.h")
67+ return()
68+ endif()
69+
70+ execute_process(
71+ COMMAND "${WAYLAND_SCANNER_BIN_PATH}\/${WAYLAND_SCANNER_BIN}"
72+ "private-code" "${WAYLAND_LINUX_DMABUF_XML_PATH}"
73+ "tools/legacy/sample_misc/wayland/linux-dmabuf-unstable-v1.c"
74+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
75+ RESULT_VARIABLE WAYLAND_SCANNER_RESULT)
76+ if (WAYLAND_SCANNER_RESULT)
77+ message(ERROR "Failed to generate linux-dmabuf-unstable-v1.c")
78+ return()
79+ endif()
80+
81+ include_directories(
82+ ${CMAKE_BINARY_DIR}/tools/legacy/sample_misc/wayland)
83+ add_definitions(-DWAYLAND_LINUX_DMABUF_SUPPORT)
84+ target_sources(
85+ ${TARGET}
86+ PRIVATE ${CMAKE_BINARY_DIR}/tools/legacy/sample_misc/wayland/linux-dmabuf-unstable-v1.c)
87+ else()
88+ message(ERROR "Don't know how to execute wayland-scanner.")
89+ return()
90+ endif()
91+endif()
92+
93 target_link_libraries(${TARGET} sample_common wayland-client va drm drm_intel)
94
95 install(TARGETS ${TARGET} LIBRARY DESTINATION ${_TOOLS_LIB_PATH})
96--
972.31.1
98
diff --git a/recipes-multimedia/onevpl/onevpl/0001-samples-use-find_program-to-detect-wayland-scanner-i.patch b/recipes-multimedia/onevpl/onevpl/0001-samples-use-find_program-to-detect-wayland-scanner-i.patch
deleted file mode 100644
index 6f1ad93e..00000000
--- a/recipes-multimedia/onevpl/onevpl/0001-samples-use-find_program-to-detect-wayland-scanner-i.patch
+++ /dev/null
@@ -1,108 +0,0 @@
1From c69500c88058358bdc6c0a036d90b000d63f2a41 Mon Sep 17 00:00:00 2001
2From: "Ung, Teng En" <teng.en.ung@intel.com>
3Date: Wed, 3 Nov 2021 14:23:15 +0000
4Subject: [PATCH 4/4] samples: use find_program to detect wayland-scanner in
5 cmake
6
7Upstream-Status: Submitted
8innersource PR #269
9
10---
11 tools/legacy/sample_common/CMakeLists.txt | 4 +-
12 tools/legacy/sample_misc/wayland/CMakeLists.txt | 59 +++++++++++--------------
13 2 files changed, 28 insertions(+), 35 deletions(-)
14
15diff --git a/tools/legacy/sample_common/CMakeLists.txt b/tools/legacy/sample_common/CMakeLists.txt
16index 0ed8b39..658d44d 100644
17--- a/tools/legacy/sample_common/CMakeLists.txt
18+++ b/tools/legacy/sample_common/CMakeLists.txt
19@@ -93,10 +93,10 @@ if(UNIX)
20 ${TARGET}
21 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../sample_misc/wayland/include)
22
23- pkg_check_modules(PKG_WAYLAND_SCANNER "wayland-scanner>=1.15")
24+ find_program(WAYLAND_SCANNER_BIN "wayland-scanner")
25 pkg_check_modules(PKG_WAYLAND_PROTCOLS "wayland-protocols>=1.15")
26
27- if(PKG_WAYLAND_SCANNER_FOUND AND PKG_WAYLAND_PROTCOLS_FOUND)
28+ if(WAYLAND_SCANNER_BIN AND PKG_WAYLAND_PROTCOLS_FOUND)
29 pkg_get_variable(WAYLAND_PROTOCOLS_PATH wayland-protocols pkgdatadir)
30 if(WAYLAND_PROTOCOLS_PATH)
31 find_file(
32diff --git a/tools/legacy/sample_misc/wayland/CMakeLists.txt b/tools/legacy/sample_misc/wayland/CMakeLists.txt
33index 01e6029..7625bc5 100644
34--- a/tools/legacy/sample_misc/wayland/CMakeLists.txt
35+++ b/tools/legacy/sample_misc/wayland/CMakeLists.txt
36@@ -29,43 +29,36 @@ target_sources(
37 ${CMAKE_CURRENT_SOURCE_DIR}/src/listener_wayland.cpp
38 ${CMAKE_CURRENT_SOURCE_DIR}/src/wayland-drm-protocol.c)
39
40-if(PKG_WAYLAND_SCANNER_FOUND AND PKG_WAYLAND_PROTCOLS_FOUND AND WAYLAND_LINUX_DMABUF_XML_PATH)
41- pkg_get_variable(WAYLAND_SCANNER_BIN_PATH wayland-scanner bindir)
42- pkg_get_variable(WAYLAND_SCANNER_BIN wayland-scanner wayland_scanner)
43+ if(WAYLAND_SCANNER_BIN AND PKG_WAYLAND_PROTCOLS_FOUND AND WAYLAND_LINUX_DMABUF_XML_PATH)
44
45- if(WAYLAND_SCANNER_BIN_PATH AND WAYLAND_SCANNER_BIN)
46- execute_process(
47- COMMAND "${WAYLAND_SCANNER_BIN_PATH}\/${WAYLAND_SCANNER_BIN}"
48- "client-header" "${WAYLAND_LINUX_DMABUF_XML_PATH}"
49- "tools/legacy/sample_misc/wayland/linux-dmabuf-unstable-v1.h"
50- WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
51- RESULT_VARIABLE WAYLAND_SCANNER_RESULT)
52- if (WAYLAND_SCANNER_RESULT)
53- message(ERROR "Failed to generate linux-dmabuf-unstable-v1.h")
54- return()
55- endif()
56-
57- execute_process(
58- COMMAND "${WAYLAND_SCANNER_BIN_PATH}\/${WAYLAND_SCANNER_BIN}"
59- "private-code" "${WAYLAND_LINUX_DMABUF_XML_PATH}"
60- "tools/legacy/sample_misc/wayland/linux-dmabuf-unstable-v1.c"
61- WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
62- RESULT_VARIABLE WAYLAND_SCANNER_RESULT)
63- if (WAYLAND_SCANNER_RESULT)
64- message(ERROR "Failed to generate linux-dmabuf-unstable-v1.c")
65- return()
66- endif()
67+ execute_process(
68+ COMMAND "${WAYLAND_SCANNER_BIN}"
69+ "client-header" "${WAYLAND_LINUX_DMABUF_XML_PATH}"
70+ "tools/legacy/sample_misc/wayland/linux-dmabuf-unstable-v1.h"
71+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
72+ RESULT_VARIABLE WAYLAND_SCANNER_RESULT)
73+ if (WAYLAND_SCANNER_RESULT)
74+ message(ERROR "Failed to generate linux-dmabuf-unstable-v1.h")
75+ return()
76+ endif()
77
78- include_directories(
79- ${CMAKE_BINARY_DIR}/tools/legacy/sample_misc/wayland)
80- add_definitions(-DWAYLAND_LINUX_DMABUF_SUPPORT)
81- target_sources(
82- ${TARGET}
83- PRIVATE ${CMAKE_BINARY_DIR}/tools/legacy/sample_misc/wayland/linux-dmabuf-unstable-v1.c)
84- else()
85- message(ERROR "Don't know how to execute wayland-scanner.")
86+ execute_process(
87+ COMMAND "${WAYLAND_SCANNER_BIN}"
88+ "private-code" "${WAYLAND_LINUX_DMABUF_XML_PATH}"
89+ "tools/legacy/sample_misc/wayland/linux-dmabuf-unstable-v1.c"
90+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
91+ RESULT_VARIABLE WAYLAND_SCANNER_RESULT)
92+ if (WAYLAND_SCANNER_RESULT)
93+ message(ERROR "Failed to generate linux-dmabuf-unstable-v1.c")
94 return()
95 endif()
96+
97+ include_directories(
98+ ${CMAKE_BINARY_DIR}/tools/legacy/sample_misc/wayland)
99+ add_definitions(-DWAYLAND_LINUX_DMABUF_SUPPORT)
100+ target_sources(
101+ ${TARGET}
102+ PRIVATE ${CMAKE_BINARY_DIR}/tools/legacy/sample_misc/wayland/linux-dmabuf-unstable-v1.c)
103 endif()
104
105 target_link_libraries(${TARGET} sample_common wayland-client va drm drm_intel)
106--
1072.7.4
108
diff --git a/recipes-multimedia/onevpl/onevpl_2021.6.0.bb b/recipes-multimedia/onevpl/onevpl_2021.6.0.bb
deleted file mode 100644
index e586b54e..00000000
--- a/recipes-multimedia/onevpl/onevpl_2021.6.0.bb
+++ /dev/null
@@ -1,46 +0,0 @@
1SUMMARY = "oneAPI Video Processing Library"
2DESCRIPTION = "The oneAPI Video Processing Library (oneVPL) provides \
3a single video processing API for encode, decode, and video processing \
4that works across a wide range of accelerators."
5
6HOMEPAGE = "https://github.com/oneapi-src/oneVPL"
7LICENSE = "MIT"
8LIC_FILES_CHKSUM = "file://LICENSE;md5=c18ea6bb4786a26bf4eee88a7424a408 \
9 file://third-party-programs.txt;md5=67727fd253b1b4574cd9eea78a2b0620"
10
11SRC_URI = "git://github.com/oneapi-src/oneVPL.git;protocol=https;branch=master \
12 file://0001-Fix-basename-build-issue-with-musl_libc.patch \
13 file://0001-Extends-errorTypes-to-support-JPEG-errors.patch \
14 file://0001-samples-Addin-wayland-scanner-auto-generate-on-cmake.patch \
15 file://0001-sample_misc-Addin-basic-wayland-dmabuf-support.patch \
16 file://0001-sample_misc-use-wayland-dmabuf-to-render-nv12.patch \
17 file://0001-samples-use-find_program-to-detect-wayland-scanner-i.patch \
18 file://0001-sample_decode-Add-VDSFC-CSC-for-AVC-HEVC.patch \
19 "
20SRCREV = "cdf7444dc971544d148c51e0d93a2df1bb55dda7"
21S = "${WORKDIR}/git"
22
23inherit cmake
24DEPENDS += "libva pkgconfig-native"
25
26PACKAGECONFIG ??= "tools"
27PACKAGECONFIG[tools] = "-DBUILD_TOOLS=ON, -DBUILD_TOOLS=OFF, wayland wayland-native wayland-protocols"
28
29do_install:append() {
30 mkdir -p ${D}${datadir}/oneVPL/samples
31 mv ${D}${bindir}/sample_* ${D}${datadir}/oneVPL/samples
32}
33
34COMPATIBLE_HOST = '(x86_64).*-linux'
35
36PACKAGES += "${PN}-examples"
37
38FILES:${PN}-examples = "${datadir}/oneVPL/examples \
39 "
40
41FILES_SOLIBSDEV = ""
42FILES:${PN}-dev += "${libdir}/libvpl.so"
43
44FILES:${PN} += "${datadir} \
45 ${libdir}/oneVPL/libvpl_wayland.so \
46 "