今日はMedia Foundationドキュメントをみながらスワップチェインをどう出力するのかを考えていた。GPUメモリ -> CPUメモリの転送も極力減らしたいし、 拡大縮小もGPUにやらせたい。で以下の手順でいけるのではないかと。
- スワップチェインと同じ大きさのテクスチャ・サーフェースAを作る。
- 出力したいビデオサイズと同じ大きさのテクスチャ・サーフェースBを作る。
- 出力したいビデオサイズと同じ大きさのステージ・サーフェースCを作る。
- ID3D11DeviceContext::CopyResourceを使ってスワップ・チェイン→Aにコピー。
- Aをテクスチャとし、Bと同じ大きさの四角形をBに描画。
- BをID3D11DeviceContext::CopyResourceでCにコピー。
- CをMAPして読出し、sinkwriterを使いH.264形式で書き込み。
これで一度試してみようかなと思う。
Media Foundationドキュメントを見るとDirectXサーフェース関係のAPIも用意されていてこれはいったい何なのかなと思って調べてもいる。 この内容しだいでは手順も変わってくるかと思う。