LINUX.ORG.RU

OpenCV + USB Webcam + ARM mini2440


0

2

mini2440 - arm920t одноплатник

Билдрутом сделал собраз rootfs с libv4l и OpenCV из транка.
Ядро 2.6.32.2

/sys/dev/char/81:0 появляется когда подключаю вебкамеру

дальше:

mknod /dev/video0 c 81 0
chmod 666 /dev/video0

У меня есть Qt экзампл webcam->QImage. Работает наромально в ubuntu 10.10

Но когда кросскомпилю на одноплатник mini2440:

# ./QtOpenCV -qws
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
VIDIOC_QUERYMENU: Invalid argument
libv4l2: error allocating conversion buffer
mmap: Cannot allocate memory
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
Unable to stop the stream.: Bad file descriptor
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
munmap: Invalid argument
libv4l1: error allocating v4l1 buffer: Cannot allocate memory
HIGHGUI ERROR: V4L: Mapping Memmory from video source error: Invalid
argument
HIGHGUI ERROR: V4L: Initial Capture Error: Unable to load initial memory
buffers.
./QtOpenCV: ../../webcam/QtOpenCV/main.cpp: 15: int main(int, char**):
Assertion `image' failed.
Aborted

В main.cpp:
14: CvCapture * camera = cvCreateCameraCapture(-1);
15: assert(camera);

ps. Buildroot из git://git.buildroot.net/buildroot

opencv.mk запилил сам с параметрами -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_NEW_PYTHON_SUPPORT=OFF -DCMAKE_INSTALL_LOCAL_ONLY=ON -DOPENCV_BUILD_3RDPARTY_LIBS=OFF -DWITH_FFMPEG=OFF -DWITH_JPEG=OFF -DWITH_PNG=OFF -DWITH_TIFF=OFF -DWITH_JPEG_2000=OFF -DWITH_JASPER=OFF -DWITH_HIGHGUI=ON -DWITH_GTK=OFF -DWITH_QT=ON -DWITH_V4L=ON -DWITH_GPU=OFF -DBUILD_SHARED_LIBS=ON -DCMAKE_SYSTEM_NAME=Linux

куда копать?

★★★★★

Последнее исправление: VladimirMalyk (всего исправлений: 1)

Все эти Invalid argument и Cannot allocate memory выглядят как проблема в ядре (в драйвере камеры, наверное).

anonymous
()
Ответ на: комментарий от anonymous

если заговорили о камере, то при подключении:

# tail -f /var/log
usb 1-1: new full speed USB device using s3c2410-ohci and address 3
usb 1-1: New USB device found, idVendor=093a, idProduct=2700
usb 1-1: New USB device strings: Mfr=16, Product=96, SerialNumber=0
usb 1-1: Product: USB2.0_Camera
usb 1-1: Manufacturer: PixArt Imaging Inc.
usb 1-1: configuration #1 chosen from 1 choice
uvcvideo: Found UVC 1.00 device USB2.0_Camera (093a:2700)
Aug 16 03:07:01 buildroot user.info kernel: usb 1-1: new full speed USB device using s3c2410-ohci and address 3
Aug 16 03:07:01 buildroot user.info kernel: usb 1-1: New USB device found, idVendor=093a, idProduct=2700
Aug 16 03:07:01 buildroot user.info kernel: usb 1-1: New USB device strings: Mfr=16, Product=96, SerialNumber=0
Aug 16 03:07:01 buildroot user.info kernel: usb 1-1: Product: USB2.0_Camera
Aug 16 03:07:01 buildroot user.info kernel: usb 1-1: Manufacturer: PixArt Imaging Inc.
Aug 16 03:07:01 buildroot user.info kernel: usb 1-1: configuration #1 chosen from 1 choice
Aug 16 03:07:01 buildroot user.info kernel: uvcvideo: Found UVC 1.00 device USB2.0_Camera (093a:2700)

и попосля:

# v4l2-compliance
Running on 2.6.32

Driver Info:
   Driver name : uvcvideo
   Card type : USB2.0_Camera
   Bus info : usb-s3c24xx-1
   Driver version: 0.1.0
   Capabilities : 0x04000001
      Video Capture
      Streaming

Compliance test for device /dev/video0 (not using libv4l2):

Required ioctls:
   test VIDIOC_QUERYCAP: OK

Allow for multiple opens:
   test second video open: OK
   test VIDIOC_QUERYCAP: OK
      fail: VIDIOC_G_PRIORITY failed
   test VIDIOC_G/S_PRIORITY: FAIL


Debug ioctls:
   test VIDIOC_DBG_G_CHIP_IDENT: Not Supported
   test VIDIOC_DBG_G/S_REGISTER: Not Supported
   test VIDIOC_LOG_STATUS: Not Supported

Input ioctls:
   test VIDIOC_G/S_TUNER: Not Supported
   test VIDIOC_G/S_FREQUENCY: Not Supported
   test VIDIOC_ENUMAUDIO: Not Supported
   test VIDIOC_G/S/ENUMINPUT: OK
   test VIDIOC_G/S_AUDIO: Not Supported
   Inputs: 1 Audio Inputs: 0 Tuners: 0

Output ioctls:
   test VIDIOC_G/S_MODULATOR: Not Supported
   test VIDIOC_G/S_FREQUENCY: Not Supported
   test VIDIOC_ENUMAUDOUT: Not Supported
   test VIDIOC_G/S/ENUMOUTPUT: Not Supported
   test VIDIOC_G/S_AUDOUT: Not Supported
   Outputs: 0 Audio Outputs: 0 Modulators: 0

Control ioctls:
      fail: missing control class for class 00980000
   test VIDIOC_QUERYCTRL/MENU: FAIL
      fail: returned control value out of range
      fail: invalid control 00980900
   test VIDIOC_G/S_CTRL: FAIL
      fail: returned control value out of range
      fail: invalid control 00980900
   test VIDIOC_G/S/TRY_EXT_CTRLS: FAIL
   Standard Controls: 7 Private Controls: 0

Input/Output configuration ioctls:
   test VIDIOC_ENUM/G/S/QUERY_STD: Not Supported
   test VIDIOC_ENUM/G/S/QUERY_DV_PRESETS: Not Supported
   test VIDIOC_G/S_DV_TIMINGS: Not Supported

Total: 23 Succeeded: 19 Failed: 4 Warnings: 0

VladimirMalyk ★★★★★
() автор топика
Ответ на: комментарий от VladimirMalyk

> v4l2-compliance

разве кутопия не через v4l работает? посмотри в сырцы, имхо их надо переписывать под v4l2, это разные вещи.

Rastafarra ★★★★
()
Ответ на: комментарий от Rastafarra

там ранее есть

libv4l2: error allocating conversion buffer


судя по всему, оно не взлетает и пробует libv4l1.
хотя мне не хватает знаний чтобы внятно ответить на этот вопрос

VladimirMalyk ★★★★★
() автор топика
Ответ на: комментарий от Rastafarra

сырцы есть - OpenCV из транка

и в конечном итоге проблема заключается в том, что cvCreateCameraCapture() не отрабатывает корректно.

в качестве доп диагностики:

# ffmpeg -f video4linux2 -s 640x480 -i /dev/video0
FFmpeg version 0.6.1, Copyright (c) 2000-2010 the FFmpeg developers
built on May 13 2011 20:26:27 with gcc 4.5.3
configuration: --enable-cross-compile --cross-prefix=/home/malyk/Workspace/RZB-small/buildroot/buildroot/output/host/usr/bin/arm-unknown-linux-uclibcgnueabi- --sysroot=/home/malyk/Workspace/RZB-small/buildroot/buildroot/output/host/usr/arm-unknown-linux-uclibcgnueabi/sysroot --host-cc=/usr/bin/gcc --arch=arm --target-os=linux --extra-cflags=-fPIC --prefix=/usr --enable-shared --disable-avfilter --enable-gpl --disable-nonfree --enable-ffmpeg --disable-ffplay --disable-ffserver --enable-postproc --enable-swscale --enable-indevs --enable-outdevs --enable-pthreads --enable-zlib --disable-armv5te
libavutil 50.15. 1 / 50.15. 1
libavcodec 52.72. 2 / 52.72. 2
libavformat 52.64. 2 / 52.64. 2
libavdevice 52. 2. 0 / 52. 2. 0
libswscale 0.11. 0 / 0.11. 0
libpostproc 51. 2. 0 / 51. 2. 0
Diverting av_*_packet function calls to libavcodec. Recompile to improve performance
Segmentation fault

что примечательно, прежде чем рявкнуть «Segmentation fault», оно пару секунд висит. и пока оно висит диод на камере загорается, что означает что камера работает

VladimirMalyk ★★★★★
() автор топика
Ответ на: комментарий от Rastafarra

может его лучше не gcc 4.5.3 собирать а чемнить постарше аля 4.4.x? ядро не из новых, мало ли

VladimirMalyk ★★★★★
() автор топика

решено по мотивам http://pramodpoudel.blogspot.com/2010_06_01_archive.html

uboot нужно было дополнительно передавать параметр mem=128M:

setenv bootcmd mmcinit \; ext2load mmc 0:2 0x31000000 uImage_T35_positron \; bootm

setenv bootargs console=ttySAC0,115200 root=/dev/nfs nfsroot=192.168.0.12:/home/malyk/Workspace/RZB-small/nfs/fs rw ip=192.168.0.252 mini2440=2tb rootwait init=/linuxrc mem=128M

saveenv

что интересно, на запрос «libv4l2: error allocating conversion buffer» гугл выдавал всякую муть. bing.com выдал статью с решением в топе поиска

VladimirMalyk ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.