From c876a3468d0f136710af81595177889953d1ff71 Mon Sep 17 00:00:00 2001 From: Thierry MERLE Date: Sat, 9 Dec 2006 16:42:54 -0300 Subject: [PATCH] V4L/DVB (4953): Usbvision minor fixes - fix debug outputs - fix returned parameters on VIDIOC_G_FMT, VIDIOC_S_FMT and VIDIOC_TRY_FMT and mmap size setting Signed-off-by: Thierry MERLE Signed-off-by: Mauro Carvalho Chehab --- drivers/media/video/usbvision/usbvision-core.c | 1 + drivers/media/video/usbvision/usbvision-video.c | 28 ++++++++++++++++--------- drivers/media/video/usbvision/usbvision.h | 7 +++++++ 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/drivers/media/video/usbvision/usbvision-core.c b/drivers/media/video/usbvision/usbvision-core.c index e660a91d8251..9163b60c7f91 100644 --- a/drivers/media/video/usbvision/usbvision-core.c +++ b/drivers/media/video/usbvision/usbvision-core.c @@ -87,6 +87,7 @@ MODULE_PARM_DESC(SwitchSVideoInput, " Set the S-Video input. Some cables and in #define DBG_ISOC 1<<2 #define DBG_PARSE 1<<3 #define DBG_SCRATCH 1<<4 +#define DBG_FUNC 1<<5 static const int max_imgwidth = MAX_FRAME_WIDTH; static const int max_imgheight = MAX_FRAME_HEIGHT; diff --git a/drivers/media/video/usbvision/usbvision-video.c b/drivers/media/video/usbvision/usbvision-video.c index 3f3839be561f..864446c012eb 100644 --- a/drivers/media/video/usbvision/usbvision-video.c +++ b/drivers/media/video/usbvision/usbvision-video.c @@ -92,8 +92,6 @@ #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) @@ -104,7 +102,7 @@ #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++; @@ -821,7 +819,7 @@ static int usbvision_v4l2_do_ioctl(struct inode *inode, struct file *file, 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; @@ -959,13 +957,14 @@ static int usbvision_v4l2_do_ioctl(struct inode *inode, struct file *file, 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: @@ -991,6 +990,15 @@ static int usbvision_v4l2_do_ioctl(struct inode *inode, struct file *file, 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))) @@ -1133,7 +1141,7 @@ static int usbvision_v4l2_mmap(struct file *file, struct vm_area_struct *vma) } 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; } @@ -1143,7 +1151,7 @@ static int usbvision_v4l2_mmap(struct file *file, struct vm_area_struct *vma) 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; } @@ -1156,7 +1164,7 @@ static int usbvision_v4l2_mmap(struct file *file, struct vm_area_struct *vma) 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; } @@ -2003,7 +2011,7 @@ static int __init usbvision_init(void) 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 ) { diff --git a/drivers/media/video/usbvision/usbvision.h b/drivers/media/video/usbvision/usbvision.h index f2eeda8326ff..0e7e3d653cac 100644 --- a/drivers/media/video/usbvision/usbvision.h +++ b/drivers/media/video/usbvision/usbvision.h @@ -3,9 +3,14 @@ * usbvision header file * * Copyright (c) 1999-2005 Joerg Heckenbach + * Dwaine Garden + * + * + * 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 * * 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 @@ -32,6 +37,8 @@ #include #include +#define USBVISION_DEBUG /* Turn on debug messages */ + #ifndef VID_HARDWARE_USBVISION #define VID_HARDWARE_USBVISION 34 /* USBVision Video Grabber */ #endif -- 2.11.0