NetBSD video(4) support, patch 2 of 3
* Decouple Video4Linux2 support from Video4Linux as existence of v4l2 on a system does not imply support for v4l. * Don't use V4L's struct video_window in V4L2 code. * Removed __USE_GNU as comment says: /* support for MJPEG is only available with libjpeg and gcc, because it's use libjepg and fmemopen() so replace with test for fmemopen() if found necessary.
This commit is contained in:
parent
d90b8d615c
commit
681ffd9a21
@ -172,7 +172,8 @@ CV_IMPL CvCapture * cvCreateCameraCapture (int index)
|
|||||||
defined(HAVE_TYZX) || \
|
defined(HAVE_TYZX) || \
|
||||||
defined(HAVE_VFW) || \
|
defined(HAVE_VFW) || \
|
||||||
defined(HAVE_LIBV4L) || \
|
defined(HAVE_LIBV4L) || \
|
||||||
(defined(HAVE_CAMV4L) && defined(HAVE_CAMV4L2)) || \
|
defined(HAVE_CAMV4L) || \
|
||||||
|
defined(HAVE_CAMV4L2) || \
|
||||||
defined(HAVE_VIDEOIO) || \
|
defined(HAVE_VIDEOIO) || \
|
||||||
defined(HAVE_GSTREAMER) || \
|
defined(HAVE_GSTREAMER) || \
|
||||||
defined(HAVE_DC1394_2) || \
|
defined(HAVE_DC1394_2) || \
|
||||||
@ -217,7 +218,7 @@ CV_IMPL CvCapture * cvCreateCameraCapture (int index)
|
|||||||
return capture;
|
return capture;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined HAVE_LIBV4L || (defined (HAVE_CAMV4L) && defined (HAVE_CAMV4L2)) || defined HAVE_VIDEOIO
|
#if defined HAVE_LIBV4L || defined HAVE_CAMV4L || defined HAVE_CAMV4L2 || defined HAVE_VIDEOIO
|
||||||
capture = cvCreateCameraCapture_V4L (index);
|
capture = cvCreateCameraCapture_V4L (index);
|
||||||
if (capture)
|
if (capture)
|
||||||
return capture;
|
return capture;
|
||||||
|
@ -202,7 +202,7 @@ make & enjoy!
|
|||||||
|
|
||||||
#include "precomp.hpp"
|
#include "precomp.hpp"
|
||||||
|
|
||||||
#if !defined WIN32 && ((defined HAVE_CAMV4L && defined HAVE_CAMV4L2) || defined HAVE_VIDEOIO)
|
#if !defined WIN32 && (defined HAVE_CAMV4L || defined HAVE_CAMV4L2 || defined HAVE_VIDEOIO)
|
||||||
|
|
||||||
#define CLEAR(x) memset (&(x), 0, sizeof (x))
|
#define CLEAR(x) memset (&(x), 0, sizeof (x))
|
||||||
|
|
||||||
@ -214,16 +214,18 @@ make & enjoy!
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_CAMVAL
|
||||||
#include <linux/videodev.h>
|
#include <linux/videodev.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <asm/types.h> /* for videodev2.h */
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
|
||||||
#ifdef HAVE_CAMV4L2
|
#ifdef HAVE_CAMV4L2
|
||||||
|
#include <asm/types.h> /* for videodev2.h */
|
||||||
#include <linux/videodev2.h>
|
#include <linux/videodev2.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -293,11 +295,13 @@ typedef struct CvCaptureCAM_V4L
|
|||||||
int deviceHandle;
|
int deviceHandle;
|
||||||
int bufferIndex;
|
int bufferIndex;
|
||||||
int FirstCapture;
|
int FirstCapture;
|
||||||
|
#ifdef HAVE_CAMV4L
|
||||||
struct video_capability capability;
|
struct video_capability capability;
|
||||||
struct video_window captureWindow;
|
struct video_window captureWindow;
|
||||||
struct video_picture imageProperties;
|
struct video_picture imageProperties;
|
||||||
struct video_mbuf memoryBuffer;
|
struct video_mbuf memoryBuffer;
|
||||||
struct video_mmap *mmaps;
|
struct video_mmap *mmaps;
|
||||||
|
#endif /* HAVE_CAMV4L */
|
||||||
char *memoryMap;
|
char *memoryMap;
|
||||||
IplImage frame;
|
IplImage frame;
|
||||||
|
|
||||||
@ -350,9 +354,6 @@ static int icvSetVideoSize( CvCaptureCAM_V4L* capture, int w, int h);
|
|||||||
static int numCameras = 0;
|
static int numCameras = 0;
|
||||||
static int indexList = 0;
|
static int indexList = 0;
|
||||||
|
|
||||||
#ifdef HAVE_CAMV4L2
|
|
||||||
|
|
||||||
// IOCTL handling for V4L2
|
|
||||||
static int xioctl( int fd, int request, void *arg)
|
static int xioctl( int fd, int request, void *arg)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -366,8 +367,6 @@ static int xioctl( int fd, int request, void *arg)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* HAVE_CAMV4L2 */
|
|
||||||
|
|
||||||
/* Simple test program: Find number of Video Sources available.
|
/* Simple test program: Find number of Video Sources available.
|
||||||
Start from 0 and go to MAX_CAMERAS while checking for the device with that name.
|
Start from 0 and go to MAX_CAMERAS while checking for the device with that name.
|
||||||
If it fails on the first attempt of /dev/video0, then check if /dev/video is valid.
|
If it fails on the first attempt of /dev/video0, then check if /dev/video is valid.
|
||||||
@ -398,6 +397,8 @@ static void icvInitCapture_V4L() {
|
|||||||
|
|
||||||
}; /* End icvInitCapture_V4L */
|
}; /* End icvInitCapture_V4L */
|
||||||
|
|
||||||
|
#ifdef HAVE_CAMV4L
|
||||||
|
|
||||||
static int
|
static int
|
||||||
try_palette(int fd,
|
try_palette(int fd,
|
||||||
struct video_picture *cam_pic,
|
struct video_picture *cam_pic,
|
||||||
@ -415,6 +416,8 @@ try_palette(int fd,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* HAVE_CAMV4L */
|
||||||
|
|
||||||
#ifdef HAVE_CAMV4L2
|
#ifdef HAVE_CAMV4L2
|
||||||
|
|
||||||
static int try_palette_v4l2(CvCaptureCAM_V4L* capture, unsigned long colorspace)
|
static int try_palette_v4l2(CvCaptureCAM_V4L* capture, unsigned long colorspace)
|
||||||
@ -439,6 +442,8 @@ static int try_palette_v4l2(CvCaptureCAM_V4L* capture, unsigned long colorspace)
|
|||||||
|
|
||||||
#endif /* HAVE_CAMV4L2 */
|
#endif /* HAVE_CAMV4L2 */
|
||||||
|
|
||||||
|
#ifdef HAVE_CAMV4L
|
||||||
|
|
||||||
static int try_init_v4l(CvCaptureCAM_V4L* capture, char *deviceName)
|
static int try_init_v4l(CvCaptureCAM_V4L* capture, char *deviceName)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -454,7 +459,6 @@ static int try_init_v4l(CvCaptureCAM_V4L* capture, char *deviceName)
|
|||||||
/* No matter what the name - it still must be opened! */
|
/* No matter what the name - it still must be opened! */
|
||||||
capture->deviceHandle = open(deviceName, O_RDWR);
|
capture->deviceHandle = open(deviceName, O_RDWR);
|
||||||
|
|
||||||
|
|
||||||
if (capture->deviceHandle == 0)
|
if (capture->deviceHandle == 0)
|
||||||
{
|
{
|
||||||
detect = -1;
|
detect = -1;
|
||||||
@ -468,7 +472,6 @@ static int try_init_v4l(CvCaptureCAM_V4L* capture, char *deviceName)
|
|||||||
if (ioctl(capture->deviceHandle, VIDIOCGCAP, &capture->capability) < 0)
|
if (ioctl(capture->deviceHandle, VIDIOCGCAP, &capture->capability) < 0)
|
||||||
{
|
{
|
||||||
detect = 0;
|
detect = 0;
|
||||||
|
|
||||||
icvCloseCAM_V4L(capture);
|
icvCloseCAM_V4L(capture);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -481,54 +484,64 @@ static int try_init_v4l(CvCaptureCAM_V4L* capture, char *deviceName)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* HAVE_CAMV4L */
|
||||||
|
|
||||||
#ifdef HAVE_CAMV4L2
|
#ifdef HAVE_CAMV4L2
|
||||||
|
|
||||||
static int try_init_v4l2(CvCaptureCAM_V4L* capture, char *deviceName)
|
static int try_init_v4l2(CvCaptureCAM_V4L* capture, char *deviceName)
|
||||||
{
|
{
|
||||||
|
|
||||||
// if detect = -1 then unable to open device
|
|
||||||
// if detect = 0 then detected nothing
|
|
||||||
// if detect = 1 then V4L2 device
|
|
||||||
int detect = 0;
|
|
||||||
|
|
||||||
|
|
||||||
// Test device for V4L2 compability
|
// Test device for V4L2 compability
|
||||||
|
// Return value:
|
||||||
|
// -1 then unable to open device
|
||||||
|
// 0 then detected nothing
|
||||||
|
// 1 then V4L2 device
|
||||||
|
|
||||||
|
int deviceIndex;
|
||||||
|
|
||||||
/* Open and test V4L2 device */
|
/* Open and test V4L2 device */
|
||||||
capture->deviceHandle = open (deviceName, O_RDWR /* required */ | O_NONBLOCK, 0);
|
capture->deviceHandle = open (deviceName, O_RDWR /* required */ | O_NONBLOCK, 0);
|
||||||
|
if (-1 == capture->deviceHandle)
|
||||||
|
|
||||||
|
|
||||||
if (capture->deviceHandle == 0)
|
|
||||||
{
|
{
|
||||||
detect = -1;
|
#ifndef NDEBUG
|
||||||
|
fprintf(stderr, "(DEBUG) try_init_v4l2 open \"%s\": %s\n", deviceName, strerror(errno));
|
||||||
|
#endif
|
||||||
icvCloseCAM_V4L(capture);
|
icvCloseCAM_V4L(capture);
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (detect == 0)
|
|
||||||
{
|
|
||||||
CLEAR (capture->cap);
|
CLEAR (capture->cap);
|
||||||
if (-1 == xioctl (capture->deviceHandle, VIDIOC_QUERYCAP, &capture->cap))
|
if (-1 == xioctl (capture->deviceHandle, VIDIOC_QUERYCAP, &capture->cap))
|
||||||
{
|
{
|
||||||
detect = 0;
|
#ifndef NDEBUG
|
||||||
|
fprintf(stderr, "(DEBUG) try_init_v4l2 VIDIOC_QUERYCAP \"%s\": %s\n", deviceName, strerror(errno));
|
||||||
|
#endif
|
||||||
icvCloseCAM_V4L(capture);
|
icvCloseCAM_V4L(capture);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
CLEAR (capture->capability);
|
|
||||||
capture->capability.type = capture->cap.capabilities;
|
|
||||||
|
|
||||||
/* Query channels number */
|
/* Query channels number */
|
||||||
if (-1 != xioctl (capture->deviceHandle, VIDIOC_G_INPUT, &capture->capability.channels))
|
if (-1 == xioctl (capture->deviceHandle, VIDIOC_G_INPUT, &deviceIndex))
|
||||||
{
|
{
|
||||||
detect = 1;
|
#ifndef NDEBUG
|
||||||
}
|
fprintf(stderr, "(DEBUG) try_init_v4l2 VIDIOC_G_INPUT \"%s\": %s\n", deviceName, strerror(errno));
|
||||||
}
|
#endif
|
||||||
|
icvCloseCAM_V4L(capture);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return detect;
|
/* Query information about current input */
|
||||||
|
CLEAR (capture->inp);
|
||||||
|
capture->inp.index = deviceIndex;
|
||||||
|
if (-1 == xioctl (capture->deviceHandle, VIDIOC_ENUMINPUT, &capture->inp))
|
||||||
|
{
|
||||||
|
#ifndef NDEBUG
|
||||||
|
fprintf(stderr, "(DEBUG) try_init_v4l2 VIDIOC_ENUMINPUT \"%s\": %s\n", deviceName, strerror(errno));
|
||||||
|
#endif
|
||||||
|
icvCloseCAM_V4L(capture);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -551,17 +564,12 @@ static int autosetup_capture_mode_v4l2(CvCaptureCAM_V4L* capture)
|
|||||||
else
|
else
|
||||||
|
|
||||||
#ifdef HAVE_JPEG
|
#ifdef HAVE_JPEG
|
||||||
#ifdef __USE_GNU
|
|
||||||
/* support for MJPEG is only available with libjpeg and gcc,
|
|
||||||
because it's use libjepg and fmemopen()
|
|
||||||
*/
|
|
||||||
if (try_palette_v4l2(capture, V4L2_PIX_FMT_MJPEG) == 0 ||
|
if (try_palette_v4l2(capture, V4L2_PIX_FMT_MJPEG) == 0 ||
|
||||||
try_palette_v4l2(capture, V4L2_PIX_FMT_JPEG) == 0)
|
try_palette_v4l2(capture, V4L2_PIX_FMT_JPEG) == 0)
|
||||||
{
|
{
|
||||||
capture->palette = PALETTE_MJPEG;
|
capture->palette = PALETTE_MJPEG;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (try_palette_v4l2(capture, V4L2_PIX_FMT_YUYV) == 0)
|
if (try_palette_v4l2(capture, V4L2_PIX_FMT_YUYV) == 0)
|
||||||
@ -598,6 +606,8 @@ static int autosetup_capture_mode_v4l2(CvCaptureCAM_V4L* capture)
|
|||||||
|
|
||||||
#endif /* HAVE_CAMV4L2 */
|
#endif /* HAVE_CAMV4L2 */
|
||||||
|
|
||||||
|
#ifdef HAVE_CAMV4L
|
||||||
|
|
||||||
static int autosetup_capture_mode_v4l(CvCaptureCAM_V4L* capture)
|
static int autosetup_capture_mode_v4l(CvCaptureCAM_V4L* capture)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -631,6 +641,8 @@ static int autosetup_capture_mode_v4l(CvCaptureCAM_V4L* capture)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* HAVE_CAMV4L */
|
||||||
|
|
||||||
#ifdef HAVE_CAMV4L2
|
#ifdef HAVE_CAMV4L2
|
||||||
|
|
||||||
static void v4l2_scan_controls_enumerate_menu(CvCaptureCAM_V4L* capture)
|
static void v4l2_scan_controls_enumerate_menu(CvCaptureCAM_V4L* capture)
|
||||||
@ -981,8 +993,8 @@ static int _capture_V4L2 (CvCaptureCAM_V4L *capture, char *deviceName)
|
|||||||
|
|
||||||
/* Set up Image data */
|
/* Set up Image data */
|
||||||
cvInitImageHeader( &capture->frame,
|
cvInitImageHeader( &capture->frame,
|
||||||
cvSize( capture->captureWindow.width,
|
cvSize( capture->form.fmt.pix.width,
|
||||||
capture->captureWindow.height ),
|
capture->form.fmt.pix.height ),
|
||||||
IPL_DEPTH_8U, 3, IPL_ORIGIN_TL, 4 );
|
IPL_DEPTH_8U, 3, IPL_ORIGIN_TL, 4 );
|
||||||
/* Allocate space for RGBA data */
|
/* Allocate space for RGBA data */
|
||||||
capture->frame.imageData = (char *)cvAlloc(capture->frame.imageSize);
|
capture->frame.imageData = (char *)cvAlloc(capture->frame.imageSize);
|
||||||
@ -992,6 +1004,8 @@ static int _capture_V4L2 (CvCaptureCAM_V4L *capture, char *deviceName)
|
|||||||
|
|
||||||
#endif /* HAVE_CAMV4L2 */
|
#endif /* HAVE_CAMV4L2 */
|
||||||
|
|
||||||
|
#ifdef HAVE_CAMV4L
|
||||||
|
|
||||||
static int _capture_V4L (CvCaptureCAM_V4L *capture, char *deviceName)
|
static int _capture_V4L (CvCaptureCAM_V4L *capture, char *deviceName)
|
||||||
{
|
{
|
||||||
int detect_v4l = 0;
|
int detect_v4l = 0;
|
||||||
@ -1110,6 +1124,8 @@ static int _capture_V4L (CvCaptureCAM_V4L *capture, char *deviceName)
|
|||||||
return 1;
|
return 1;
|
||||||
}; /* End _capture_V4L */
|
}; /* End _capture_V4L */
|
||||||
|
|
||||||
|
#endif /* HAVE_CAMV4L */
|
||||||
|
|
||||||
static CvCaptureCAM_V4L * icvCaptureFromCAM_V4L (int index)
|
static CvCaptureCAM_V4L * icvCaptureFromCAM_V4L (int index)
|
||||||
{
|
{
|
||||||
static int autoindex;
|
static int autoindex;
|
||||||
@ -1159,10 +1175,12 @@ static CvCaptureCAM_V4L * icvCaptureFromCAM_V4L (int index)
|
|||||||
icvCloseCAM_V4L(capture);
|
icvCloseCAM_V4L(capture);
|
||||||
V4L2_SUPPORT = 0;
|
V4L2_SUPPORT = 0;
|
||||||
#endif /* HAVE_CAMV4L2 */
|
#endif /* HAVE_CAMV4L2 */
|
||||||
|
#ifdef HAVE_CAMV4L
|
||||||
if (_capture_V4L (capture, deviceName) == -1) {
|
if (_capture_V4L (capture, deviceName) == -1) {
|
||||||
icvCloseCAM_V4L(capture);
|
icvCloseCAM_V4L(capture);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
#endif /* HAVE_CAMV4L */
|
||||||
#ifdef HAVE_CAMV4L2
|
#ifdef HAVE_CAMV4L2
|
||||||
} else {
|
} else {
|
||||||
V4L2_SUPPORT = 1;
|
V4L2_SUPPORT = 1;
|
||||||
@ -1271,7 +1289,9 @@ static int icvGrabFrameCAM_V4L(CvCaptureCAM_V4L* capture) {
|
|||||||
|
|
||||||
#ifdef HAVE_CAMV4L2
|
#ifdef HAVE_CAMV4L2
|
||||||
|
|
||||||
|
#ifdef HAVE_CAMV4L
|
||||||
if (V4L2_SUPPORT == 1)
|
if (V4L2_SUPPORT == 1)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
|
|
||||||
for (capture->bufferIndex = 0;
|
for (capture->bufferIndex = 0;
|
||||||
@ -1301,8 +1321,12 @@ static int icvGrabFrameCAM_V4L(CvCaptureCAM_V4L* capture) {
|
|||||||
perror ("VIDIOC_STREAMON");
|
perror ("VIDIOC_STREAMON");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
} else
|
}
|
||||||
#endif /* HAVE_CAMV4L2 */
|
#endif /* HAVE_CAMV4L2 */
|
||||||
|
#if defined(HAVE_CAMV4L) && defined(HAVE_CAMV4L2)
|
||||||
|
else
|
||||||
|
#endif /* HAVE_CAMV4L && HAVE_CAMV4L2 */
|
||||||
|
#ifdef HAVE_CAMV4L
|
||||||
{
|
{
|
||||||
|
|
||||||
for (capture->bufferIndex = 0;
|
for (capture->bufferIndex = 0;
|
||||||
@ -1321,6 +1345,7 @@ static int icvGrabFrameCAM_V4L(CvCaptureCAM_V4L* capture) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif /* HAVE_CAMV4L */
|
||||||
|
|
||||||
#if defined(V4L_ABORT_BADJPEG) && defined(HAVE_CAMV4L2)
|
#if defined(V4L_ABORT_BADJPEG) && defined(HAVE_CAMV4L2)
|
||||||
if (V4L2_SUPPORT == 1)
|
if (V4L2_SUPPORT == 1)
|
||||||
@ -1342,8 +1367,12 @@ static int icvGrabFrameCAM_V4L(CvCaptureCAM_V4L* capture) {
|
|||||||
|
|
||||||
mainloop_v4l2(capture);
|
mainloop_v4l2(capture);
|
||||||
|
|
||||||
} else
|
}
|
||||||
#endif /* HAVE_CAMV4L2 */
|
#endif /* HAVE_CAMV4L2 */
|
||||||
|
#if defined(HAVE_CAMV4L) && defined(HAVE_CAMV4L2)
|
||||||
|
else
|
||||||
|
#endif /* HAVE_CAMV4L && HAVE_CAMV4L2 */
|
||||||
|
#ifdef HAVE_CAMV4L
|
||||||
{
|
{
|
||||||
|
|
||||||
capture->mmaps[capture->bufferIndex].frame = capture->bufferIndex;
|
capture->mmaps[capture->bufferIndex].frame = capture->bufferIndex;
|
||||||
@ -1363,6 +1392,7 @@ static int icvGrabFrameCAM_V4L(CvCaptureCAM_V4L* capture) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif /* HAVE_CAMV4L */
|
||||||
|
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
@ -2080,6 +2110,7 @@ static IplImage* icvRetrieveFrameCAM_V4L( CvCaptureCAM_V4L* capture, int) {
|
|||||||
#ifdef HAVE_CAMV4L2
|
#ifdef HAVE_CAMV4L2
|
||||||
if (V4L2_SUPPORT == 0)
|
if (V4L2_SUPPORT == 0)
|
||||||
#endif /* HAVE_CAMV4L2 */
|
#endif /* HAVE_CAMV4L2 */
|
||||||
|
#ifdef HAVE_CAMV4L
|
||||||
{
|
{
|
||||||
|
|
||||||
/* [FD] this really belongs here */
|
/* [FD] this really belongs here */
|
||||||
@ -2088,6 +2119,7 @@ static IplImage* icvRetrieveFrameCAM_V4L( CvCaptureCAM_V4L* capture, int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif /* HAVE_CAMV4L */
|
||||||
|
|
||||||
/* Now get what has already been captured as a IplImage return */
|
/* Now get what has already been captured as a IplImage return */
|
||||||
|
|
||||||
@ -2108,8 +2140,12 @@ static IplImage* icvRetrieveFrameCAM_V4L( CvCaptureCAM_V4L* capture, int) {
|
|||||||
capture->frame.imageData = (char *)cvAlloc(capture->frame.imageSize);
|
capture->frame.imageData = (char *)cvAlloc(capture->frame.imageSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else
|
}
|
||||||
#endif /* HAVE_CAMV4L2 */
|
#endif /* HAVE_CAMV4L2 */
|
||||||
|
#if defined(HAVE_CAMV4L) && defined(HAVE_CAMV4L2)
|
||||||
|
else
|
||||||
|
#endif /* HAVE_CAMV4L && HAVE_CAMV4L2 */
|
||||||
|
#ifdef HAVE_CAMV4L
|
||||||
{
|
{
|
||||||
|
|
||||||
if((capture->frame.width != capture->mmaps[capture->bufferIndex].width)
|
if((capture->frame.width != capture->mmaps[capture->bufferIndex].width)
|
||||||
@ -2123,6 +2159,7 @@ static IplImage* icvRetrieveFrameCAM_V4L( CvCaptureCAM_V4L* capture, int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif /* HAVE_CAMV4L */
|
||||||
|
|
||||||
#ifdef HAVE_CAMV4L2
|
#ifdef HAVE_CAMV4L2
|
||||||
|
|
||||||
@ -2150,10 +2187,6 @@ static IplImage* icvRetrieveFrameCAM_V4L( CvCaptureCAM_V4L* capture, int) {
|
|||||||
(unsigned char*)capture->frame.imageData);
|
(unsigned char*)capture->frame.imageData);
|
||||||
break;
|
break;
|
||||||
#ifdef HAVE_JPEG
|
#ifdef HAVE_JPEG
|
||||||
#ifdef __USE_GNU
|
|
||||||
/* support for MJPEG is only available with libjpeg and gcc,
|
|
||||||
because it's use libjepg and fmemopen()
|
|
||||||
*/
|
|
||||||
case PALETTE_MJPEG:
|
case PALETTE_MJPEG:
|
||||||
if (!mjpeg_to_rgb24(capture->form.fmt.pix.width,
|
if (!mjpeg_to_rgb24(capture->form.fmt.pix.width,
|
||||||
capture->form.fmt.pix.height,
|
capture->form.fmt.pix.height,
|
||||||
@ -2163,7 +2196,6 @@ static IplImage* icvRetrieveFrameCAM_V4L( CvCaptureCAM_V4L* capture, int) {
|
|||||||
(unsigned char*)capture->frame.imageData))
|
(unsigned char*)capture->frame.imageData))
|
||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case PALETTE_YUYV:
|
case PALETTE_YUYV:
|
||||||
@ -2206,8 +2238,12 @@ static IplImage* icvRetrieveFrameCAM_V4L( CvCaptureCAM_V4L* capture, int) {
|
|||||||
(unsigned char*)capture->frame.imageData);
|
(unsigned char*)capture->frame.imageData);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else
|
}
|
||||||
#endif /* HAVE_CAMV4L2 */
|
#endif /* HAVE_CAMV4L2 */
|
||||||
|
#if defined(HAVE_CAMV4L) && defined(HAVE_CAMV4L2)
|
||||||
|
else
|
||||||
|
#endif /* HAVE_CAMV4L && HAVE_CAMV4L2 */
|
||||||
|
#ifdef HAVE_CAMV4L
|
||||||
{
|
{
|
||||||
|
|
||||||
switch(capture->imageProperties.palette) {
|
switch(capture->imageProperties.palette) {
|
||||||
@ -2243,6 +2279,7 @@ static IplImage* icvRetrieveFrameCAM_V4L( CvCaptureCAM_V4L* capture, int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif /* HAVE_CAMV4L */
|
||||||
|
|
||||||
return(&capture->frame);
|
return(&capture->frame);
|
||||||
}
|
}
|
||||||
@ -2252,7 +2289,9 @@ static double icvGetPropertyCAM_V4L (CvCaptureCAM_V4L* capture,
|
|||||||
|
|
||||||
#ifdef HAVE_CAMV4L2
|
#ifdef HAVE_CAMV4L2
|
||||||
|
|
||||||
|
#ifdef HAVE_CAMV4L
|
||||||
if (V4L2_SUPPORT == 1)
|
if (V4L2_SUPPORT == 1)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
|
|
||||||
/* default value for min and max */
|
/* default value for min and max */
|
||||||
@ -2363,8 +2402,12 @@ static double icvGetPropertyCAM_V4L (CvCaptureCAM_V4L* capture,
|
|||||||
/* all was OK, so convert to 0.0 - 1.0 range, and return the value */
|
/* all was OK, so convert to 0.0 - 1.0 range, and return the value */
|
||||||
return ((float)capture->control.value - v4l2_min + 1) / (v4l2_max - v4l2_min);
|
return ((float)capture->control.value - v4l2_min + 1) / (v4l2_max - v4l2_min);
|
||||||
|
|
||||||
} else
|
}
|
||||||
#endif /* HAVE_CAMV4L2 */
|
#endif /* HAVE_CAMV4L2 */
|
||||||
|
#if defined(HAVE_CAMV4L) && defined(HAVE_CAMV4L2)
|
||||||
|
else
|
||||||
|
#endif /* HAVE_CAMV4L && HAVE_CAMV4L2 */
|
||||||
|
#ifdef HAVE_CAMV4L
|
||||||
{
|
{
|
||||||
|
|
||||||
int retval = -1;
|
int retval = -1;
|
||||||
@ -2422,6 +2465,7 @@ static double icvGetPropertyCAM_V4L (CvCaptureCAM_V4L* capture,
|
|||||||
return float (retval) / 0xFFFF;
|
return float (retval) / 0xFFFF;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif /* HAVE_CAMV4L */
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -2494,8 +2538,12 @@ static int icvSetVideoSize( CvCaptureCAM_V4L* capture, int w, int h) {
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
} else
|
}
|
||||||
#endif /* HAVE_CAMV4L2 */
|
#endif /* HAVE_CAMV4L2 */
|
||||||
|
#if defined(HAVE_CAMV4L) && defined(HAVE_CAMV4L2)
|
||||||
|
else
|
||||||
|
#endif /* HAVE_CAMV4L && HAVE_CAMV4L2 */
|
||||||
|
#ifdef HAVE_CAMV4L
|
||||||
{
|
{
|
||||||
|
|
||||||
if (capture==0) return 0;
|
if (capture==0) return 0;
|
||||||
@ -2522,6 +2570,7 @@ static int icvSetVideoSize( CvCaptureCAM_V4L* capture, int w, int h) {
|
|||||||
capture->FirstCapture = 1;
|
capture->FirstCapture = 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif /* HAVE_CAMV4L */
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -2653,8 +2702,12 @@ static int icvSetControl (CvCaptureCAM_V4L* capture,
|
|||||||
perror ("VIDIOC_S_CTRL");
|
perror ("VIDIOC_S_CTRL");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
} else
|
}
|
||||||
#endif /* HAVE_CAMV4L2 */
|
#endif /* HAVE_CAMV4L2 */
|
||||||
|
#if defined(HAVE_CAMV4L) && defined(HAVE_CAMV4L2)
|
||||||
|
else
|
||||||
|
#endif /* HAVE_CAMV4L && HAVE_CAMV4L2 */
|
||||||
|
#ifdef HAVE_CAMV4L
|
||||||
{
|
{
|
||||||
|
|
||||||
int v4l_value;
|
int v4l_value;
|
||||||
@ -2699,6 +2752,7 @@ static int icvSetControl (CvCaptureCAM_V4L* capture,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif /* HAVE_CAMV4L */
|
||||||
|
|
||||||
/* all was OK */
|
/* all was OK */
|
||||||
return 0;
|
return 0;
|
||||||
@ -2759,6 +2813,7 @@ static void icvCloseCAM_V4L( CvCaptureCAM_V4L* capture ){
|
|||||||
#ifdef HAVE_CAMV4L2
|
#ifdef HAVE_CAMV4L2
|
||||||
if (V4L2_SUPPORT == 0)
|
if (V4L2_SUPPORT == 0)
|
||||||
#endif /* HAVE_CAMV4L2 */
|
#endif /* HAVE_CAMV4L2 */
|
||||||
|
#ifdef HAVE_CAMV4L
|
||||||
{
|
{
|
||||||
|
|
||||||
if (capture->mmaps)
|
if (capture->mmaps)
|
||||||
@ -2767,10 +2822,14 @@ static void icvCloseCAM_V4L( CvCaptureCAM_V4L* capture ){
|
|||||||
munmap(capture->memoryMap, capture->memoryBuffer.size);
|
munmap(capture->memoryMap, capture->memoryBuffer.size);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif /* HAVE_CAMV4L */
|
||||||
|
#if defined(HAVE_CAMV4L) && defined(HAVE_CAMV4L2)
|
||||||
|
else
|
||||||
|
#endif /* HAVE_CAMV4L && HAVE_CAMV4L2 */
|
||||||
#ifdef HAVE_CAMV4L2
|
#ifdef HAVE_CAMV4L2
|
||||||
else {
|
{
|
||||||
capture->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
capture->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||||
if (ioctl(capture->deviceHandle, VIDIOC_STREAMOFF, &capture->type) < 0) {
|
if (-1 == ioctl(capture->deviceHandle, VIDIOC_STREAMOFF, &capture->type)) {
|
||||||
perror ("Unable to stop the stream.");
|
perror ("Unable to stop the stream.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user