もうちょい色々試してから投げようかと思ったけど、業務の方が多忙でこのまま埋もれそうだったので忘れる前にメモ。
TC358743XBG HDMI to CSI-2 について
こちらを読んで試そうと思ったのがきっかけ。
東芝東芝デバイス&ストレージ TC358743XBGは HDMIの信号入力をCSI-2に変換するブリッジチップです。
よく映像配信とかでつかってる、HDMI入力をWebカメラに見せかける(UVCにブリッジする)やつではなく、こちらはRaspberry Pi や Jetson Nanoで同じものカメラ接続IFであるCSI-2に変換できます。
で、HDMIの映像ソースをRaspberry Piとかに入力できるとプログラマブルな配信機材っぽく使えたり、あわよくばそのままmobilenetとかで判定とかかけれたらおもしろいなと思ったわけです。
HDMIさえでればOKなら、スペック的には古くてもレンズはちゃんとしてる古いカメラとかも流量できるしね。(ここが後に悲劇を生むとは誰も思わなかった)
購入
Aliexpressで 「TC358743XBG」で検索すると山ほど出てくる。値段はだいたい 5000jpy前後
というわけで、さっそく買った。ぱっと見、基板レイアウト的にこの2種類がスタンダードっぽかったので、両方買ってみた。
ちなみに、オーダーしたのが 2020/04/11、届いたのは 2020/05/18 ごろなので、約1ヶ月かかった…まぁ触る時間無かったから良いんだけど。
セットアップ
- Raspberry Pi 4 の カメラコネクタ(CSI-2)に TC358743XBG を接続
-
vcgencmd get_camera
コマンドでsupported=1 detected=1
とかえってくる事を確認(認識OK) - TC358743XBG にHDMIソースを接続(今回は Cannon EOS M3のHDMI出力)
問題
さっそく raspistill -o img.jpg
とか試して見たが、以下のエラーが出る。
mmal: mmal_vc_component_enable: failed to enable component: ENOSPC
mmal: camera component couldn't be enabled
mmal: main: Failed to create camera component
mmal: Failed to run camera app. Please check for firmware updates
firmwareあげろと言う話なので sudo apt upgrade
も試したが、一向に改善なし。
途方にくれていたところ、何の気なしにHDMIソースをiPhoneに変えてみたらなんと写るではないか。
検証
HDMIの入力ソースにより挙動が変わる事が分かったので、とりあえず身の回りにあるデバイスで試す。
入力ソースの種類の他に、キャプチャデバイス側も比較対象が欲しいので、Amazonで売ってる比較的安価なHDMI to UVCキャプチャを使う。 TreasLin とか BasiColor とか ShuOneとかいろんなブランドで出てるけど多分中身は同じやつ。 ソフト的には MiraBox って名前になってる。
それぞれの入力ソースと、2つのキャプチャデバイスが映像を取得できたかどうかの結果は以下の通り。
HDMIソース | TC358743XBG + RasPi4 | MiraBox |
---|---|---|
Nvidia Shield TV | OK | OK |
iPhone XR + HDMIアダプタ | OK | OK |
秋葉原で適当に買った激安ムービーカム | OK | OK |
FireTV Stick | NG(※) | OK |
EOS M3 | NG | OK |
GoPro HERO 6 | NG | OK |
※上記エラーが発生する前にraspistillコマンドがハングアップしてしまう。再現率は 3/3。
結果
HDMI 詳しくないのでよく分からない。
EOS M3 と iPhone、ムービーカムの、ディスプレイ側の信号の認識は以下の通りで、特に変わらないように見える。
- iPhone : 1080p@60.0Hz, H: 67.5KHz, PCLK: 148.4MHz, HDCP 1.4 Enabled Sink
- EOS M3 : 1080p@60.0Hz, H: 67.5KHz, PCLK: 148.4MHz, HDCP Disabled
- ムービーカム: 1280x720, H: 67.5KHz, PCLK: 148.4MHz, HDCP Disabled
よく分からないし、僕自身は調べる術をもたないので、とりあえず記録として残すだけ。
動くには動くので、動作するデバイスでもって本来やりたかったことを今後試そうと。