[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 メーリングリストの案内