IntelSDK

Media SDK 的優勢我就不說了上傳一張實時監控的畫面理解吧(此圖由於csdn 限制壓縮過),交流羣:209406791!

  在使用這些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;
}

後續詳細請查閱原博客:

http://blog.csdn.net/ww506772362/article/category/2705037

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章