Quantcast
Channel: Intel® Software - Media
Viewing all articles
Browse latest Browse all 697

Program crashed when running the frame reset routine by using VPP in MediaSamples_Linux_2017R2

$
0
0

Hello,

I integrated the sample_vpp program into our encoder and tried to perform one overlay stream on the primary stream. However, when the program runs into frame number 65527 (NOT_INIT_VALUE = 0xFFF7), reset routine will be triggered. The problem is the code will return error to me. I used the code in sample.vpp and here is the main code I mentioned:

do
    {
        if (bNeedReset)
        {
            paramID++;
            bNeedReset = false;
            nextResetFrmNum = (Params.resetFrmNums.size() > paramID) ? Params.resetFrmNums[paramID] : NOT_INIT_VALUE;

            //prepare mfxParams
            sts = InitParamsVPP(&mfxParamsVideo, &Params, paramID);
            MSDK_CHECK_STATUS_SAFE(sts, "InitParamsVPP failed", {WipeResources(&Resources); WipeParams(&Params);});

            sts = ConfigVideoEnhancementFilters(&Params, &Resources, paramID);
            MSDK_CHECK_STATUS_SAFE(sts, "ConfigVideoEnchancementFilters failed", {WipeResources(&Resources); WipeParams(&Params);});

            sts = Resources.pProcessor->pmfxVPP->Reset(Resources.pVppParams);
            MSDK_CHECK_STATUS_SAFE(sts, "Resources.pProcessor->pmfxVPP->Reset failed", {WipeResources(&Resources); WipeParams(&Params);});

            ownToMfxFrameInfo( &(Params.frameInfoIn[paramID]),  &realFrameInfoIn[0]);
            ownToMfxFrameInfo( &(Params.frameInfoOut[paramID]), &realFrameInfoOut);
            UpdateSurfacePool(mfxParamsVideo.vpp.Out, allocator.responseOut.NumFrameActual, allocator.pSurfacesOut);
            if(Params.numStreams==1)
            {
                UpdateSurfacePool(mfxParamsVideo.vpp.In,  allocator.responseIn[0].NumFrameActual,  allocator.pSurfacesIn[0]);
            }
            else
            {
                for(int i=0;i<Params.numStreams;i++)
                {
                    ownToMfxFrameInfo(&(Params.inFrameInfo[i]),  &realFrameInfoIn[i]);

                    UpdateSurfacePool(mfxParamsVideo.vpp.In, allocator.responseIn[i].NumFrameActual, allocator.pSurfacesIn[i]);
                }
            }

            msdk_printf(MSDK_STRING("VPP reseted at frame number %d\n"), numGetFrames);
        }

	//... ...

    } while (bNeedReset);

 

I try to debug on it and find that when the program gets frame number 65527, the reset routine will enter the above code. The first time, InitParamsVPP return error to me and sts=MFX_ERR_UNSUPPORTED(-3). I followed the code InitParamsVPP and find that the problem is neither frameInfoOut and frameInfoIn set correctly.

 

if (pInParams->frameInfoIn[paramID].nWidth == 0 || pInParams->frameInfoIn[paramID].nHeight == 0 ){
        return MFX_ERR_UNSUPPORTED;
}
if (pInParams->frameInfoOut[paramID].nWidth == 0 || pInParams->frameInfoOut[paramID].nHeight == 0 ){
        return MFX_ERR_UNSUPPORTED;
}

 

m_Params->frameInfoIn[paramID].nWidth 0
m_Params.frameInfoIn[m_paramID].nHeight 0
m_Params.frameInfoIn[m_paramID].dFrameRate 1
m_Params->frameInfoIn[paramID].CropH 1080
m_Params.frameInfoIn[m_paramID].CropW 1920
m_Params->frameInfoIn[paramID].CropX 0
m_Params.frameInfoIn[m_paramID].CropY 0

m_Params->frameInfoOut[paramID].CropH 0
m_Params.frameInfoOut[m_paramID].CropW 0
m_Params->frameInfoOut[paramID].CropX 0
m_Params.frameInfoOut[m_paramID].CropY 0
m_Params->frameInfoOut[paramID].nWidth 0
m_Params.frameInfoOut[m_paramID].nHeight 0
m_Params.frameInfoOut[m_paramID].dFrameRate 1

Then, I make a function MakingFrameInfo() to make the values of the above correct before passing InitParamsVPP 

mfxStatus MakingFrameInfo(CEncoder *encoder, sInputParams* pParams){

    mfxStatus sts = MFX_ERR_NONE;
    vector<COverlay>::const_iterator ciiprimary2 = encoder->GetEncoderProfile()->m_overlay_primary.begin();
    pParams->frameInfoIn[m_paramID].nWidth = (mfxU16)ciiprimary2->width;
    pParams->frameInfoIn[m_paramID].nHeight = (mfxU16)ciiprimary2->height;
    pParams->frameInfoIn[m_paramID].dFrameRate = (mfxF64) ciiprimary2->framerate;
    pParams->frameInfoIn[m_paramID].CropH = (mfxU16)ciiprimary2->croph;
    pParams->frameInfoIn[m_paramID].CropW = (mfxU16)ciiprimary2->cropw;
    pParams->frameInfoIn[m_paramID].CropX = (mfxU16) ciiprimary2->cropx;
    pParams->frameInfoIn[m_paramID].CropY = (mfxU16)ciiprimary2->cropy;
    char * temp2 = (char *)ciiprimary2->infourcc.c_str();
    pParams->frameInfoIn[m_paramID].FourCC = Str2FourCC(temp2);
    pParams->frameInfoIn[m_paramID].PicStruct = (mfxU16)ciiprimary2->PicStruct;
    pParams->frameInfoIn[m_paramID].BitDepthChroma = 0;
    pParams->frameInfoIn[m_paramID].BitDepthLuma  = 0;

    vector<COverlay>::const_iterator ciiprimary = encoder->GetEncoderProfile()->m_overlay_primary.begin();
    pParams->frameInfoOut[m_paramID].nWidth= (mfxU16)ciiprimary->width;
    pParams->frameInfoOut[m_paramID].nHeight = (mfxU16)ciiprimary->height;
    pParams->frameInfoOut[m_paramID].dFrameRate = (mfxF64)ciiprimary->framerate;
    pParams->frameInfoOut[m_paramID].CropH = (mfxU16)ciiprimary->croph;
    pParams->frameInfoOut[m_paramID].CropW = (mfxU16)ciiprimary->cropw;
    pParams->frameInfoOut[m_paramID].CropX =  (mfxU16)ciiprimary->cropx;
    pParams->frameInfoOut[m_paramID].CropY = (mfxU16)ciiprimary->cropy;
    char * temp3 = (char *)ciiprimary->infourcc.c_str();
    pParams->frameInfoOut[m_paramID].FourCC = Str2FourCC(temp3);
    pParams->frameInfoOut[m_paramID].PicStruct = (mfxU16)ciiprimary->PicStruct;
    pParams->frameInfoOut[m_paramID].BitDepthChroma = 0;
    pParams->frameInfoOut[m_paramID].BitDepthLuma  = 0;
    return sts;
}

 

After that, I can pass through the checking and run the program and reset successfully. However, when the program runs into the reset routine the second time, it returns error MFX_ERR_INVALID_VIDEO_PARAM(-15) on Reset function. Below is the video parameter of the Reset function. I am not sure what is going on and would like to ask for help on it. 

m_Resources.pVppParams->vpp.In.Height 1088
m_Resources.pVppParams->vpp.In.Width 1920
m_Resources.pVppParams->vpp.In.CropH 1088
m_Resources.pVppParams->vpp.In.CropW 1920
m_Resources.pVppParams->vpp.In.CropX 0
m_Resources.pVppParams->vpp.In.CropY 0
m_Resources.pVppParams->vpp.In.FrameRateExtN 30
m_Resources.pVppParams->vpp.In.FrameRateExtD 1

m_Resources.pVppParams->vpp.Out.Height 1088
m_Resources.pVppParams->vpp.Out.Width 1920
m_Resources.pVppParams->vpp.Out.CropH 1080
m_Resources.pVppParams->vpp.Out.CropW 1920
m_Resources.pVppParams->vpp.Out.CropX 0
m_Resources.pVppParams->vpp.Out.CropY 0
m_Resources.pVppParams->vpp.Out.FrameRateExtN 30
m_Resources.pVppParams->vpp.Out.FrameRateExtD 1

Many Thanks,

Michael Hui

 

Thread Topic: 

Question

Viewing all articles
Browse latest Browse all 697

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>