Show
Ignore:
Timestamp:
08/15/07 08:35:11 (7 years ago)
Author:
douglask
Message:

Added V4L2 Powerline freqency filter control which is adjustable with the
new Anti-flicker menubutton in the V4L2 grabber configuration panel.

Added v4l2gain, v4l2gamma and antiflicker resources to ui-resource.tcl

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • vic/branches/mpeg4/video/grabber-v4l2.cpp

    r4062 r4089  
    8585#define BYTE_ORDER_UYVY 2 
    8686#define BYTE_ORDER_VYUY 3 
     87 
     88/* V4L2 driver specific controls */ 
     89#define V4L2_CID_POWER_LINE_FREQUENCY (V4L2_CID_PRIVATE_BASE + 1) 
    8790 
    8891typedef struct tag_vimage 
     
    314317        } else { 
    315318                if ( !(cap.capabilities & V4L2_CAP_READWRITE) && !(cap.capabilities & V4L2_CAP_STREAMING)) { 
    316                         debug_msg("v4l2: fatal: device does not support read()/write() calls or streaming capture.\n"); 
     319                        debug_msg("V4L2: fatal: device does not support read()/write() calls or streaming capture.\n"); 
    317320                        status_=-1; 
    318321                        return; 
     
    511514                } 
    512515 
     516                if (strcmp(argv[1], "antiflicker") == 0) { 
     517                        struct v4l2_queryctrl qctrl; 
     518                        struct v4l2_control ctrl; 
     519 
     520                        if (-1 != ioctl(fd_, VIDIOC_QUERYCTRL, &qctrl)) { 
     521                                if (strcmp((char *)qctrl.name, "Power Line Frequency") == 0) { 
     522                                        ctrl.id = V4L2_CID_POWER_LINE_FREQUENCY; 
     523                                        ctrl.value = atoi(argv[2]); 
     524                                        if (-1 == ioctl(fd_, VIDIOC_S_CTRL, &ctrl)) 
     525                                                perror("ioctl  VIDIOC_S_CTRL"); 
     526                                        else 
     527                                                debug_msg( "V4L2: V4L2_CID_POWER_LINE_FREQUENCY = %d\n", ctrl.value); 
     528                                 } 
     529                        } 
     530                        return (TCL_OK); 
     531                } 
    513532 
    514533                if (strcmp(argv[1], "controls") == 0) { 
     
    571590 
    572591        if (fd_ > 0 ) { 
    573                 debug_msg("\nv4l2: start\n"); 
     592                debug_msg("\nV4L2: start\n"); 
    574593 
    575594                format(); 
     
    600619 
    601620                                if ((long)vimage[i].data == -1) { 
    602                                         debug_msg("v4l2: mmap() returned error %l\n", errno); 
     621                                        debug_msg("V4L2: mmap() returned error %l\n", errno); 
    603622                                        return; 
    604                                 } else debug_msg("v4l2: mmap()'ed buffer at 0x%x (%d bytes)\n", (long)vimage[i].data, vimage[i].vidbuf.length); 
     623                                } else debug_msg("V4L2: mmap()'ed buffer at 0x%x (%d bytes)\n", (long)vimage[i].data, vimage[i].vidbuf.length); 
    605624                        } 
    606625 
     
    621640                                debug_msg("malloc(%d) failed\n", fmt.fmt.pix.sizeimage); 
    622641                                return; 
    623                         } else debug_msg("v4l2: malloc()'ed buffer (%d bytes)\n",  fmt.fmt.pix.sizeimage); 
     642                        } else debug_msg("V4L2: malloc()'ed buffer (%d bytes)\n",  fmt.fmt.pix.sizeimage); 
    624643                } 
    625644 
     
    10521071                height_ = CIF_HEIGHT *2  / decimate_; 
    10531072 
    1054                 debug_msg("v4l2: format"); 
     1073                debug_msg("V4L2: format"); 
    10551074                switch (cformat_) { 
    10561075                case CF_CIF: 
     
    10751094                        if (-1 == ioctl(fd_, VIDIOC_S_STD, &standard.id)) 
    10761095                                perror("ioctl VIDIOC_S_STD"); 
    1077                         else debug_msg("v4l2: setting norm to %s\n",standard.name); 
     1096                        else debug_msg("V4L2: setting norm to %s\n",standard.name); 
    10781097                } 
    10791098 
     
    10811100                if ((err = ioctl(fd_, VIDIOC_S_INPUT, &input)) ) 
    10821101                        debug_msg("S_INPUT returned error %d\n",errno); 
    1083                 else debug_msg("v4l2: setting input port to %d\n", port_); 
     1102                else debug_msg("V4L2: setting input port to %d\n", port_); 
    10841103 
    10851104                for (i = 0, err = 0; err == 0; ++i) { 
     
    11011120 
    11021121                                        if ( (err = ioctl(fd_, VIDIOC_S_FMT, &fmt) ) ) 
    1103                                                 debug_msg("\nv4l2: Failed to set format\n"); 
     1122                                                debug_msg("\nV4L2: Failed to set format\n"); 
    11041123 
    11051124                                        if ( ( fmt.fmt.pix.width != (unsigned int)width_ ) || 
    11061125                                                                ( fmt.fmt.pix.height !=  (unsigned int)height_ ) ) { 
    11071126 
    1108                                                 debug_msg("v4l2: failed to set format! requested %dx%d, got %dx%d\n", width_, height_, fmt.fmt.pix.width, fmt.fmt.pix.height); 
     1127                                                debug_msg("V4L2: failed to set format! requested %dx%d, got %dx%d\n", width_, height_, fmt.fmt.pix.width, fmt.fmt.pix.height); 
    11091128 
    11101129 
    11111130                                                switch(decimate_) { 
    11121131                                                case 2: 
    1113                                                         debug_msg("v4l2: trying resolution under ...\n"); 
     1132                                                        debug_msg("V4L2: trying resolution under ...\n"); 
    11141133                                                        decimate_ = 4; 
    11151134                                                        break; 
    11161135                                                case 1: 
    1117                                                         debug_msg("v4l2: trying resolution under ...\n"); 
     1136                                                        debug_msg("V4L2: trying resolution under ...\n"); 
    11181137                                                        decimate_ = 2; 
    11191138                                                        break; 
    11201139                                                default: 
    1121                                                         debug_msg("v4l2: giving up ...\n"); 
     1140                                                        debug_msg("V4L2: giving up ...\n"); 
    11221141                                                        format_ok = 1; 
    11231142                                                } 
    11241143 
    11251144                                        } else { 
    1126                                                 debug_msg("v4l2: setting format: width=%d height=%d\n", fmt.fmt.pix.width, fmt.fmt.pix.height); 
     1145                                                debug_msg("V4L2: setting format: width=%d height=%d\n", fmt.fmt.pix.width, fmt.fmt.pix.height); 
    11271146                                                format_ok = 1; 
    11281147                                        }