[Armadillo:07441] Re: Armadillo-420 MJPG-streamer の画像乱れ問題について

Shin-ya Koga email@hidden
2011年 7月 29日 (金) 16:48:09 JST


サムシングプレシャスの古賀です。

中村さん([Armadillo:07440] ):
>ioctl(VIDIOC_DQBUF)でエラーがなければ、正常な画像が取り出せた、
>とするのが正しいと思います。

これは、ドライバのポリシー次第かなと思います。UVC ドライバが、
カメラ入力の映像フォーマットを把握し、フレームデータの内容を
解釈するべきかどうかという方針次第で、ドライバが不正フレーム
を drop するべきかどうかは変わりますよね。

>アプリが用意したバッファ(キュー)にドライバが画像を入れるとき、
>異常画像はキューに入らないようにするのが本来の姿ではないかと。

USB Video Class の仕様は、
 http://www.usb.org/developers/devclass_docs#approved
で公開されていますが、ここにある USB_Video_FAQ_1.1 を見ると、
"2.10.2 Incoming Data State Diagram for Frame-based Video Formats"
で UVC ホストが満たすべき状態遷移の図があります。その状態遷移図
では、フレーム内容の解釈を行う旨は、書かれていません。

UVC ドライバは、アイソクロナスもしくはバルク転送されたフレーム
データ片を集積してフレームデータを完成させるのみで、その内容は
関知しない、というのが、UVC の仕様から読み取れるポリシーのよう
に思えます。

なので、取得したフレームデータの内容が正しいのを解釈するのは、
V4L の UVC ドライバ上位レイヤか、または、アプリケーション自身の
役割/責任とするのが妥当なのかも知れません。

>昨日のsyslogデータを見直しててみたら、こんなのが残ってました。
>たぶん
>  # echo 255>  /sys/module/uvcvideo/parameters/trace
>とやったときのログだと思います。
…
>Jul 28 13:38:32 192.168.0.52 armadillo440-0 kernel: uvcvideo: Dropping payload (out of sync).
>Jul 28 13:38:32 192.168.0.52 armadillo440-0 last message repeated 89 time(s)
…
>何かの手がかりになりませんでしょうか。

このメッセージを出しているのは、UVC ドライバのソースのうち、
 /linux/drivers/media/video/uvc/uvc_video.c
で、それぞれ uvc_video_decode_isoc() と uvc_video_decode_end()
です。これらの関数の実装を見ると、上述した USB_Video_FAQ_1.1
記載の状態遷移図に素直に従っているような雰囲気です。

--
古賀信哉 (株)サムシングプレシャス



armadillo メーリングリストの案内