Closed IwachanOrigin closed 1 year ago
入手すら困難なスペシャルくそ雑魚スペックPC(STB)でもvideoCaptureCallback::OnReadSample関数の実処理部分をコメントアウトして動作を確認したところ、1.5%程度に抑えられた。 開発機では0.1%。 MFTを用いた色変換は卒業し、GPUでやる必要がありそう。
色はグレーアウトになってしまうが、GPUでYUVtoRGBする仕組みを追加した。 なぜグレーアウトになるのかはまだわからない。
NV12とIYUVはUVデータの並びが異なるだけで、それ以外は同じらしい。 ということで、CPUからGPUへデータをコピーする際にNV12のデータをIYUVと同じにすることで 同一のシェーダーを用いた色変換が出来るようになった。 dx11manager.cppでやってしまっているので、フォーマットごとに処理を切り替える仕組みが必要。
ビデオフォーマットを見て、生成するDirectX11Rendererクラスを切り替えるようにした。 残として、Pipelineクラスが利用するシェーダーの切り替えを追加する必要がある。
Pipelineクラスが利用するシェーダーの切り替えを追加した。
シェーダーを使うことでかなりCPU使用率は抑えられるようになったので、ひとまずは良しとしよう
色変換をCPUでやって、GPUに渡しているのが良くないみたいだ。 videoCaptureCallback::OnReadSample関数の実処理部分をコメントアウトして、IMFSampleだけを取得すると 開発機ではCPU使用率が0.1%になる。 Update texture~Renderingだけをコメントアウトすると、3~4%のままなのでここではほとんど負荷が掛からない。 となると、MFT使って色変換している部分が足を引っ張っている。 GPUで色変換するしかなさそうだ。