Open6

Momo/RasPiのMJPEG HWデコード失敗調査

こーのいけこーのいけ

hello_mmal_jpegでの確認方法。

  1. 上のZennスクラップに書いた方法で一コマ分のJPEGデータをファイルに落とす。
  2. RasPi上に持っていって、./hello_mmal_jpeg.bin <保存したファイル> する

結果が

vc.ril.image_decode:out:0(I420)
 type: 3, fourcc: I420
 bitrate: 0, framed: 0
 extra data: 0, (nil)
 width: 736, height: 368, (0,0,724,362)
start decoding
received event length 96, EFCH
----------Port format changed----------
vc.ril.image_decode:out:0type: video, fourcc: I420
 bitrate: 0, framed: 0
 extra data: 0, (nil)
 width: 736, height: 368, (0,0,724,362)
 pixel aspect ratio: 0/0, frame rate: 0/0
 buffers num: 1(opt 1, min 1), size: 406272(opt 406272, min: 406272), align: 0
-----------------to---------------------
type: video, fourcc: I420
 bitrate: 0, framed: 0
 extra data: 0, 0x7b9330
 width: 256, height: 256, (0,0,256,256)
 pixel aspect ratio: 0/0, frame rate: 0/0
 buffers num (opt 1, min 1), size (opt 98304, min: 98304)
----------------------------------------
Retrieved buffer 0x7f71b8
decoded frame (flags 1, size 406272) count 0
stop decoding

のようにdecoded frameを含んでたら成功(count 0って何だろうと思いつつ)

vc.ril.image_decode:out:0(I420)
 type: 3, fourcc: I420
 bitrate: 0, framed: 0
 extra data: 0, (nil)
 width: 736, height: 368, (0,0,724,362)
start decoding
stop decoding

のようにdecoded frameを含まずにstop decodingが出たら失敗とする

こーのいけこーのいけ
機種 Momo結果 hello_mmal_jpeg
PTZ Optics
YOUZIPPER HDC-265M
Logicool C525n × ×
YOUZIPPER HDC-264M ×
Angetube 825
DEPSTECH DW49 × ×
LIEWEG
J JOYACCESS
JellyCamb × ×
Logicool C922n ×

Dellの内蔵カメラはラズパイにつなぎようがないので除外。
10台中5台がMomoラズパイHW MJPEGデコーダNG(うち2台はhello_mmal_jpegだとOK)

こーのいけこーのいけ

JellyCamb、DEPSTECHの2台はblocks=80のDRIが、Logicool C525nはblocks=10のDRIが入っている。
HDC-264Mは0xFF 0xFEのコメントセグメントが入っている(UVC1.1のMJPEG payloadには記載がない)。
PTZ OpticsのようにDRIがあってもblocks=0の冗長な定義であればOK。

こーのいけこーのいけ

もうちょい対応表を充実させる。DRI>0とコメントありがMomoでうまくいかない?

機種 Momo結果 hello_mmal_jpeg DRI blocks コメントセグメント YCbCrの間引き
PTZ Optics 0 なし 4:2:0
YOUZIPPER HDC-265M なし なし 4:2:0
Logicool C525n × × 10 なし 4:2:2
YOUZIPPER HDC-264M × なし あり 4:2:0
Angetube 825 なし なし 4:2:2
DEPSTECH DW49 × × 80 なし 4:2:2
LIEWEG 0 なし 4:2:0
J JOYACCESS なし なし 4:2:2
JellyCamb × × 80 なし 4:2:2
Logicool C922n × なし あり 4:2:2
こーのいけこーのいけ

別の実験として、Gconというツールでリスタート(DRIで定義してイメージデータにリスタートマーカ―を挟み、差分計算から全体計算に切り替える)のありなしだけの違いがあるJPEGファイルを作ってみた。
これをhello_mmal_jpegに食わせると・・・どっちもデコードに成功する。