diff options
Diffstat (limited to 'recipes-multimedia/vpl/files/0002-Enable-YUV400-JPEG-Enc-for-vaapi.patch')
| -rw-r--r-- | recipes-multimedia/vpl/files/0002-Enable-YUV400-JPEG-Enc-for-vaapi.patch | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/recipes-multimedia/vpl/files/0002-Enable-YUV400-JPEG-Enc-for-vaapi.patch b/recipes-multimedia/vpl/files/0002-Enable-YUV400-JPEG-Enc-for-vaapi.patch new file mode 100644 index 00000000..5529b5e3 --- /dev/null +++ b/recipes-multimedia/vpl/files/0002-Enable-YUV400-JPEG-Enc-for-vaapi.patch | |||
| @@ -0,0 +1,154 @@ | |||
| 1 | From 1a064a36c164080a21f8d89409564c1812dea6af Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Vincent Cheah Beng Keat <vincent.beng.keat.cheah@intel.com> | ||
| 3 | Date: Wed, 15 May 2024 09:51:53 +0800 | ||
| 4 | Subject: [PATCH 2/9] Enable YUV400 JPEG Enc for vaapi | ||
| 5 | |||
| 6 | Upstream-Status: Backport [https://github.com/intel/libvpl-tools/commit/747b66ce97c6ac5d17a8b8629eb22d790d802da3] | ||
| 7 | Signed-off-by: Lim Siew Hoon <siew.hoon.lim@intel.com> | ||
| 8 | --- | ||
| 9 | .../legacy/sample_common/src/sample_utils.cpp | 2 +- | ||
| 10 | .../sample_common/src/vaapi_allocator.cpp | 13 +++++++++++- | ||
| 11 | .../sample_encode/src/pipeline_encode.cpp | 20 +++++++++---------- | ||
| 12 | .../sample_encode/src/sample_encode.cpp | 4 ---- | ||
| 13 | 4 files changed, 22 insertions(+), 17 deletions(-) | ||
| 14 | |||
| 15 | diff --git a/tools/legacy/sample_common/src/sample_utils.cpp b/tools/legacy/sample_common/src/sample_utils.cpp | ||
| 16 | index ddd783f..b2b67bf 100644 | ||
| 17 | --- a/tools/legacy/sample_common/src/sample_utils.cpp | ||
| 18 | +++ b/tools/legacy/sample_common/src/sample_utils.cpp | ||
| 19 | @@ -284,7 +284,7 @@ mfxStatus CSmplYUVReader::LoadNextFrame(mfxFrameSurface1* pSurface) { | ||
| 20 | MFX_FOURCC_P010 == pInfo.FourCC || MFX_FOURCC_P210 == pInfo.FourCC || | ||
| 21 | MFX_FOURCC_P016 == pInfo.FourCC || MFX_FOURCC_I010 == pInfo.FourCC || | ||
| 22 | MFX_FOURCC_P016 == pInfo.FourCC || MFX_FOURCC_I010 == pInfo.FourCC || | ||
| 23 | - MFX_FOURCC_I420 == pInfo.FourCC) { | ||
| 24 | + MFX_FOURCC_I420 == pInfo.FourCC || MFX_FOURCC_YUV400 == pInfo.FourCC) { | ||
| 25 | pitch = pData.Pitch; | ||
| 26 | ptr = pData.Y + pInfo.CropX + pInfo.CropY * pData.Pitch; | ||
| 27 | |||
| 28 | diff --git a/tools/legacy/sample_common/src/vaapi_allocator.cpp b/tools/legacy/sample_common/src/vaapi_allocator.cpp | ||
| 29 | index db18e23..8ee2408 100644 | ||
| 30 | --- a/tools/legacy/sample_common/src/vaapi_allocator.cpp | ||
| 31 | +++ b/tools/legacy/sample_common/src/vaapi_allocator.cpp | ||
| 32 | @@ -54,6 +54,8 @@ unsigned int ConvertMfxFourccToVAFormat(mfxU32 fourcc) { | ||
| 33 | return VA_FOURCC_Y216; | ||
| 34 | case MFX_FOURCC_Y416: | ||
| 35 | return VA_FOURCC_Y416; | ||
| 36 | + case MFX_FOURCC_YUV400: | ||
| 37 | + return VA_FOURCC_Y800; | ||
| 38 | |||
| 39 | default: | ||
| 40 | assert(!"unsupported fourcc"); | ||
| 41 | @@ -133,7 +135,8 @@ static mfxStatus GetVAFourcc(mfxU32 fourcc, unsigned int& va_fourcc) { | ||
| 42 | (VA_FOURCC_Y210 != va_fourcc) && (VA_FOURCC_Y410 != va_fourcc) && | ||
| 43 | (VA_FOURCC_RGB565 != va_fourcc) && (VA_FOURCC_RGBP != va_fourcc) && | ||
| 44 | (VA_FOURCC_P016 != va_fourcc) && (VA_FOURCC_Y216 != va_fourcc) && | ||
| 45 | - (VA_FOURCC_Y416 != va_fourcc) && (VA_FOURCC_AYUV != va_fourcc))) { | ||
| 46 | + (VA_FOURCC_Y416 != va_fourcc) && (VA_FOURCC_AYUV != va_fourcc) && | ||
| 47 | + (VA_FOURCC_Y800 != va_fourcc))) { | ||
| 48 | return MFX_ERR_MEMORY_ALLOC; | ||
| 49 | } | ||
| 50 | |||
| 51 | @@ -281,6 +284,9 @@ mfxStatus vaapiFrameAllocator::AllocImpl(mfxFrameAllocRequest* request, | ||
| 52 | else if (fourcc == MFX_FOURCC_RGBP) { | ||
| 53 | format = VA_RT_FORMAT_RGBP; | ||
| 54 | } | ||
| 55 | + else if (fourcc == MFX_FOURCC_YUV400) { | ||
| 56 | + format = VA_RT_FORMAT_YUV400; | ||
| 57 | + } | ||
| 58 | |||
| 59 | va_res = m_libva->vaCreateSurfaces(m_dpy, | ||
| 60 | format, | ||
| 61 | @@ -486,6 +492,11 @@ mfxStatus vaapiFrameAllocator::LockFrame(mfxMemId mid, mfxFrameData* ptr) { | ||
| 62 | } | ||
| 63 | if (MFX_ERR_NONE == mfx_res) { | ||
| 64 | switch (vaapi_mid->m_image.format.fourcc) { | ||
| 65 | + case MFX_FOURCC_YUV400: | ||
| 66 | + if (mfx_fourcc != vaapi_mid->m_image.format.fourcc) | ||
| 67 | + return MFX_ERR_LOCK_MEMORY; | ||
| 68 | + { ptr->Y = pBuffer + vaapi_mid->m_image.offsets[0]; } | ||
| 69 | + break; | ||
| 70 | case VA_FOURCC_NV12: | ||
| 71 | if (mfx_fourcc != vaapi_mid->m_image.format.fourcc) | ||
| 72 | return MFX_ERR_LOCK_MEMORY; | ||
| 73 | diff --git a/tools/legacy/sample_encode/src/pipeline_encode.cpp b/tools/legacy/sample_encode/src/pipeline_encode.cpp | ||
| 74 | index 4476c49..cda607b 100644 | ||
| 75 | --- a/tools/legacy/sample_encode/src/pipeline_encode.cpp | ||
| 76 | +++ b/tools/legacy/sample_encode/src/pipeline_encode.cpp | ||
| 77 | @@ -50,6 +50,7 @@ msdk_tick time_get_frequency(void) { | ||
| 78 | |||
| 79 | mfxU16 FourCcBitDepth(mfxU32 fourCC) { | ||
| 80 | switch (fourCC) { | ||
| 81 | + case MFX_FOURCC_YUV400: | ||
| 82 | case MFX_FOURCC_NV12: | ||
| 83 | case MFX_FOURCC_NV16: | ||
| 84 | case MFX_FOURCC_YUY2: | ||
| 85 | @@ -845,8 +846,8 @@ mfxStatus CEncodingPipeline::CheckHyperEncodeParams(mfxHyperMode hyperMode) { | ||
| 86 | #endif | ||
| 87 | |||
| 88 | mfxU32 CEncodingPipeline::FileFourCC2EncFourCC(mfxU32 fcc) { | ||
| 89 | - // File reader automatically converts I420, YV12, and YUV400 to NV12 | ||
| 90 | - if (fcc == MFX_FOURCC_I420 || fcc == MFX_FOURCC_YV12 || fcc == MFX_FOURCC_YUV400) | ||
| 91 | + // File reader automatically converts I420 and YV12 to NV12 | ||
| 92 | + if (fcc == MFX_FOURCC_I420 || fcc == MFX_FOURCC_YV12) | ||
| 93 | return MFX_FOURCC_NV12; | ||
| 94 | else | ||
| 95 | return fcc; | ||
| 96 | @@ -1054,6 +1055,7 @@ mfxStatus CEncodingPipeline::AllocFrames() { | ||
| 97 | |||
| 98 | // prepare allocation requests | ||
| 99 | EncRequest.NumFrameSuggested = EncRequest.NumFrameMin = nEncSurfNum; | ||
| 100 | + | ||
| 101 | MSDK_MEMCPY_VAR(EncRequest.Info, &(m_mfxEncParams.mfx.FrameInfo), sizeof(mfxFrameInfo)); | ||
| 102 | if (m_pmfxVPP) { | ||
| 103 | EncRequest.Type |= | ||
| 104 | @@ -1650,15 +1652,11 @@ mfxStatus CEncodingPipeline::Init(sInputParams* pParams) { | ||
| 105 | |||
| 106 | // FileReader can convert yv12->nv12 without vpp, when hw impl | ||
| 107 | if (pParams->bUseHWLib) { | ||
| 108 | - m_InputFourCC = ((pParams->FileInputFourCC == MFX_FOURCC_I420) || | ||
| 109 | - (pParams->FileInputFourCC == MFX_FOURCC_YUV400)) | ||
| 110 | - ? MFX_FOURCC_NV12 | ||
| 111 | - : pParams->FileInputFourCC; | ||
| 112 | - | ||
| 113 | - pParams->EncodeFourCC = ((pParams->EncodeFourCC == MFX_FOURCC_I420) || | ||
| 114 | - (pParams->EncodeFourCC == MFX_FOURCC_YUV400)) | ||
| 115 | - ? MFX_FOURCC_NV12 | ||
| 116 | - : pParams->EncodeFourCC; | ||
| 117 | + m_InputFourCC = (pParams->FileInputFourCC == MFX_FOURCC_I420) ? MFX_FOURCC_NV12 | ||
| 118 | + : pParams->FileInputFourCC; | ||
| 119 | + | ||
| 120 | + pParams->EncodeFourCC = | ||
| 121 | + (pParams->EncodeFourCC == MFX_FOURCC_I420) ? MFX_FOURCC_NV12 : pParams->EncodeFourCC; | ||
| 122 | } | ||
| 123 | else { | ||
| 124 | m_InputFourCC = pParams->FileInputFourCC; | ||
| 125 | diff --git a/tools/legacy/sample_encode/src/sample_encode.cpp b/tools/legacy/sample_encode/src/sample_encode.cpp | ||
| 126 | index 0a65016..7c722ea 100644 | ||
| 127 | --- a/tools/legacy/sample_encode/src/sample_encode.cpp | ||
| 128 | +++ b/tools/legacy/sample_encode/src/sample_encode.cpp | ||
| 129 | @@ -94,10 +94,8 @@ void PrintHelp(char* strAppName, const char* strErrorMessage, ...) { | ||
| 130 | #endif | ||
| 131 | printf( | ||
| 132 | " [-nv12|nv16|yuy2|uyvy|ayuv|rgb4|bgr4|p010|y210|y410|a2rgb10|p016|p210|y216|i010|i420] - input color format (by default YUV420 is expected).\n"); | ||
| 133 | -#if (defined(_WIN64) || defined(_WIN32)) | ||
| 134 | printf( | ||
| 135 | " [-yuv400] - input color format is YUV400 (grayscale) and will be converted to NV12 for encoding (JPEG only).\n"); | ||
| 136 | -#endif | ||
| 137 | printf( | ||
| 138 | " [-msb10] - 10-bit color format is expected to have data in Most Significant Bits of words.\n (LSB data placement is expected by default).\n This option also disables data shifting during file reading.\n"); | ||
| 139 | printf( | ||
| 140 | @@ -924,11 +922,9 @@ mfxStatus ParseInputString(char* strInput[], mfxU32 nArgNum, sInputParams* pPara | ||
| 141 | else if (msdk_match(strInput[i], "-y410")) { | ||
| 142 | pParams->FileInputFourCC = MFX_FOURCC_Y410; | ||
| 143 | } | ||
| 144 | -#if (defined(_WIN64) || defined(_WIN32)) | ||
| 145 | else if (msdk_match(strInput[i], "-yuv400")) { | ||
| 146 | pParams->FileInputFourCC = MFX_FOURCC_YUV400; | ||
| 147 | } | ||
| 148 | -#endif | ||
| 149 | else if (msdk_match(strInput[i], "-ec::p010")) { | ||
| 150 | pParams->EncodeFourCC = MFX_FOURCC_P010; | ||
| 151 | } | ||
| 152 | -- | ||
| 153 | 2.43.2 | ||
| 154 | |||
