2

Ubuntu10.4でV4L2フレームワークを使い始めています。

現在、私はいくつかのテストを行うためにウェブカメラを使用しています。私はこのドキュメントに従って開始しましたが、インストールは正常に機能しました。アプリケーション例をダウンロードしてコンパイルしました。問題はビデオ出力です。私は以下を使用して実行可能ファイルを呼び出します。

# modprobe -r pwc
# modprobe -v pwc fps=15 compression=3 mbufs=4 fbufs=4 size=vga
# ./capturer_mmap -D /dev/video0 -w 640*480 -p 0 | ./viewer -w 640*480 -p 0 

この出力が与えられた場合:

ここに画像の説明を入力してください

端子への出力:

window size 640*480
Video bytespreline = 1280

Display:
Image byte order = LSBFirst
Bitmap unit      = 32
Bitmap bit order = LSBFirst
Bitmap pad       = 32

Window:
Depth            = 24
Red mask         = 0x00ff0000
Green mask       = 0x0000ff00
Blue mask        = 0x000000ff
Bits per R/G/B   = 8
Image byte order = LSBFirst
Bitmap unit      = 32
Bitmap bit order = LSBFirst
Bitmap pad       = 32
Depth            = 24
Red mask         = 0x00ff0000
Green mask       = 0x0000ff00
Blue mask        = 0x000000ff
Bits per pixel   = 32
Bytes per line   = 2560
IsShared         = True
XIO:  fatal IO error 11 (Resource temporarily unavailable) on X server ":0.0"
      after 431 requests (19 known processed) with 0 events remaining.
root@my-laptop:/home/foo/V4l2_samples-0.4.1# ./capturer_mmap -D /dev/video0 -w 640*480 -p 0  | ./viewer -w 640*480 -p 0
window size 640*480
Video bytespreline = 1280

Display:
Image byte order = LSBFirst
Bitmap unit      = 32
Bitmap bit order = LSBFirst
Bitmap pad       = 32

Window:
Depth            = 24
Red mask         = 0x00ff0000
Green mask       = 0x0000ff00
Blue mask        = 0x000000ff
Bits per R/G/B   = 8
Image byte order = LSBFirst
Bitmap unit      = 32
Bitmap bit order = LSBFirst
Bitmap pad       = 32
Depth            = 24
Red mask         = 0x00ff0000
Green mask       = 0x0000ff00
Blue mask        = 0x000000ff
Bits per pixel   = 32
Bytes per line   = 2560
IsShared         = True
XIO:  fatal IO error 11 (Resource temporarily unavailable) on X server ":0.0"
      after 101 requests (19 known processed) with 0 events remaining.

これを修正する方法がわかりません。Webcam ChesseアプリケーションでWebカメラを使用できるため、問題はCコードであると思います。どんな助けでも大歓迎です。どうもありがとう!

4

1 に答える 1

2

画像を完全に間違った形式で表示しているようです。

v4l2を使用する場合は、必ず「libv4l」(debianでパッケージ化されているため、ubuntuでも利用可能)を確認する必要があります。v4l2を使用すると、デバイスは非常に多数のビデオ形式のいずれかでフレームを出力できます。そのうちのいくつかは圧縮されています(たとえば、jpegを使用)。コアv4l2は、アプリケーションがサポートする特定の形式にイメージを変換する手段を提供しないため、理論的には、アプリケーションはすべての可能な形式をサポートする必要があります。

コードの重複を回避するために(v4l2対応の各アプリケーションは同じ問題に直面します!)、libv4lが作成されました。これにより、デバイスへの低レベルのアクセスが可能になりますが、同時に、いくつかの標準形式を使用してフレームにアクセスできることが保証されます。たとえば、デバイスがjpeg-outputのみをサポートし、アプリがRGB32フレームを要求する場合、libv4lは透過的に変換します。

libv4lをサポートせずにコンパイルされたアプリケーションで動作させるために、いくつかのLD_PRELOADトリックでlibv4lを使用することもできます(私の提案が理にかなっているかどうかを確認するためだけに)

于 2012-07-19T13:21:55.303 に答える