Date

Windows 7もRC版が出たことですし、これからは少しずつ Media Foundation も取り上げていきたいと思う。

今回は Media Foundation を使うために必要なスタートアップとシャットダウンだけを行うアプリケーションを作成する。

必要なヘッダーファイルをインクルードし、ライブラリをリンクする。

1
2
#pragma comment(lib, "mfplat.lib")
#include <mfapi.h>

次に MFStartup を呼び出す。

Version mfapi.hで定義されているMF_VERSIONを指定する。
dwFlags オプションのフラグ。C++の場合は省略可能。その場合はMFSTARTUP_FULLになる。

dwFlagsの意味は以下。

MFSTARTUP_NOSOCKET Socketライブラリを初期化しない。
MFSTARTUP_LITE MFSTARTUP_NOSOCKETと同じ。
MFSTARTUP_FULL Media Foundationプラットフォーム全体を初期化する。

スタートアップは次のように書く。

1
MFStartup(MF_VERSION);

シャットダウンするときは、次のように書く。

1
MFShutdown();

それでは実装していく。MediaFoundationはDirectShow同様COMベースで設計されているので、ATLを使うことにする。CAtlExeModuleTクラスから派生したクラスを作成し、PreMessageLoopMFStartupPostMessageLoopMFShutdownを呼ぶ。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class CMFDoNothing : public CAtlExeModuleT<CMFDoNothing>
{
    HRESULT PreMessageLoop(int nShowCmd) throw()
    {
        // Media Foundation スタートアップ
        try {
            CHResult hr;
            hr=MFStartup(MF_VERSION);
            hr=E_FAIL;
        }
        catch(HRESULT hr) {
            return hr;
        }
        // ... ウィンドウ作成処理
    }
    HRESULT PostMessageLoop() throw()
    {
        // Media Foundation シャットダウン
        try {
            CHResult hr;
            hr=MFShutdown();
        }
        catch(...) {
        }
        return S_OK;
    }
};

次回は、これをベースにMediaSessionを使ってWMVファイルを再生するところまでやってみたい。

https://github.com/mahorigahama/MFStartup


Comments

comments powered by Disqus