要件定義の不安をなくす。要件定義の不安をなくす。ユニファのバックエンド分割に学ぶイノベーションメタバース開発に必要な技術の基本知識をおさらい。Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。KB)ステレオオーディオをL/Rチャンネルで分離するフィルタの作成を通じて、1つの入力ピンと2つの出力ピンを持つDirectShowフィルタの作成方法を解説します。後編では出力ピンとサンプルを転送するところまでを実装し、動作確認します。動作確認おわりに参考文献はじめに前編では、フィルタクラスと入力ピンクラスを実装し、アップストリームフィルタと接続できるようになりました。後編では、出力ピンクラスを実装し、オーディオサンプルを転送できるようにします。本稿は前編の続きです。前回の記事を先にお読みください。クラス図も前編の記事に示してます。出力ピンクラスAudioOutPinを定義しましょう。これはCBaseOutputPinから派生させます。ここでも他のクラスと同様にいくつかオーバーライドすべきメソッドがあります(表1)。インターフェイスの問い合わせに応える。ピンがアクティブになったとき呼ばれる。ピンが非アクティブになっとき呼ばれる。フラッシュ処理の開始を入力ピンに要求する。フラッシュ処理の終了を入力ピンに要求する。ストリーム終了通知を入力ピンに出力する。新セグメント通知を入力ピンへ出力する。サンプルを入力ピンへ出力する。アロケータプロパティを設定してバッファサイズを決める(純粋仮想)。優先メディアタイプを提示する。タイプを受け入れるかどうかを判定する(純粋仮想)。表1における「入力ピン」とはダウンストリームフィルタの入力ピンのことです。*pmt);};上記のコードで使っている2つのクラス、COutputQueueとCPosPassThruについて少し説明しておきます。いずれも基底クラスライブラリで定義されています。COutputQueueとは、内部で新たなストリーミングスレッドを生成することにより、サンプルを非同期的に出力します。その名のとおりキューを持っており、複数サンプルの出力もサポートしています。同期的に処理をした場合、ある出力ピンのダウンストリームフィルタで処理をしている間、もう一方のピンの処理が始まりません。映像と音声を分離するフィルタの場合、映像のデコードやレンダリングを行っている間、音声のレンダリングが行われません。フィルタグラフが停止から実行状態に遷移するとき、ポーズ状態を経由しますが、レンダリングフィルタによってはポーズ状態になり最初のサンプルを受信した後、実行状態に遷移するまでロックすることがあります。これは複数のレンダリングフィルタを使った場合にデッドロックが発生する原因となります。一方のCPosPassThruはシーク処理をアップストリームフィルタに任せるクラスです。詳しくは「シークのサポート」で解説します。コンストラクタ・デストラクタ入力ピンと同様、特に必要な処理はありません。基底クラスであるCBaseOutputPinを初期化するだけです。__FUNCTION__);}デストラクタではCOutputQueueおよびCPosPassThruの解放を行います。新着記事一覧を見るイベント今後の予定を見るCodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。