alter code to use libv4l2

This commit is contained in:
Isaac Connor 2016-09-28 08:43:41 -04:00
parent b074a3257d
commit 00ef0f4d78
2 changed files with 13 additions and 5 deletions

View File

@ -608,6 +608,12 @@ if((NOT HAVE_LIBCRYPTO) AND (NOT HAVE_LIBGNUTLS))
"ZoneMinder requires crypto or gnutls but none were found on your system")
endif((NOT HAVE_LIBCRYPTO) AND (NOT HAVE_LIBGNUTLS))
include(FindV4L2)
if(V4L2_FOUND)
list(APPEND ZM_BIN_LIBS "${V4L2_LIBRARY}")
set(optlibsfound "${optlibsfound} v4l2")
endif(V4L2_FOUND)
# Check for V4L header files and enable ZM_HAS_V4L, ZM_HAS_V4L1, ZM_HAS_V4L2 accordingly
# Setting to zeros first is required because ZM uses #define for these
set(ZM_HAS_V4L 0)

View File

@ -32,6 +32,8 @@
#include <stdlib.h>
#include <limits.h>
#include <libv4l2.h>
/* Workaround for GNU/kFreeBSD */
#if defined(__FreeBSD_kernel__)
#ifndef ENODATA
@ -46,8 +48,8 @@ static int vidioctl( int fd, int request, void *arg )
int result = -1;
do
{
result = ioctl( fd, request, arg );
} while ( result == -1 && errno == EINTR );
result = v4l2_ioctl( fd, request, arg );
} while ( result == -1 && ( ( errno == EINTR ) || (errno == EAGAIN)) );
return( result );
}
@ -824,7 +826,7 @@ void LocalCamera::Initialise()
v4l2_data.reqbufs.count = 1;
}
} else {
v4l2_data.reqbufs.count = 8;
v4l2_data.reqbufs.count = 2;
}
Debug( 3, "Request buffers count is %d", v4l2_data.reqbufs.count );
@ -868,9 +870,9 @@ void LocalCamera::Initialise()
Fatal( "Unable to query video buffer: %s", strerror(errno) );
v4l2_data.buffers[i].length = vid_buf.length;
v4l2_data.buffers[i].start = mmap( NULL, vid_buf.length, PROT_READ|PROT_WRITE, MAP_SHARED, vid_fd, vid_buf.m.offset );
v4l2_data.buffers[i].start = v4l2_mmap( NULL, vid_buf.length, PROT_READ|PROT_WRITE, MAP_SHARED, vid_fd, vid_buf.m.offset );
if ( v4l2_data.buffers[i].start == MAP_FAILED )
if ( MAP_FAILED == v4l2_data.buffers[i].start )
Fatal( "Can't map video buffer %d (%d bytes) to memory: %s(%d)", i, vid_buf.length, strerror(errno), errno );
#if HAVE_LIBSWSCALE