Media (Intel® Video Processing Library, Intel Media SDK)
Access community support with transcoding, decoding, and encoding in applications using media tools like Intel® oneAPI Video Processing Library and Intel® Media SDK
Announcements
The Intel Media SDK project is no longer active. For continued support and access to new features, Intel Media SDK users are encouraged to read the transition guide on upgrading from Intel® Media SDK to Intel® Video Processing Library (VPL), and to move to VPL as soon as possible.
For more information, see the VPL website.

Decode init is failing in Join session.

Sumit_S_
Beginner
282 Views

I am trying to implement 1:N transcode application using opaque memory. I am creating and joining two sdk session.

After joining session, decode_init() function is giving -16 error. This implementation is working perfectly when using system memory as IO_PATTERN..

Attached is the tracer log of the init function.

Here is the implementation.

IMSDKVars* DecodeInit(){

    IMSDKVars *decodevars = (IMSDKVars*)malloc(sizeof(IMSDKVars));

    mfxIMPL impl = MFX_IMPL_AUTO_ANY;
    mfxVersion ver = { {17, 1} };
    decodevars->sts = MFXInit(impl, &ver, &decodevars->session);

    decodevars->sts = MFXInit(impl, &ver, &decodevars->session2);
    decodevars->sts = MFXJoinSession(decodevars->session,decodevars->session2);

    memset(&decodevars->mfxParams, 0, sizeof(decodevars->mfxParams));
    decodevars->mfxParams.mfx.CodecId = MFX_CODEC_AVC;
    decodevars->mfxParams.IOPattern = MFX_IOPATTERN_OUT_OPAQUE_MEMORY;
    decodevars->mfxParams.mfx.FrameInfo.Width = 3840;
    decodevars->mfxParams.mfx.FrameInfo.Height = 2160;
    decodevars->mfxParams.mfx.FrameInfo.CropX = 0;
    decodevars->mfxParams.mfx.FrameInfo.CropY = 0;
    decodevars->mfxParams.mfx.FrameInfo.CropW = 3840;
    decodevars->mfxParams.mfx.FrameInfo.CropH = 2160;
    decodevars->mfxParams.mfx.FrameInfo.FourCC = MFX_FOURCC_NV12;
    decodevars->mfxParams.AsyncDepth = 4;

    mfxFrameAllocRequest DecRequest;
    memset(&DecRequest, 0, sizeof(DecRequest));
    decodevars->sts = MFXVideoDECODE_QueryIOSurf(decodevars->session, &decodevars->mfxParams, &DecRequest);

    decodevars->numSurfaces = DecRequest.NumFrameSuggested;

    decodevars->pmfxSurfaces = (mfxFrameSurface1**)malloc(sizeof(mfxFrameSurface1*)*decodevars->numSurfaces);
    for (int i = 0; i < decodevars->numSurfaces; i++) {
        decodevars->pmfxSurfaces = (mfxFrameSurface1*)malloc(sizeof(mfxFrameSurface1));
        memset(decodevars->pmfxSurfaces, 0, sizeof(mfxFrameSurface1));
        memcpy(&(decodevars->pmfxSurfaces->Info), &(DecRequest.Info), sizeof(mfxFrameInfo));
    }

    memset(&decodevars->extOpaqueAlloc, 0, sizeof(decodevars->extOpaqueAlloc));
    decodevars->extOpaqueAlloc.Header.BufferId = MFX_EXTBUFF_OPAQUE_SURFACE_ALLOCATION;
    decodevars->extOpaqueAlloc.Header.BufferSz = sizeof(mfxExtOpaqueSurfaceAlloc);
    mfxExtBuffer* pExtParamsDec = (mfxExtBuffer*) & decodevars->extOpaqueAlloc;

    decodevars->extOpaqueAlloc.Out.Surfaces = decodevars->pmfxSurfaces;
    decodevars->extOpaqueAlloc.Out.NumSurface = decodevars->numSurfaces;
    decodevars->extOpaqueAlloc.Out.Type = DecRequest.Type;

    decodevars->mfxParams.ExtParam = &pExtParamsDec;
    decodevars->mfxParams.NumExtParam = 1;

    decodevars->sts = MFXVideoDECODE_Init(decodevars->session, &decodevars->mfxParams);

    return decodevars;
}

.530684

0 Kudos
0 Replies
Reply