Захват потока веб-камеры с V4L2 не удался - PullRequest
2 голосов
/ 26 февраля 2012

Я начинаю работать с платформой V4L2 в Ubuntu 10.4.

В настоящее время я использую веб-камеру для некоторых тестов.Я следую этой документации, чтобы начать, установка прошла нормально.Я скачал и скомпилировал пример приложения.Проблема заключается в выводе видео, я вызываю исполняемый файл, используя:

# 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 

с учетом этого вывода:

enter image description here

Вывод на терминал:

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.

Понятия не имею, как это исправить.Я полагаю, что пробрем находится в коде C, потому что я могу использовать веб-камеру с приложением Webcam Chesse.Любая помощь очень ценится.Большое спасибо!

1 Ответ

2 голосов
/ 19 июля 2012

похоже, что вы отображаете изображение в совершенно неправильном формате.

при работе с v4l2 вы обязательно должны проверить " libv4l " (упакован в debian, поэтому также доступен в ubuntu). v4l2 позволяет устройству выводить свои кадры в любом из очень большого числа видеоформатов, некоторые из которых сжимаются (например, с использованием jpeg). Core v4l2 не предоставляет никаких средств для преобразования изображения в определенный формат, поддерживаемый вашим приложением, поэтому теоретически ваше приложение должно поддерживать все возможные форматы.

во избежание дублирования кода (каждое приложение с поддержкой v4l2 сталкивается с одной и той же проблемой!), Была создана libv4l: она обеспечивает низкоуровневый доступ к устройству, но в то же время гарантирует, что к кадру можно получить доступ, используя несколько стандартные форматы. например если устройство поддерживает только jpeg-output и ваше приложение запрашивает кадры RGB32, libv4l будет конвертировать для вас прозрачно.

вы даже можете использовать libv4l с некоторыми трюками LD_PRELOAD, чтобы заставить его работать с приложениями, которые были скомпилированы без поддержки libv4l (просто чтобы проверить, имеет ли мое предложение смысл)

...