diff options
| author | Yew, Chang Ching <chang.ching.yew@intel.com> | 2021-10-06 11:12:37 +0800 |
|---|---|---|
| committer | Anuj Mittal <anuj.mittal@intel.com> | 2021-10-11 12:23:39 +0800 |
| commit | 3f60089009f7936f6fb288937a146024adaa0907 (patch) | |
| tree | bdd2165f0ef080d63ef4c5134ca4d16287baab90 /recipes-multimedia | |
| parent | 7bb071fb18defe25d42b6ea74ca4ab70c18f5fcf (diff) | |
| download | meta-intel-3f60089009f7936f6fb288937a146024adaa0907.tar.gz | |
onevpl-intel-gpu: jpegd: Enable JPEG decode error report
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-jpegd-Enable-JPEG-decode-error-report.patch | 502 | ||||
| -rw-r--r-- | recipes-multimedia/onevpl/onevpl-intel-gpu_21.3.2.bb | 1 |
2 files changed, 503 insertions, 0 deletions
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 new file mode 100644 index 00000000..21482ed7 --- /dev/null +++ b/recipes-multimedia/onevpl/onevpl-intel-gpu/0001-jpegd-Enable-JPEG-decode-error-report.patch | |||
| @@ -0,0 +1,502 @@ | |||
| 1 | From fe25ec3db9a48308bd6d3e9fe800e67335f8a369 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: "Yew, Chang Ching" <chang.ching.yew@intel.com> | ||
| 3 | Date: Mon, 4 Oct 2021 13:56:08 +0800 | ||
| 4 | Subject: [PATCH] [jpegd] Enable JPEG decode error report | ||
| 5 | |||
| 6 | Upstream-Status: Submitted | ||
| 7 | innersource PR #3318 | ||
| 8 | |||
| 9 | [Internal] | ||
| 10 | Issue: NA | ||
| 11 | Test: manual. Gst-MSDK with mfxExtDecodeErrorReport | ||
| 12 | OSPR: N/A | ||
| 13 | |||
| 14 | Signed-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 | |||
| 29 | diff --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 | ||
| 30 | index 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 | ||
| 49 | diff --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 | ||
| 50 | index 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) | ||
| 93 | diff --git a/_studio/shared/umc/codec/jpeg_dec/include/jpegdec.h b/_studio/shared/umc/codec/jpeg_dec/include/jpegdec.h | ||
| 94 | index 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 | |||
| 105 | diff --git a/_studio/shared/umc/codec/jpeg_dec/include/jpegdec_base.h b/_studio/shared/umc/codec/jpeg_dec/include/jpegdec_base.h | ||
| 106 | index 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 | ||
| 142 | diff --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 | ||
| 143 | index 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; | ||
| 155 | diff --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 | ||
| 156 | index 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 | |||
| 177 | diff --git a/_studio/shared/umc/codec/jpeg_dec/src/jpegdec.cpp b/_studio/shared/umc/codec/jpeg_dec/src/jpegdec.cpp | ||
| 178 | index 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) | ||
| 287 | diff --git a/_studio/shared/umc/codec/jpeg_dec/src/jpegdec_base.cpp b/_studio/shared/umc/codec/jpeg_dec/src/jpegdec_base.cpp | ||
| 288 | index 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 | } | ||
| 394 | diff --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 | ||
| 395 | index 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 | |||
| 425 | diff --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 | ||
| 426 | index 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 | |||
| 456 | diff --git a/api/vpl/mfxstructures.h b/api/vpl/mfxstructures.h | ||
| 457 | index 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 | -- | ||
| 501 | 2.33.0 | ||
| 502 | |||
diff --git a/recipes-multimedia/onevpl/onevpl-intel-gpu_21.3.2.bb b/recipes-multimedia/onevpl/onevpl-intel-gpu_21.3.2.bb index 9a20e785..88ab0bb2 100644 --- a/recipes-multimedia/onevpl/onevpl-intel-gpu_21.3.2.bb +++ b/recipes-multimedia/onevpl/onevpl-intel-gpu_21.3.2.bb | |||
| @@ -17,6 +17,7 @@ COMPATIBLE_HOST:x86-x32 = "null" | |||
| 17 | DEPENDS += "libdrm libva intel-media-driver onevpl" | 17 | DEPENDS += "libdrm libva intel-media-driver onevpl" |
| 18 | 18 | ||
| 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 | " | 21 | " |
| 21 | 22 | ||
| 22 | SRCREV = "9a8e9626859fbffd631b3d7cf26ac7b4efe6ae3c" | 23 | SRCREV = "9a8e9626859fbffd631b3d7cf26ac7b4efe6ae3c" |
