Closed IwachanOrigin closed 1 year ago
少なくともMJPEGには対応したい。 色変換はシェーダーでやりたい。
MJPEGが使えるなら、そっちを使う。 ダメなら、RGB32を使う。 https://learn.microsoft.com/ja-jp/windows/win32/medfound/supported-media-formats-in-media-foundation
いや、なんか間違えているっぽいぞ? RGB32, FHD, 30Pでもちゃんと性能が出ているコードは存在している。 設定をミスっているのかも。
https://github.com/IwachanOrigin/usb_video_device_capture/issues/14#issuecomment-1554267240 いや、なんか間違えているっぽいぞ? RGB32, FHD, 30Pでもちゃんと性能が出ているコードは存在している。 設定をミスっているのかも。
カメラによって、YUY2 , FHD, 30pは存在しないのに、設定できる場合がある。 もしかしたら、MFが良しなにやっていて、NV12, FHD, 30pでやってくれている可能性もある。 そういう、謎の事象に頼らないでちゃんとしたコードを書くことを優先しよう。
調査した限り、MFTにはMJPGをデコードする仕組みを持っていない。もしくは、壊れている。 MJPG to YUY2 to RGB32 このリンク先の手法を試したが、まず、MJPG to YUY2自体がうまくいかない。 選択可能な出力先フォーマットはNV12になっているが、NV12への変換もうまくいかない。 ProcessOutputから返ってくるHRESULTは常に「MF_E_TRANSFORM_NEED_MORE_INPUT」となる。 DirectShowにはフィルターとしてMJPGを変換する処理を持っているが、MFTには無いと結論づけた。 (または、俺が間違えている)
結局、デフォルトで利用できるデコーダーは以下リンクに記載の変換か、H264だけだと思う。 デジタル信号プロセッサー コーデックオブジェクト
以下のリンク先にはビデオコーデックに「MJPG」という記載があるのだが、リンクが無い。 MFでサポートされるメディア形式 Windows7まではサポートされていたのか、何なのか。 何もわからないのでここでMJPGのサポートを行うことはやめる。
少なくとも、NV12ならばFHDかつ30pはちゃんと性能が出る。 デバイス側にもメディアタイプをちゃんと設定する仕組みに変更したのでこの問題はクローズとする。
FHDで設定しても、実際に動作するフォーマットはMJPEGのみ...のような場合も存在する。 出来れば、各デバイスの性能をちゃんと発揮させてあげたい。