- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
Thanks for your support as always.
I am using Intel media SDK for decoding H.264 and i am providing input H.264 data through buffer (not from input file). Although i am getting YUV420 decoded output data from decoder but its colors are different from original colors.
Please provide your valuable suggestion.
Thanks,
Amol Agarwal
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
Yes, as Donald points out, this looks like it is just issue in the way you are viewing the data.
I believe the application to view NV12 data (PYUV) either does not support NV12 or is not selected to show NV12 formatting of the YUV420 data.
The version of PYUV I've seen does not support NV12, it only supports these:
- P444 - Planar, progressive, 4:4:4
- P422 - Planar, progressive, 4:2:2
- P420 - Planar, progressive, 4:2:0
- P411 - Planar, progressive, 4:1:1
- P410 - Planar, progressive, 4:1:0
- P400 - Planar, progressive, 4:0:0
- IYUV - Planar, progressive, 4:2:0
- I444 - Packed, progressive, 4:4:4
- I422 - Packed, progressive, 4:2:2
- I420 - Packed, progressive, 4:2:0
- I411 - Packed, progressive, 4:1:1
- I410 - Packed, progressive, 4:1:0
- UYVY - Packed, progressive, 4:2:2
- YUY2 - Packed, progressive, 4:2:2
- YVYU - Packed, progressive, 4:2:2
- VIX - Kakadu format for managing movies
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
In what way are the colors different? How are you comparing them?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Intel Media SDK API supports a few different "YUV420" formats. Intel hardwware supports "NV12" which is a plane of Y followed by interleaved UV, while many of the samples support writing of planar IYUV (also known as i420), which is very simular to YV12 except the U and V planes are swapped.
The Media SDK API itself provides pointers to Y, U and V, and the actual YUV420 format is determined by the code that uses them.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
Thank you very much for your quick response.
As my problem is still not resolved hence i have attached screenshots to show the exact problem:
original.jpg: It is screen-shot of original video.
Issue.jpg: It is screen-shot of output of Intel Media SDK decoder. You can compare this with original.jpg to see the color related problem. This problem is occurring in complete decoded output video file although i have shared just one screen-shot.
Please provide your valuable suggestion.
Amol Agarwal
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
It looks like something is wrong in your code to convert from the NV12 surface to whatever format you are sending to the output display. Can you show us your code for that area?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
Yes, as Donald points out, this looks like it is just issue in the way you are viewing the data.
I believe the application to view NV12 data (PYUV) either does not support NV12 or is not selected to show NV12 formatting of the YUV420 data.
The version of PYUV I've seen does not support NV12, it only supports these:
- P444 - Planar, progressive, 4:4:4
- P422 - Planar, progressive, 4:2:2
- P420 - Planar, progressive, 4:2:0
- P411 - Planar, progressive, 4:1:1
- P410 - Planar, progressive, 4:1:0
- P400 - Planar, progressive, 4:0:0
- IYUV - Planar, progressive, 4:2:0
- I444 - Packed, progressive, 4:4:4
- I422 - Packed, progressive, 4:2:2
- I420 - Packed, progressive, 4:2:0
- I411 - Packed, progressive, 4:1:1
- I410 - Packed, progressive, 4:1:0
- UYVY - Packed, progressive, 4:2:2
- YUY2 - Packed, progressive, 4:2:2
- YVYU - Packed, progressive, 4:2:2
- VIX - Kakadu format for managing movies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Everyone,
Thanks a lot for your quick responses.
>I believe the application to view NV12 data (PYUV) either does not support NV12 or is not selected to show NV12 formatting of the YUV420 data.
Actually sample application of Intel Media SDK 'Sample_Decode' is giving the output in NV12 format and PYUV application is able to play the NV12 output dump without any issue.
Code:
mfxStatus CSmplYUVWriter::WriteNextFrame(mfxFrameSurface1 *pSurface, mfxU8 *pOutData)
{
mfxFrameInfo *pInfo = &pSurface->Info;
mfxFrameData *pData = &pSurface->Data;
mfxU32 i, j, h, w;
switch (pInfo->FourCC)
{
case MFX_FOURCC_NV12:
// Y component
for (i = 0; i < pInfo->CropH; i++)
{
memcpy_s(pOutData + (i*pInfo->CropW), pInfo->Width * pInfo->Height *3/2, pData->Y + (pInfo->CropY * pData->Pitch + pInfo->CropX)+ i * pData->Pitch, pInfo->CropW);
}
h = pInfo->CropH / 2;
w = pInfo->CropW;
//U component
for (i = 0; i < h; i++)
{
for (j = 0; j < w; j += 2)
{
memcpy_s(pOutData + (pInfo->CropH * pInfo->CropW) + (j+(i*pInfo->CropW)), (pInfo->Width * pInfo->Height *3/2 - pInfo->CropH * pInfo->CropW), pData->UV + (pInfo->CropY * pData->Pitch / 2 + pInfo->CropX) + i * pData->Pitch + j, 1);
}
}
//V component
for (i = 0; i < h; i++)
{
for (j = 1; j < w; j += 2)
{
memcpy_s(pOutData + (pInfo->CropH * pInfo->CropW) + (j+(i*pInfo->CropW)), (pInfo->Width * pInfo->Height *3/2 - pInfo->CropH * pInfo->CropW), pData->UV + (pInfo->CropY * pData->Pitch / 2 + pInfo->CropX) + i * pData->Pitch + j, 1);
}
}
}
//Just to verify the decoder output
DWORD byteswritten = 0;
int retn = 0;
bool ret = WriteFile(m_hFile,pOutData,pInfo->Width * pInfo->Height*3/2,&byteswritten,NULL);
}
Please suggest if anything is wrong.
Amol Agarwal
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
Not sure where issue in your application/usage is. The Media SDK API for decoding H.264 bitstream to NV12 surface in system memory or to D3D surface is most likely not the issue. If you want to see all the parameters being used for Media SDK interface, you can use the "tracer" tool to capture a log. If you supply the log here, I can take a look to see if any parameters are incorrect.
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page