[Sumover-dev] [svn commit] r4031 - in vic/branches/mpeg4: video
sumover-dev at cs.ucl.ac.uk
sumover-dev at cs.ucl.ac.uk
Thu May 10 20:18:24 BST 2007
Author: piers
Date: Thu May 10 20:18:52 2007
New Revision: 4031
Modified:
vic/branches/mpeg4/tcl/ui-ctrlmenu.tcl
vic/branches/mpeg4/tcl/ui-grabber.tcl
vic/branches/mpeg4/video/grabber-video4linux.cpp
Log:
Patch from Doug Kosovic (thanks!) - fixes V4L grabber pane and tidies up debug messages and adds support for big endian archs
Modified: vic/branches/mpeg4/tcl/ui-ctrlmenu.tcl
==============================================================================
--- vic/branches/mpeg4/tcl/ui-ctrlmenu.tcl (original)
+++ vic/branches/mpeg4/tcl/ui-ctrlmenu.tcl Thu May 10 20:18:52 2007
@@ -622,7 +622,7 @@
set k [string first - $devname]
if { $k >= 0 } {
incr k -1
- set devname [string range $devname 0 $k]
+ set devname [string tolower [string range $devname 0 $k]]
}
regsub -all " " $devname "_" devname
set w .menu.$devname
Modified: vic/branches/mpeg4/tcl/ui-grabber.tcl
==============================================================================
--- vic/branches/mpeg4/tcl/ui-grabber.tcl (original)
+++ vic/branches/mpeg4/tcl/ui-grabber.tcl Thu May 10 20:18:52 2007
@@ -28,6 +28,12 @@
build.v4l $w
}
+proc build.v4l2 w {
+ build.v4l $w
+ $w.title configure -text "Video4Linux2 grabber controls"
+ pack $w.title -fill x -expand 1
+}
+
proc build.v4l w {
set f [smallfont]
global contrast brightness hue saturation norm
Modified: vic/branches/mpeg4/video/grabber-video4linux.cpp
==============================================================================
--- vic/branches/mpeg4/video/grabber-video4linux.cpp (original)
+++ vic/branches/mpeg4/video/grabber-video4linux.cpp Thu May 10 20:18:52 2007
@@ -23,6 +23,7 @@
#include <string.h>
#include <signal.h>
#include <errno.h>
+#include <endian.h>
#include <sys/types.h>
#include <sys/fcntl.h>
@@ -50,6 +51,8 @@
/* here you can tune the device names */
static const char *devlist[] = {
"/dev/video0", "/dev/video1", "/dev/video2", "/dev/video3",
+ "/dev/video4", "/dev/video5", "/dev/video6", "/dev/video7",
+ "/dev/video8", "/dev/video9", "/dev/video10", "/dev/video11",
NULL
};
@@ -157,7 +160,7 @@
{
dev_ = dev;
attributes_ = attr;
- debug_msg("V4l: ==> %s\n", attr);
+ debug_msg("V4L: ==> %s\n", attr);
}
int V4lDevice::command(int argc, const char *const *argv)
@@ -202,8 +205,18 @@
int i, fd;
char *nick, *attr;
+ // AGTk uses VIC_DEVICE env variable to select device
+ const char *myDev = getenv("VIC_DEVICE");
+ if (myDev != 0)
+ {
+ dev = (const char **) new char *[2];
+ dev[0] = new char[strlen(myDev) + 1];
+ strcpy((char *) dev[0], myDev);
+ dev[1] = NULL;
+ }
+
for (i = 0; dev[i] != NULL; i++) {
- debug_msg("V4l: trying %s... ", dev[i]);
+ debug_msg("V4L: trying %s... ", dev[i]);
if (-1 == (fd = open(dev[i], O_RDONLY))) {
debug_msg("Error opening: %s : %s", dev[i], strerror(errno)); //SV-XXX: sys_errlist deprecated, use strerror()
continue;
@@ -220,7 +233,7 @@
continue;
}
- debug_msg("ok, %s\nV4l: %s; size: %dx%d => %dx%d%s\n",
+ debug_msg("ok, %s\nV4L: %s; size: %dx%d => %dx%d%s\n",
capability.name,
capability.type & VID_TYPE_MONOCHROME ? "mono" : "color",
capability.minwidth, capability.minheight,
@@ -238,7 +251,7 @@
strcat(attr, "size { small cif } ");
}
- debug_msg("V4l: ports:");
+ debug_msg("V4L: ports:");
strcat(attr, "port { ");
char attr_tmp[100]="";
@@ -268,16 +281,16 @@
if (-1 == ioctl(fd, VIDIOCGPICT, &pict)) {
perror("ioctl VIDIOCGPICT");
}
- debug_msg("V4l: depth=%d, palette=%s\n", pict.depth,
+ debug_msg("V4L: depth=%d, palette=%s\n", pict.depth,
(pict.palette < sizeof(palette_name) / sizeof(char *))?
palette_name[pict.palette] : "??");
strcat(attr, "type {auto pal ntsc secam}");
- nick = new char[strlen(capability.name) + 7];
- sprintf(nick, "V4L1:%s", capability.name);
+ nick = new char[strlen(capability.name) + strlen(dev[i]) + 6];
+ sprintf(nick, "V4L-%s %s", capability.name, dev[i]);
new V4lDevice(dev[i], nick, attr);
- fprintf(stderr, "Attached to V4l device: %s\n", nick);
+ fprintf(stderr, "Attached to V4L device: %s\n", nick);
close(fd);
}
@@ -376,10 +389,10 @@
if ((char *) -1 == mem) {
perror("mmap");
- debug_msg("V4l: device has no mmap support\n");
+ debug_msg("V4L: device has no mmap support\n");
}
else {
- debug_msg("v4l: mmap()'ed buffer size = 0x%x\n", gb_buffers.size);
+ debug_msg("V4L: mmap()'ed buffer size = 0x%x\n", gb_buffers.size);
have_mmap = 1;
}
@@ -424,7 +437,7 @@
V4lGrabber::~V4lGrabber()
{
- debug_msg("V4l: destructor\n");
+ debug_msg("V4L: destructor\n");
if (have_mmap)
munmap(mem, gb_buffers.size);
@@ -473,7 +486,7 @@
if (-1 == ioctl(fd_, VIDIOCSPICT, &pict))
perror("ioctl VIDIOCSPICT");
- debug_msg("V4l: Brightness = %d\n", val);
+ debug_msg("V4L: Brightness = %d\n", val);
return (TCL_OK);
}
@@ -485,7 +498,7 @@
if (-1 == ioctl(fd_, VIDIOCSPICT, &pict))
perror("ioctl VIDIOCSPICT");
- debug_msg("V4l: Contrast = %d\n", val);
+ debug_msg("V4L: Contrast = %d\n", val);
return (TCL_OK);
}
@@ -497,7 +510,7 @@
if (-1 == ioctl(fd_, VIDIOCSPICT, &pict))
perror("ioctl VIDIOCSPICT");
- debug_msg("V4l: Hue = %d\n", val);
+ debug_msg("V4L: Hue = %d\n", val);
return (TCL_OK);
}
@@ -509,7 +522,7 @@
if (-1 == ioctl(fd_, VIDIOCSPICT, &pict))
perror("ioctl VIDIOCSPICT");
- debug_msg("V4l: Saturation = %d\n", val);
+ debug_msg("V4L: Saturation = %d\n", val);
return (TCL_OK);
}
@@ -524,7 +537,7 @@
if (-1 == ioctl(fd_, VIDIOCSPICT, &pict))
perror("ioctl VIDIOCSPICT");
- debug_msg("V4l: Resetting controls\n");
+ debug_msg("V4L: Resetting controls\n");
return (TCL_OK);
}
}
@@ -536,7 +549,7 @@
if (strcmp(argv[1], "fps") == 0) {
- debug_msg("V4l: fps %s\n", argv[2]);
+ debug_msg("V4L: fps %s\n", argv[2]);
}
@@ -562,7 +575,7 @@
void V4lGrabber::start()
{
- debug_msg("V4l: start\n");
+ debug_msg("V4L: start\n");
format();
@@ -589,7 +602,7 @@
void V4lGrabber::stop()
{
- debug_msg("V4l: stop\n");
+ debug_msg("V4L: stop\n");
if (have_mmap) {
while (grab_count > sync_count) {
@@ -701,6 +714,7 @@
case BYTE_ORDER_YUYV:
while (--i) {
a = *(srca++);
+#if BYTE_ORDER == LITTLE_ENDIAN
*(y++) = a & 0xff;
a >>= 8;
*(u++) = a & 0xff;
@@ -708,12 +722,22 @@
*(y++) = a & 0xff;
a >>= 8;
*(v++) = a & 0xff;
+#else
+ *(v++) = a & 0xff;
+ a >>= 8;
+ *(y++) = a & 0xff;
+ a >>= 8;
+ *(u++) = a & 0xff;
+ a >>= 8;
+ *(y++) = a & 0xff;
+#endif
}
break;
case BYTE_ORDER_YVYU:
while (--i) {
a = *(srca++);
+#if BYTE_ORDER == LITTLE_ENDIAN
*(y++) = a & 0xff;
a >>= 8;
*(v++) = a & 0xff;
@@ -721,12 +745,22 @@
*(y++) = a & 0xff;
a >>= 8;
*(u++) = a & 0xff;
+#else
+ *(u++) = a & 0xff;
+ a >>= 8;
+ *(y++) = a & 0xff;
+ a >>= 8;
+ *(v++) = a & 0xff;
+ a >>= 8;
+ *(y++) = a & 0xff;
+#endif
}
break;
case BYTE_ORDER_UYVY:
while (--i) {
a = *(srca++);
+#if BYTE_ORDER == LITTLE_ENDIAN
*(u++) = a & 0xff;
a >>= 8;
*(y++) = a & 0xff;
@@ -734,12 +768,23 @@
*(v++) = a & 0xff;
a >>= 8;
*(y++) = a & 0xff;
+#else
+ *(y++) = a & 0xff;
+ a >>= 8;
+ *(v++) = a & 0xff;
+ a >>= 8;
+ *(y++) = a & 0xff;
+ a >>= 8;
+ *(u++) = a & 0xff;
+#endif
+
}
break;
case BYTE_ORDER_VYUY:
while (--i) {
a = *(srca++);
+#if BYTE_ORDER == LITTLE_ENDIAN
*(v++) = a & 0xff;
a >>= 8;
*(y++) = a & 0xff;
@@ -747,6 +792,15 @@
*(u++) = a & 0xff;
a >>= 8;
*(y++) = a & 0xff;
+#else
+ *(y++) = a & 0xff;
+ a >>= 8;
+ *(u++) = a & 0xff;
+ a >>= 8;
+ *(y++) = a & 0xff;
+ a >>= 8;
+ *(v++) = a & 0xff;
+#endif
}
break;
}
@@ -771,19 +825,28 @@
for (a1 = height_; a1 > 0; a1 -= 2) {
for (b = width_; b > 0; b -= 2) {
a = *(srca++);
- *(y++) = a & 0xff;
- a >>= 8;
- *(u++) = a & 0xff;
- a >>= 8;
- *(y++) = a & 0xff;
- a >>= 8;
+#if BYTE_ORDER == LITTLE_ENDIAN
+ *(y++) = a & 0xff; a >>= 8;
+ *(u++) = a & 0xff; a >>= 8;
+ *(y++) = a & 0xff; a >>= 8;
*(v++) = a & 0xff;
+#else
+ *(v++) = a & 0xff; a >>= 8;
+ *(y+1) = a & 0xff; a >>= 8;
+ *(u++) = a & 0xff; a >>= 8;
+ *(y) = a; y += 2;
+#endif
}
for (b = width_; b > 0; b -= 2) {
a = *(srca++);
+#if BYTE_ORDER == LITTLE_ENDIAN
+ *(y++) = a & 0xff; a >>= 16;
*(y++) = a & 0xff;
- a >>= 16;
- *(y++) = a & 0xff;
+#else
+ a >>= 8;
+ *(y+1) = a & 0xff; a >>= 16;
+ *(y) = a; y += 2;
+#endif
}
}
break;
@@ -792,19 +855,28 @@
for (a1 = height_; a1 > 0; a1 -= 2) {
for (b = width_; b > 0; b -= 2) {
a = *(srca++);
- *(y++) = a & 0xff;
- a >>= 8;
- *(v++) = a & 0xff;
- a >>= 8;
- *(y++) = a & 0xff;
- a >>= 8;
+#if BYTE_ORDER == LITTLE_ENDIAN
+ *(y++) = a & 0xff; a >>= 8;
+ *(v++) = a & 0xff; a >>= 8;
+ *(y++) = a & 0xff; a >>= 8;
*(u++) = a & 0xff;
+#else
+ *(u++) = a & 0xff; a >>= 8;
+ *(y+1) = a & 0xff; a >>= 8;
+ *(v++) = a & 0xff; a >>= 8;
+ *(y) = a; y += 2;
+#endif
}
for (b = width_; b > 0; b -= 2) {
a = *(srca++);
+#if BYTE_ORDER == LITTLE_ENDIAN
+ *(y++) = a & 0xff; a >>= 16;
*(y++) = a & 0xff;
- a >>= 16;
- *(y++) = a & 0xff;
+#else
+ a >>= 8;
+ *(y+1) = a & 0xff; a >>= 16;
+ *(y) = a; y += 2;
+#endif
}
}
break;
@@ -813,20 +885,30 @@
for (a1 = height_; a1 > 0; a1 -= 2) {
for (b = width_; b > 0; b -= 2) {
a = *(srca++);
- *(u++) = a & 0xff;
- a >>= 8;
- *(y++) = a & 0xff;
- a >>= 8;
- *(v++) = a & 0xff;
- a >>= 8;
+#if BYTE_ORDER == LITTLE_ENDIAN
+ *(u++) = a & 0xff; a >>= 8;
+ *(y++) = a & 0xff; a >>= 8;
+ *(v++) = a & 0xff; a >>= 8;
*(y++) = a & 0xff;
+#else
+ *(y+1) = a & 0xff; a >>= 8;
+ *(v++) = a & 0xff; a >>= 8;
+ *(y) = a & 0xff; a >>= 8;
+ *(u++) = a & 0xff;
+ y += 2;
+#endif
}
for (b = width_; b > 0; b -= 2) {
a = *(srca++);
+#if BYTE_ORDER == LITTLE_ENDIAN
a >>= 8;
+ *(y++) = a & 0xff; a >>= 16;
*(y++) = a & 0xff;
- a >>= 16;
- *(y++) = a & 0xff;
+#else
+ *(y+1) = a & 0xff; a >>= 16;
+ *(y) = a; y += 2;
+#endif
+
}
}
break;
@@ -835,20 +917,29 @@
for (a1 = height_; a1 > 0; a1 -= 2) {
for (b = width_; b > 0; b -= 2) {
a = *(srca++);
- *(v++) = a & 0xff;
- a >>= 8;
- *(y++) = a & 0xff;
- a >>= 8;
- *(u++) = a & 0xff;
- a >>= 8;
+#if BYTE_ORDER == LITTLE_ENDIAN
+ *(v++) = a & 0xff; a >>= 8;
+ *(y++) = a & 0xff; a >>= 8;
+ *(u++) = a & 0xff; a >>= 8;
*(y++) = a & 0xff;
+#else
+ *(y+1) = a & 0xff; a >>= 8;
+ *(u++) = a & 0xff; a >>= 8;
+ *(y) = a & 0xff; a >>= 8;
+ *(v++) = a & 0xff;
+ y += 2;
+#endif
}
for (b = width_; b > 0; b -= 2) {
a = *(srca++);
+#if BYTE_ORDER == LITTLE_ENDIAN
a >>= 8;
+ *(y++) = a & 0xff; a >>= 16;
*(y++) = a & 0xff;
- a >>= 16;
- *(y++) = a & 0xff;
+#else
+ *(y+1) = a & 0xff; a >>= 16;
+ *(y) = a; y += 2;
+#endif
}
}
break;
@@ -968,7 +1059,7 @@
void V4lGrabber::format()
{
struct video_channel channel;
- debug_msg("V4l: format\n");
+ debug_msg("V4L: format\n");
if(decimate_!=1){
width_ = CIF_WIDTH * 2 / decimate_;
More information about the Sumover-dev
mailing list