IwachanOrigin / usb_video_device_capture

0 stars 0 forks source link

フォーマットがRAWビデオの場合、非対応でも設定できたことになるが実際の解像度と異なる #14

Closed IwachanOrigin closed 1 year ago

IwachanOrigin commented 1 year ago

FHDで設定しても、実際に動作するフォーマットはMJPEGのみ...のような場合も存在する。 出来れば、各デバイスの性能をちゃんと発揮させてあげたい。

IwachanOrigin commented 1 year ago

少なくともMJPEGには対応したい。 色変換はシェーダーでやりたい。

IwachanOrigin commented 1 year ago

MJPEGが使えるなら、そっちを使う。 ダメなら、RGB32を使う。 https://learn.microsoft.com/ja-jp/windows/win32/medfound/supported-media-formats-in-media-foundation

IwachanOrigin commented 1 year ago

いや、なんか間違えているっぽいぞ? RGB32, FHD, 30Pでもちゃんと性能が出ているコードは存在している。 設定をミスっているのかも。

IwachanOrigin commented 1 year ago

https://github.com/IwachanOrigin/usb_video_device_capture/issues/14#issuecomment-1554267240 いや、なんか間違えているっぽいぞ? RGB32, FHD, 30Pでもちゃんと性能が出ているコードは存在している。 設定をミスっているのかも。

カメラによって、YUY2 , FHD, 30pは存在しないのに、設定できる場合がある。 もしかしたら、MFが良しなにやっていて、NV12, FHD, 30pでやってくれている可能性もある。 そういう、謎の事象に頼らないでちゃんとしたコードを書くことを優先しよう。

IwachanOrigin commented 1 year ago

調査した限り、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のサポートを行うことはやめる。

IwachanOrigin commented 1 year ago

少なくとも、NV12ならばFHDかつ30pはちゃんと性能が出る。 デバイス側にもメディアタイプをちゃんと設定する仕組みに変更したのでこの問題はクローズとする。