I am trying to setup the following chain for video processing.
VPP1 -> VPP2
where VPP1Params.IOPattern =
MFX_IOPATTERN_IN_SYSTEM_MEMORY | MFX_IOPATTERN_OUT_OPAQUE_MEMORY; and
MFX_IOPATTERN_OUT_OPAQUE_MEMORY | MFX_IOPATTERN_IN_SYSTEM_MEMORY;
I am using mfxExtOpaqueSurfaceAlloc for the opaque surface alloc information. Now the problem is, when the intel media sdk library implementation is SW based, I am getting correct output after second vpp session is finished. But when the implementation is HW based, program exits with status code -17 (MFX_ERR_DEVICE_FAILED) from MFXVideoVPP_RunFrameVPPAsync function . I am currently running intel media sdk version 1.17.
In the release notes of version 1.19, it is stated in common feature that "Opaque memory usage extended to support external allocator in transcoding pipelines with mixed memory types. ". So, Opaque memory with mixed memory types is not supported prior to version 1.19? And if it is not the case, what might be the possible cause for the error?
As my understanding, the pipeline is VPP1->VPP2, according to your configuration, VPP1 has input of system memory, output of opaque memory which should be the input of the VPP2, so in your configuration, VPP2Params.IOPattern should be MFX_IOPATTERN_IN_OPAQUE_MEMORY | MFX_IOPATTERN_OUT_SYSTEM_MEMORY, so your configuration might be a mistake depends on the mode.
The opaque memory means the system decides the memory, in software mode, all memory goes to system, this is no problem; but in hardware mode, the opaque memory normally means the video memory, this might cause the failure. Could you change to VPP2Params.IOPattern = MFX_IOPATTERN_IN_OPAQUE_MEMORY | MFX_IOPATTERN_OUT_SYSTEM_MEMORY to see if the failure is solved?
I made mistake while writing my question. In my code I am giving correct parameters for IOPattern, which is
MFX_IOPATTERN_IN_SYSTEM_MEMORY | MFX_IOPATTERN_OUT_OPAQUE_MEMORY
and VPP2Params.IOPattern = MFX_IOPATTERN_IN_OPAQUE_MEMORY | MFX_IOPATTERN_OUT_SYSTEM_MEMORY;
Still i am getting same error ( MFX_ERR_DEVICE_FAILED ).
For your original question, can you try to set up the same memory type to see if you still get the failure?
I don't think the 1.19 doesn't support mix type of memory, I will confirm. What is your whole pipeline, DEC->VPP1->VPP2->ENC?