IMFVideoMixerControl
ビデオのレンダリングに使用されます。SourceReader を見ると、正しい軌道に乗っています。
これが私がすることです:
IMFSourceReader
ビデオ ソースごとに1 つ作成します。
- を作成し
IMFSinkWriter
、ソース リーダーのフレーム幅の合計に等しいフレーム幅で設定します。
IMFSourceReader::GetCurrentMediaType
ソース メディア タイプを取得するために使用します。
- 各ソース タイプのフレーム ディメンションを取得するには
MFGetAttributeSize
、GUID と共に使用します。MF_MT_FRAME_SIZE
- SinkWriter のメディア タイプを作成し、ソースからシンク メディア タイプに属性をコピーするために
MFCreateMediaType
使用します。IMFMediaType::CopyAllItems
MFSetAttributeSize
GUID と共に使用しMF_MT_FRAME_SIZE
て、シンク タイプの増加したフレーム ディメンションを設定します。
IMFSinkWriter::AddStream
幅属性を除き、ソース タイプと同じビデオ ストリームを作成するために使用します。
- ソースごとに IMFSourceReader::ReadSample を呼び出し、ソースごとに 1 つの IMFSample を提供します。
- 新しい を割り当て、フレーム幅を増やし
IMFSample
た新しい を取り付けます。IMFMediaBuffer
MFCopyImage
各ソース バッファを、割り当てられたメディア バッファの対応する側にコピーするために使用します。
- ファイル シンクへの
IMFSinkWriter::WriteSample
書き込みに使用します。IMFSample
この例では、ファイルの代わりにビデオ キャプチャ ソースを使用していますが、基本的な SourceReader/SinkWriter 処理については、このサンプルを参照してください。MFCreateSourceReaderFromURL
の代わりに使用して、ファイル SourceReader を作成できますMFCreateSourceReaderFromMediaSource
。
編集:あなたもオーディオについて尋ねたことに気づきました。私の答えは、ビデオ ストリームの合成のみに対応しています。