プログラマのつれづれなるままにプログラマのつれづれなるままに音宮志久が思ったことなどをネタにします。プログラムネタ・数学ネタがメインです。MediaFoundation管理クラスの宣言1件のフィードバック2020年のオリンピック開催が東京に決まったというニュースが景気よく流れています。なると東京ビックサイトで開催場所がかぶるコミケはいったいどうなるのでしょうかね。前回は特徴と使用するライブラリなどについて書きました。管理するクラスの宣言を見ていきたいと思います。//__mfsession_h__管理クラスにはIMFAsyncCallbackの実装が必要なんですねちなみにIMFAsyncCallbackはMediaFoundation側から使用側にコールバックがあるときに渡されるインターフェイスで、この場合はイベント管理(再生終了など)の通知を受け取るために実装する必要があります。面倒なのはこのIMFAsyncCallbackはIUnknownを継承しているため、IUnknownを実装しなければならない、というところです。このために番外編でIUnknownの実装を行ったというわけです。これがあるおかげで参照カウントの管理などが外に出ているため見通しが良くなります。使用するインターフェイスは?今回再生で使用するMediaFoundationのインターフェイスは以下の通りになります。メディア全体の状態を管理する。MediaFoundation内でバイト単位のデータをやりとりするときに使うインターフェイス。メディア再生時の基準時間の管理を行う。ビデオ状態の管理を行う。オーディオの音量管理を行う。DirectShowのIBasicAudioの拡張そのほかにもこの宣言内でIMFPresentationDescriptorやらIMFStreamDescriptorやらIMFTopologyNodeやら出てきていますが、これらは使うときに説明します。見てわかるとおり、MediaFoundationのインターフェイスは基本的にIMF~で始まります。だれも国際機関の名前ではありません。使うインターフェイスがわからないと管理の仕方もわからないですよね。このあたりはDirectShowと同じです。あと、時間管理はMFTIMEを使います。いってもDirectShowのREFERENCE_TIMEと同じ定義で意味も100nsを1とする単位系なので意味もほぼ同じです。先頭にWM_MFSNOTIFYがあるようにウィンドウプロシージャにメッセージを飛ばしますのでそれを受ける部分も必要になることを覚えておいてください。一応動画再生の基本要素を宣言している動画再生に必要な機能は一通りあると思います。ちなみにビデオが有効の時の出力先はコンストラクタで渡されるウィンドウハンドルのウィンドウです。このあたりもDirectShowの基本形と同じです。次回からいよいよ実装まずはコンストラクタとデストラクタ、データの読み込みと解放ですか・・・。コメントをキャンセルメールアドレスが公開されることはありません。志久プログラムネタや思いついたり世間で話題になっている数学ネタを解説したりしています。プログラマとしては今年度(つまり2020年3月)までの復帰となるか、完全復帰となるか、別の仕事に戻るかは運と実力次第。ちなみに教育系のプログラムでもOKです。アクセスカウンタアクセス数:スポンサーリンク。