Changeset 4343

Show
Ignore:
Timestamp:
12/18/08 06:51:15 (5 years ago)
Author:
douglask
Message:

Fix for V4L2 drivers that don't return EINVAL for unsupported pixelformats
with VIDIOC_S_FMT ioctl call

Files:
1 modified

Legend:

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

    r4342 r4343  
    375375                fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUV420; 
    376376                if (-1 != v4l2_ioctl(fd_, VIDIOC_S_FMT, &fmt) ) { 
    377                         if (fmt.fmt.pix.height == test_height[i] && fmt.fmt.pix.width == test_width[i]) { 
     377                        if (fmt.fmt.pix.height == test_height[i] && fmt.fmt.pix.width == test_width[i] && fmt.fmt.pix.pixelformat == V4L2_PIX_FMT_YUV420) { 
    378378                                have_YUV420P = 1; 
    379379                                debug_msg("Device supports V4L2_PIX_FMT_YUV420 capture at %dx%d\n",test_width[i],test_height[i]); 
    380                         } else { 
     380                        } else if (fmt.fmt.pix.pixelformat == V4L2_PIX_FMT_YUV420) { 
    381381                                debug_msg("V4L2_PIX_FMT_YUV420 capture at %dx%d not supported, returned %dx%d\n",test_width[i],test_height[i],fmt.fmt.pix.width,fmt.fmt.pix.height); 
    382382                        } 
     
    387387                fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUV422P; 
    388388                if (-1 != v4l2_ioctl(fd_, VIDIOC_S_FMT, &fmt) ) { 
    389                         if (fmt.fmt.pix.height == test_height[i] && fmt.fmt.pix.width == test_width[i]) { 
     389                        if (fmt.fmt.pix.height == test_height[i] && fmt.fmt.pix.width == test_width[i] && fmt.fmt.pix.pixelformat == V4L2_PIX_FMT_YUV422P) { 
    390390                                have_YUV422P = 1; 
    391391                                debug_msg("Device supports V4L2_PIX_FMT_YUV422 capture at %dx%d\n",test_width[i],test_height[i]); 
     
    402402                                have_YUV422 = 1; 
    403403                                debug_msg("Device supports V4L2_PIX_FMT_YUYV (YUV 4:2:2) capture at %dx%d\n",test_width[i],test_height[i]); 
    404                         } else { 
     404                        } else if (fmt.fmt.pix.pixelformat == V4L2_PIX_FMT_YUYV) { 
    405405                                debug_msg("V4L2_PIX_FMT_YUYV (YUV 4:2:2) capture at %dx%d not supported, returned %dx%d\n",test_width[i],test_height[i],fmt.fmt.pix.width,fmt.fmt.pix.height); 
    406406                        } 
     
    412412                fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_MJPEG; 
    413413                if (-1 != v4l2_ioctl(fd_, VIDIOC_S_FMT, &fmt) ) { 
    414                         if (fmt.fmt.pix.height == test_height[i] && fmt.fmt.pix.width == test_width[i]) { 
     414                        if (fmt.fmt.pix.height == test_height[i] && fmt.fmt.pix.width == test_width[i] && fmt.fmt.pix.pixelformat == V4L2_PIX_FMT_MJPEG) { 
    415415                                have_MJPEG = 1; 
    416416                                debug_msg("Device supports V4L2_PIX_FMT_MJPEG capture at %dx%d\n",test_width[i],test_height[i]); 
    417                         } else { 
     417                        } else if (fmt.fmt.pix.pixelformat == V4L2_PIX_FMT_MJPEG) { 
    418418                                debug_msg("V4L2_PIX_FMT_MJPEG capture at %dx%d not supported, returned %dx%d\n",test_width[i],test_height[i],fmt.fmt.pix.width,fmt.fmt.pix.height); 
    419419                        } 
     
    424424                fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_JPEG; 
    425425                if (-1 != v4l2_ioctl(fd_, VIDIOC_S_FMT, &fmt) ) { 
    426                         if (fmt.fmt.pix.height == test_height[i] && fmt.fmt.pix.width == test_width[i]) { 
     426                        if (fmt.fmt.pix.height == test_height[i] && fmt.fmt.pix.width == test_width[i] && fmt.fmt.pix.pixelformat == V4L2_PIX_FMT_JPEG) { 
    427427                                have_MJPEG = 1; 
    428428                                debug_msg("Device supports V4L2_PIX_FMT_JPEG capture at %dx%d\n",test_width[i],test_height[i]); 
    429                         } else { 
     429                        } else if (fmt.fmt.pix.pixelformat == V4L2_PIX_FMT_JPEG) { 
    430430                                debug_msg("V4L2_PIX_FMT_JPEG capture at %dx%d not supported, returned %dx%d\n",test_width[i],test_height[i],fmt.fmt.pix.width,fmt.fmt.pix.height); 
    431431                        }