Intel SDK (一)

        Media SDK 的优势我就不说了上传一张实时监控的画面理解吧(此图由于csdn 限制压缩过),交流群:209406791!

Intel SDK (一)_第1张图片

  在使用这些API之前,我们必须了解一点基本的知识。对于Media SDK提供的decoder,VPP和encoder模块,在使用必须要先创建一个session--会话。利用这个已建的session,相应的decoder,VPP(图像处理)和encoder才能被创建。目前版本支持264 ,265 ,mpeg ,vc1的编解码

创建会话

 

typedef struct _mfxSession *mfxSession;
mfxStatus MFXInit(mfxIMPL impl, mfxVersion *ver, mfxSession *session);
mfxStatus MFXClose(mfxSession session);

mfxStatus MFXQueryIMPL(mfxSession session, mfxIMPL *impl);
mfxStatus MFXQueryVersion(mfxSession session, mfxVersion *version);

 

MFXInit()和MFXClose()分别是初始化和销毁函数,MFXQueryIMPL()和MFXQueryVersion()是查询参数配置函数。

对于MFXInit()的使用,在mfxIMPL类型必须被指定。在Intel平台,它的一般设置为MFX_IMPL_HARDWARE,而非Intel平台,一般为MFX_IMPL_SOFTWARE。

        在创建和初始化编解码Session时,我们需要制定编解码的实现方式(硬件方式还是软件方式)。最简单的方法是强制使用硬件方式。这会带来一个问题,在非Intel显卡支持平台,应用程序将无法正常工作。当然,如果强制使用软件方式,虽然应用程序能够工作于其他平台,但是在Intel显卡平台,硬件加速特性将荡然无存!可能网友会说,应用程序可以外加代码检测平台显卡来决定如何选择。非常赞同,但是程序的复杂度和效率将受到影响。幸运的是,Media SDK提供了一种自动选择功能,它会根据当前运行系统优化选择方案。在MFXInit函数中,枚举类型mfxIMPL定义AUTO功能:
typedef enum {
MFX_IMPL_AUTO=0, /* Auto Selection/In or Not Supported/Out */
MFX_IMPL_SOFTWARE, /* Pure Software Implementation */
MFX_IMPL_HARDWARE, /* Hardware Accelerated Implementation */
MFX_IMPL_UNSUPPORTED=0 /* One of the MFXQueryIMPL returns */
} mfxIMPL;
相应的简单实用方式如下:
mfxVersion version = {MFX_VERSION_MINOR, MFX_VERSION_MAJOR};
sts = m_mfxSession.Init(MFX_IMPL_AUTO, &version);
仅仅通过MFX_IMPL_AUTO的设置,问题迎刃而解。可能有网友会问,那么如何知道当前的编解码实用方法呢?不急,Media SDK考虑到了这种需求,它提供了mfxStatus MFXQueryIMPL(mfxSession session, mfxIMPL *impl)来查询当前采用的方法。具体实现如下:
BOOL IsHwAcclSupported( void )
{
mfxIMPL impl = MFX_IMPL_AUTO;
mfxSession session = NULL;
mfxVersion ver = {MFX_VERSION_MINOR, MFX_VERSION_MAJOR};

MFXInit( MFX_IMPL_AUTO, &ver, &session );
MFXQueryIMPL( session, &impl );
MFXClose( session );

return impl == MFX_IMPL_HARDWARE ? TRUE : FALSE;
}

你可能感兴趣的:(Intel SDK (一))