How to use mfxExtVppAuxData

How to use mfxExtVppAuxData

mediasdk-man.pdf says:

Header.BufferId- Must be MFX_EXTBUFF_VPP_AUXDATA
SpatialComplexity- Spatial complexity that resulted from scene change detection
TemporalComplexity- Temporal complexity that resulted from scene change detection
SceneChangeRate- Scene change detection rate (0-255) that indicates the likelihood of scene change
RepeatedFrame- If true, indicates that the current frame repeated the previous one

I'm tring to attach this buffer to mfxVideoParam::ExtParam and put it to MFXVideoVPP_Init but I have
MFX_ERR_INVALID_VIDEO_PARAM result after call.

My question is How to use mfxExtVppAuxData structure?

Can somebody help me to understand this feature?

7 Beiträge / 0 neu
Letzter Beitrag
Nähere Informationen zur Compiler-Optimierung finden Sie in unserem Optimierungshinweis.
Best Reply

Hi Peter,
mfxExtVppAuxData contains per-frame information.RunFrameVPPAsync will fill this structure if it is passed as an argument. Then user can additionally attach the structure to mfxEncodeCtrl structure so that encoder makes use of this information.
At VPP initialization stage you need to enableMFX_EXTBUFF_VPP_SCENE_ANALYSIS by using DOUSE option, you may also change parameters of scene change alogrithm by attaching anMFX_EXTBUFF_VPP_SCENE_ANALYSIS extended buffer.
Sample_vpp under \samples of Media SDK package shows how to perform these steps.
I hope this helps to understand the feature.
Regards,Nina

Nina,

My code still doesn't work. The aux always get zero value, Can you help to check my code?

Thanks
Paul

mfxExtVPPFrameRateConversion conversion;
memset(&conversion, 0, sizeof(conversion));
conversion.Header.BufferId = MFX_EXTBUFF_VPP_FRAME_RATE_CONVERSION;
conversion.Header.BufferSz = sizeof(conversion);
conversion.Algorithm = MFX_FRCALGM_DISTRIBUTED_TIMESTAMP;

mfxU32 vppDoUses[2] = {MFX_EXTBUFF_VPP_SCENE_ANALYSIS, MFX_EXTBUFF_VPP_DENOISE};
mfxExtVPPDoUse doUse;
memset(&doUse, 0, sizeof(doUse));
doUse.Header.BufferId = MFX_EXTBUFF_VPP_DOUSE;
doUse.Header.BufferSz = sizeof(doUse);
doUse.NumAlg = 2;
doUse.AlgList = vppDoUses;

mfxExtBuffer* extBuffers[2];
extBuffers[0] = &doUse.Header;
extBuffers[1] = &conversion.Header;
mVppParam.NumExtParam = 2;
mVppParam.ExtParam = extBuffers;

sts = mVpp->Init(&mVppParam);

mfxExtVppAuxData aux;
memset(&aux, 0, sizeof(aux));
aux.Header.BufferId = MFX_EXTBUFF_VPP_AUXDATA;
aux.Header.BufferSz = sizeof(aux);
sts = mVpp->RunFrameVPPAsync(surface, vppSync.surface, &aux, &vppSync.sync);

One more comment, this aux doesn't work on the Hardware version, but do work on the software version.
My laptop is Thinkpad X220 win7 with HD3000 display card.
Is anyway I can upgrade the display card driver?

Hi Paul,

We have confirmed the behavior you describe. It looks like this may be a bug in our HW implementation of this feature. We are currently investigating how to resolve this. I will update this forum thread as soon as I know more about the resolution.

Can you tell me the version of the graphics driver you have installed on your machine?

Thanks for reporting the issue and helping us improve the Media SDK product.

Regards,Petter

Intel HD3000
8.15.10.2538

Hi Paul,
I have an update on this topic. The Scene Change Detection feature does not work on current or previous generation Intel platforms. We have no plans on resolving the issue. Also, we will likely deprecate the feature on both SW and HW in upcoming Media SDK API release.

So, I'm sorry to say, but I would discourage you from using this feature in your application.

Regards,Petter

Melden Sie sich an, um einen Kommentar zu hinterlassen.