#define        ENABLE_HEXDUMP  0       /* Enable if you need it */
 
 
-#define USBVISION_DEBUG                /* Turn on debug messages */
-
 #ifdef USBVISION_DEBUG
        #define PDEBUG(level, fmt, args...) \
                if (video_debug & (level)) info("[%s:%d] " fmt, __PRETTY_FUNCTION__, __LINE__ , ## args)
 #define DBG_IOCTL      1<<0
 #define DBG_IO         1<<1
 #define DBG_PROBE      1<<2
-#define DBG_FUNC       1<<3
+#define DBG_MMAP       1<<3
 
 //String operations
 #define rmspace(str)   while(*str==' ') str++;
 
                        vb->memory = V4L2_MEMORY_MMAP;
                        vb->field = V4L2_FIELD_NONE;
-                       vb->length = usbvision->max_frame_size;
+                       vb->length = usbvision->curwidth*usbvision->curheight*usbvision->palette.bytes_per_pixel;
                        vb->timestamp = usbvision->frame[vb->index].timestamp;
                        vb->sequence = usbvision->frame[vb->index].sequence;
                        return 0;
                                        vf->fmt.pix.sizeimage = vf->fmt.pix.bytesperline*usbvision->curheight;
                                        vf->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
                                        vf->fmt.pix.field = V4L2_FIELD_NONE; /* Always progressive image */
+                                       PDEBUG(DBG_IOCTL, "VIDIOC_G_FMT w=%d, h=%d, format=%s",
+                                              vf->fmt.pix.width, vf->fmt.pix.height,usbvision->palette.desc);
+                                       return 0;
                                }
-                               return 0;
                                default:
                                        PDEBUG(DBG_IOCTL, "VIDIOC_G_FMT invalid type %d",vf->type);
                                        return -EINVAL;
                        }
-                       PDEBUG(DBG_IOCTL, "VIDIOC_G_FMT w=%d, h=%d",vf->fmt.win.w.width, vf->fmt.win.w.height);
                        return 0;
                }
                case VIDIOC_TRY_FMT:
                                        RESTRICT_TO_RANGE(vf->fmt.pix.width, MIN_FRAME_WIDTH, MAX_FRAME_WIDTH);
                                        RESTRICT_TO_RANGE(vf->fmt.pix.height, MIN_FRAME_HEIGHT, MAX_FRAME_HEIGHT);
 
+                                       vf->fmt.pix.bytesperline = vf->fmt.pix.width*usbvision->palette.bytes_per_pixel;
+                                       vf->fmt.pix.sizeimage = vf->fmt.pix.bytesperline*vf->fmt.pix.height;
+
+                                       if(cmd == VIDIOC_TRY_FMT) {
+                                               PDEBUG(DBG_IOCTL, "VIDIOC_TRY_FMT grabdisplay w=%d, h=%d, format=%s",
+                                              vf->fmt.pix.width, vf->fmt.pix.height,usbvision->palette.desc);
+                                               return 0;
+                                       }
+
                                        /* stop io in case it is already in progress */
                                        if(usbvision->streaming == Stream_On) {
                                                if ((ret = usbvision_stream_interrupt(usbvision)))
        }
 
        if (!(vma->vm_flags & VM_WRITE) ||
-           size != PAGE_ALIGN(usbvision->max_frame_size)) {
+           size != PAGE_ALIGN(usbvision->curwidth*usbvision->curheight*usbvision->palette.bytes_per_pixel)) {
                up(&usbvision->lock);
                return -EINVAL;
        }
                        break;
        }
        if (i == USBVISION_NUMFRAMES) {
-               PDEBUG(DBG_FUNC, "mmap: user supplied mapping address is out of range");
+               PDEBUG(DBG_MMAP, "mmap: user supplied mapping address is out of range");
                up(&usbvision->lock);
                return -EINVAL;
        }
        while (size > 0) {
 
                if (vm_insert_page(vma, start, vmalloc_to_page(pos))) {
-                       PDEBUG(DBG_FUNC, "mmap: vm_insert_page failed");
+                       PDEBUG(DBG_MMAP, "mmap: vm_insert_page failed");
                        up(&usbvision->lock);
                        return -EAGAIN;
                }
        PDEBUG(DBG_IOCTL, "IOCTL   debugging is enabled [video]");
        PDEBUG(DBG_IO,  "IO      debugging is enabled [video]");
        PDEBUG(DBG_PROBE, "PROBE   debugging is enabled [video]");
-       PDEBUG(DBG_FUNC, "FUNC    debugging is enabled [video]");
+       PDEBUG(DBG_MMAP, "MMAP    debugging is enabled [video]");
 
        /* disable planar mode support unless compression enabled */
        if (isocMode != ISOC_MODE_COMPRESS ) {
 
  *  usbvision header file
  *
  * Copyright (c) 1999-2005 Joerg Heckenbach <joerg@heckenbach-aw.de>
+ *                         Dwaine Garden <dwainegarden@rogers.com>
+ *
+ *
+ * Report problems to v4l MailingList : http://www.redhat.com/mailman/listinfo/video4linux-list
  *
  * This module is part of usbvision driver project.
  * Updates to driver completed by Dwaine P. Garden
+ * v4l2 conversion by Thierry Merle <thierry.merle@free.fr>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 #include <media/tuner.h>
 #include <linux/videodev2.h>
 
+#define USBVISION_DEBUG                /* Turn on debug messages */
+
 #ifndef VID_HARDWARE_USBVISION
        #define VID_HARDWARE_USBVISION 34   /* USBVision Video Grabber */
 #endif