Media (Intel® oneAPI Video Processing Library, Intel Media SDK)
Access community support with transcoding, decoding, and encoding in applications using media tools from Intel. This includes Intel® oneAPI Video Processing Library and Intel® Media SDK.
This community is designed for sharing of public information. Please do not share Intel or third-party confidential information here.

Decode -> VPP Color Convert, is this a bug or by design?


VPP seems to require a bit of a "hack" to get it to work properly.  Can anyone tell me if this is true, or perhaps I've misunderstood something.  I want to do a colour convert from NV12 to YUY2 after a decode.  To that end my VPP parameters look like this:

    My_QSV_Vpp_Parameters.vpp.In.FourCC = MFX_FOURCC_NV12;
    My_QSV_Vpp_Parameters.vpp.Out.FourCC = MFX_FOURCC_YUY2;

The NV12 surfaces are coming from DecodeFrameAsync's surface pool.  With these parameters the allocator (D3D11Allocator) produces d3d surfaces for my vpp pool with the NV12 format (it uses the In.FourCC to construct them).  The resulting output is as you would expect, NV12.  I worked out the solution is to use these parameters for allocation:

    My_QSV_Vpp_Parameters.vpp.In.FourCC = MFX_FOURCC_YUY2;
    My_QSV_Vpp_Parameters.vpp.Out.FourCC = MFX_FOURCC_YUY2;

, to force the vpp pool surfaces to be yuy2, and then to change In.FourCC to MFX_FOURCC_NV12 just before the VPP Init function.  This seems to work OK as I get YUY2 output when I do it, NV12 output when I don't.

Does this look vaguely correct?

0 Kudos
3 Replies

Hi There,

I think is a feature, the VPP color space conversion depend on the in and output surface type. for more detail, you can also refer to sample_vpp






What I'm doing works but the API seems wrong to me.  As I say I have to manually flip the in/out fourcc parameters to get the correct D3D11 surfaces from the allocator, as it's different to what I need to pass in to the vpp init function.  The vpp sample isn't really any help.


Hi Robinson J,

I am doing some PoC similar to what you achieved. I would appreciate your response if you can help me to fix my problem.

I want to decode H.264 data into 422 UYVY but SDK can only decode into YUV 420. I found VPP can do that but I checked the "simple_6_decode_vpp_postproc" demo from the sample demos but I am not able to achieve it yet. I also tried to do what you have done but all the time I am getting NV12 as decoded data.

I am new to this SDK please advise what mistake I am doing? Also please advise which demo you referred to achieve YUV 422 decoding?

-- HRV