How to deal with MFX_ERR_MORE_SURFACE when do FRC

How to deal with MFX_ERR_MORE_SURFACE when do FRC

Lihang Z.的头像

Hi, I want to use the FRC in Media SDK.

I modified the sample "sample_multi_transcode" in "Intel\Media SDK 2013\samples\sample_multi_transcode".

The code I modified:

In pipeline_transcode.h,

    Add 

        mfxExtVPPFrameRateConversion m_FrameRateConversion;

    into Class CTranscodingPipeline.

In pipeline_transcode.cpp,

    In CTranscodingPipeline::CTranscodingPipeline()

         Init m_FrameRateConversion:

           m_FrameRateConversion.Header.BufferId = MFX_EXTBUFF_VPP_FRAME_RATE_CONVERSION;

           m_FrameRateConversion.Header.BufferSz = sizeof(mfxExtVPPFrameRateConversion);

    In mfxStatus CTranscodingPipeline::InitVppMfxParams()

        Add m_FrameRateConversion into m_VppExtParams:

             m_mfxVppParams.vpp.Out.FrameRateExtN *= 2;

             m_FrameRateConversion.Algorithm = MFX_FRCALGM_FRAME_INTERPOLATION;

             m_VppExtParams.push_back((mfxExtBuffer *)&m_FrameRateConversion);

 When I try to run this code, I will meet MFX_ERR_MORE_SURFACE from sts = m_pmfxVPP->RunFrameVPPAsync(pSurfaceIn, pmfxSurface, NULL, &pExtSurface->Syncp);  in mfxStatus CTranscodingPipeline::VPPOneFrame().

I think that this Error is make sense, because the output from the decoder is 30Hz, and FRC want to convert it from 30 to 60, we should send more surface to FRC to save the more 30Hz(30->60). But I have no idea how to send the more surfaces to VPP.

Anybody can share me a sample code about how to use FRC algorithm.

Appreciated for any help.

8 帖子 / 0 new
最新文章
如需更全面地了解编译器优化,请参阅优化注意事项
Tony Pabon (Intel)的头像

Hi,

Can you provide information about what MediaSDK platform you are using? 

Is this seen using the software DLL, or do you have a 2nd, 3rd, or 4th Gen processor?  If it is the latter, can you provide the driver version?

The use of MFX_FRCALGM_FRAME_INTERPOLATION is a feature of API 1.6, and you should make sure you have actually initialized the session with this level API (or greater).  If API 1.6 is supported by your implementation, you may see MFX_WRN_FILTER_SKIPPED if the platform does not actually support this processing request.  (This is a new feature to Intel(r) 4th Generation Core Processors).

-Tony
Lihang Z.的头像

Hi Tony,
The Medis SDK I used is the latest Intel Media SDK 2013 downloaded from "http://software.intel.com/en-us/vcsource/tools/media-sdk"
The CPU in my PC is i3-2120CPU@3.30GHz, OS is 64-bit Windows8. The Driver Version of CPU is 6.2.9200.16384.
I have checked the API Version. The API Version for MFX_IMPL_SOFTWARE is 1.6, but the API Version for MFX_IMPL_HARDWARE is only 1.4.
How can I get Version 1.6 API for MFX_IMPL_HARDWARE?
Appreciated for your help.

Nina Kurina (Intel)的头像

Hi there,

For the reference how to handle MFX_ERR_MORE_SURFACE status please check out the sample_vpp app, it has support for FRC.

Hardware accelerated 1.6 API will be available with the 4th generation of Intel Core processors codenamed Haswell. With the platform you are running on you can use 1.4 API subset. With regards to FRC, it is supported in 1.4, just not the MFX_FRCALGM_FRAME_INTERPOLATION type of algorithm.

Regards,

Nina

Lihang Z.的头像

Hi all,
I have fixed the MFX_ERR_MORE_SURFACE error. Since my platform only support API1.4, I use MFX_FRCALGM_PRESERVE_TIMESTAMP instead of MFX_FRCALGM_FRAME_INTERPOLATION.
Now I have a new problem.
I want to do 30fps->60fps FRC. The input frame rate is 30Hz. The frame rate of output is 60Hz as I expected.
But the total frame number is still the same number as the original input video: the number of original input frame is 400 frames, the number of output frame is 400 frames too.
It seems that VPP only play the original video fast instead as increase the frame number.

Lihang Z.的头像

Please ignore my last post. I have resolved the problem.

Lihang Z.的头像

Hi Nina and Tony,
Since Ivy Bridge CPU only support V1.4API, I should buy a new platform to use V1.6API and the FRC feature.
As Nina mentioned that “Hardware accelerated 1.6 API will be available with the 4th generation of Intel Core processors codenamed Haswell.”, I will buy a Haswell CPU laptop from Dell.
The model is Latitude E6540 and the Spec of this laoptop is:
Processor:              4th gen Intel® Core™ i7-4800MQ Processor (2.7GHz, 6M cache, Upgradable to Intel® vPro™ technology)
Operating System:  Windows 7 Professional, 64-bit, English
Display:                 15.6in FHD (1920x1080) Anti-Glare LED
Memory:                8GB DDR3L at 1600MHz
Hard Drive:             500GB 5400rpm SATA Solid State Hybrid Drive
Optical Drive:         8X DVD+/-RW
Video Card:           AMD Radeon HD 8790M Graphics 2GB GDDR5

Whether I can use V1.6API and use FRC feature on this platform?
Appreciated for your support.

Tony Pabon (Intel)的头像

Hi,

Yes, that processor does include support interpolated FRC support, however since it includes a desrete graphics accelerator (AMD), I am not sure of the platform's architecture to allow access to the Intel graphics accelerator.

The platform may expose both adpaters as unique devices, the platform may contain 'switchable graphics' that allow you to control which adapter is used as the default adapter for each program, or the platform may not expose Intel's adapter at all.  I suspect you will be able to use the Intel adapter, but you may want to check with Dell first.

 

-Tony

登陆并发表评论。