IwachanOrigin / usb_video_device_capture

0 stars 0 forks source link

cpu使用率が高い #23

Closed IwachanOrigin closed 1 year ago

IwachanOrigin commented 1 year ago

色変換をCPUでやって、GPUに渡しているのが良くないみたいだ。 videoCaptureCallback::OnReadSample関数の実処理部分をコメントアウトして、IMFSampleだけを取得すると 開発機ではCPU使用率が0.1%になる。 Update texture~Renderingだけをコメントアウトすると、3~4%のままなのでここではほとんど負荷が掛からない。 となると、MFT使って色変換している部分が足を引っ張っている。 GPUで色変換するしかなさそうだ。

IwachanOrigin commented 1 year ago

入手すら困難なスペシャルくそ雑魚スペックPC(STB)でもvideoCaptureCallback::OnReadSample関数の実処理部分をコメントアウトして動作を確認したところ、1.5%程度に抑えられた。 開発機では0.1%。 MFTを用いた色変換は卒業し、GPUでやる必要がありそう。

IwachanOrigin commented 1 year ago

色はグレーアウトになってしまうが、GPUでYUVtoRGBする仕組みを追加した。 なぜグレーアウトになるのかはまだわからない。

IwachanOrigin commented 1 year ago

NV12とIYUVはUVデータの並びが異なるだけで、それ以外は同じらしい。 ということで、CPUからGPUへデータをコピーする際にNV12のデータをIYUVと同じにすることで 同一のシェーダーを用いた色変換が出来るようになった。 dx11manager.cppでやってしまっているので、フォーマットごとに処理を切り替える仕組みが必要。

IwachanOrigin commented 1 year ago

ビデオフォーマットを見て、生成するDirectX11Rendererクラスを切り替えるようにした。 残として、Pipelineクラスが利用するシェーダーの切り替えを追加する必要がある。

IwachanOrigin commented 1 year ago

Pipelineクラスが利用するシェーダーの切り替えを追加した。

IwachanOrigin commented 1 year ago

シェーダーを使うことでかなりCPU使用率は抑えられるようになったので、ひとまずは良しとしよう