365 lines
8.0 KiB
Diff
365 lines
8.0 KiB
Diff
|
diff -Nru stk11xx-2.1.0.orig//stk11xx-sysfs.c stk11xx-2.1.0/stk11xx-sysfs.c
|
||
|
--- stk11xx-2.1.0.orig//stk11xx-sysfs.c 2009-03-25 15:13:05.000000000 +0100
|
||
|
+++ stk11xx-2.1.0/stk11xx-sysfs.c 2011-04-20 17:08:53.354592563 +0200
|
||
|
@@ -40,7 +40,6 @@
|
||
|
#include <linux/kref.h>
|
||
|
#include <linux/device.h>
|
||
|
#include <linux/mm.h>
|
||
|
-#include <linux/videodev.h>
|
||
|
|
||
|
|
||
|
#include <linux/usb.h>
|
||
|
diff -Nru stk11xx-2.1.0.orig//stk11xx-v4l.c stk11xx-2.1.0/stk11xx-v4l.c
|
||
|
--- stk11xx-2.1.0.orig//stk11xx-v4l.c 2009-05-08 12:24:08.000000000 +0200
|
||
|
+++ stk11xx-2.1.0/stk11xx-v4l.c 2011-04-20 17:10:43.953325918 +0200
|
||
|
@@ -40,7 +40,6 @@
|
||
|
#include <linux/kref.h>
|
||
|
#include <linux/vmalloc.h>
|
||
|
#include <linux/mm.h>
|
||
|
-#include <linux/videodev.h>
|
||
|
|
||
|
|
||
|
#include <linux/usb.h>
|
||
|
@@ -625,341 +624,6 @@
|
||
|
#endif
|
||
|
|
||
|
switch (cmd) {
|
||
|
- // Video 4 Linux v1
|
||
|
-
|
||
|
- case VIDIOCGCAP:
|
||
|
- {
|
||
|
- struct video_capability *cap = arg;
|
||
|
-
|
||
|
- STK_DEBUG("VIDIOCGCAP\n");
|
||
|
-
|
||
|
- memset(cap, 0, sizeof(*cap));
|
||
|
- strlcpy(cap->name, "stk11xx", sizeof(cap->name));
|
||
|
- cap->type = VID_TYPE_CAPTURE;
|
||
|
- cap->channels = 1;
|
||
|
- cap->audios = 0;
|
||
|
-
|
||
|
- switch (dev->webcam_type) {
|
||
|
- case STK11XX_SXGA:
|
||
|
- cap->minwidth = stk11xx_image_sizes[STK11XX_80x60].x;
|
||
|
- cap->minheight = stk11xx_image_sizes[STK11XX_80x60].y;
|
||
|
- cap->maxwidth = stk11xx_image_sizes[STK11XX_1280x1024].x;
|
||
|
- cap->maxheight = stk11xx_image_sizes[STK11XX_1280x1024].y;
|
||
|
- break;
|
||
|
-
|
||
|
- case STK11XX_VGA:
|
||
|
- cap->minwidth = stk11xx_image_sizes[STK11XX_80x60].x;
|
||
|
- cap->minheight = stk11xx_image_sizes[STK11XX_80x60].y;
|
||
|
- cap->maxwidth = stk11xx_image_sizes[STK11XX_640x480].x;
|
||
|
- cap->maxheight = stk11xx_image_sizes[STK11XX_640x480].y;
|
||
|
- break;
|
||
|
- }
|
||
|
- }
|
||
|
- break;
|
||
|
-
|
||
|
- case VIDIOCGCHAN:
|
||
|
- {
|
||
|
- struct video_channel *v = arg;
|
||
|
-
|
||
|
- STK_DEBUG("VIDIOCGCHAN\n");
|
||
|
-
|
||
|
- if (v->channel != 0)
|
||
|
- return -EINVAL;
|
||
|
-
|
||
|
- v->flags = 0;
|
||
|
- v->tuners = 0;
|
||
|
- v->type = VIDEO_TYPE_CAMERA;
|
||
|
- strcpy(v->name, "Webcam");
|
||
|
- }
|
||
|
- break;
|
||
|
-
|
||
|
- case VIDIOCSCHAN:
|
||
|
- {
|
||
|
- struct video_channel *v = arg;
|
||
|
-
|
||
|
- STK_DEBUG("VIDIOCSCHAN\n");
|
||
|
-
|
||
|
- if (v->channel != 0)
|
||
|
- return -EINVAL;
|
||
|
- }
|
||
|
- break;
|
||
|
-
|
||
|
- case VIDIOCGPICT:
|
||
|
- {
|
||
|
- struct video_picture *p = arg;
|
||
|
-
|
||
|
- STK_DEBUG("VIDIOCGPICT\n");
|
||
|
-
|
||
|
- p->brightness = dev->vsettings.brightness;
|
||
|
- p->contrast = dev->vsettings.contrast;
|
||
|
- p->whiteness = dev->vsettings.whiteness;
|
||
|
- p->colour = dev->vsettings.colour;
|
||
|
- p->depth = dev->vsettings.depth;
|
||
|
- p->palette = dev->vsettings.palette;
|
||
|
- p->hue = dev->vsettings.hue;
|
||
|
-
|
||
|
- switch (dev->vsettings.palette) {
|
||
|
- case STK11XX_PALETTE_BGR24:
|
||
|
- p->palette = VIDEO_PALETTE_RGB24;
|
||
|
- break;
|
||
|
-
|
||
|
- case STK11XX_PALETTE_BGR32:
|
||
|
- p->palette = VIDEO_PALETTE_RGB32;
|
||
|
- break;
|
||
|
-
|
||
|
- case STK11XX_PALETTE_UYVY:
|
||
|
- p->palette = VIDEO_PALETTE_UYVY;
|
||
|
- break;
|
||
|
-
|
||
|
- case STK11XX_PALETTE_YUYV:
|
||
|
- p->palette = VIDEO_PALETTE_YUYV;
|
||
|
- break;
|
||
|
- }
|
||
|
- }
|
||
|
- break;
|
||
|
-
|
||
|
- case VIDIOCSPICT:
|
||
|
- {
|
||
|
- struct video_picture *p = arg;
|
||
|
-
|
||
|
- STK_DEBUG("VIDIOCSPICT\n");
|
||
|
-
|
||
|
- dev->vsettings.brightness = p->brightness;
|
||
|
- dev->vsettings.contrast = p->contrast;
|
||
|
- dev->vsettings.whiteness = p->whiteness;
|
||
|
- dev->vsettings.colour = p->colour;
|
||
|
- dev->vsettings.hue = p->hue;
|
||
|
-
|
||
|
- if (p->palette && p->palette != dev->vsettings.palette) {
|
||
|
- switch (p->palette) {
|
||
|
- case VIDEO_PALETTE_RGB24:
|
||
|
- dev->vsettings.depth = 24;
|
||
|
- dev->vsettings.palette = STK11XX_PALETTE_BGR24;
|
||
|
- break;
|
||
|
-
|
||
|
- case VIDEO_PALETTE_RGB32:
|
||
|
- dev->vsettings.depth = 32;
|
||
|
- dev->vsettings.palette = STK11XX_PALETTE_BGR32;
|
||
|
- break;
|
||
|
-
|
||
|
- case VIDEO_PALETTE_UYVY:
|
||
|
- dev->vsettings.depth = 16;
|
||
|
- dev->vsettings.palette = STK11XX_PALETTE_UYVY;
|
||
|
- break;
|
||
|
-
|
||
|
- case VIDEO_PALETTE_YUYV:
|
||
|
- dev->vsettings.depth = 16;
|
||
|
- dev->vsettings.palette = STK11XX_PALETTE_YUYV;
|
||
|
- break;
|
||
|
-
|
||
|
- default:
|
||
|
- return -EINVAL;
|
||
|
- }
|
||
|
- }
|
||
|
-
|
||
|
- dev_stk11xx_camera_settings(dev);
|
||
|
-
|
||
|
- STK_DEBUG("VIDIOCSPICT done\n");
|
||
|
- }
|
||
|
- break;
|
||
|
-
|
||
|
- case VIDIOCGWIN:
|
||
|
- {
|
||
|
- struct video_window *vw = arg;
|
||
|
-
|
||
|
- STK_DEBUG("VIDIOCGWIN\n");
|
||
|
-
|
||
|
- vw->x = 0;
|
||
|
- vw->y = 0;
|
||
|
- vw->width = dev->view.x;
|
||
|
- vw->height = dev->view.y;
|
||
|
- vw->chromakey = 0;
|
||
|
- }
|
||
|
- break;
|
||
|
-
|
||
|
- case VIDIOCSWIN:
|
||
|
- {
|
||
|
- struct video_window *vw = arg;
|
||
|
-
|
||
|
- STK_DEBUG("VIDIOCSWIN\n");
|
||
|
-
|
||
|
- STK_DEBUG("Set x=%d, y=%d\n", vw->x, vw->y);
|
||
|
- STK_DEBUG("Set width=%d, height=%d\n", vw->width, vw->height);
|
||
|
- STK_DEBUG("Flags = %X\n", vw->flags);
|
||
|
-
|
||
|
- // Stop the video stream
|
||
|
- dev_stk11xx_stop_stream(dev);
|
||
|
-
|
||
|
- // ISOC and URB cleanup
|
||
|
- usb_stk11xx_isoc_cleanup(dev);
|
||
|
-
|
||
|
- // Switch off the camera
|
||
|
- dev_stk11xx_camera_off(dev);
|
||
|
-
|
||
|
- dev_stk11xx_camera_asleep(dev);
|
||
|
-
|
||
|
- // Select the new video mode
|
||
|
- if (v4l_stk11xx_select_video_mode(dev, vw->width, vw->height)) {
|
||
|
- STK_ERROR("Select video mode failed !\n");
|
||
|
- return -EAGAIN;
|
||
|
- }
|
||
|
-
|
||
|
- // Clear the buffers
|
||
|
- stk11xx_clear_buffers(dev);
|
||
|
-
|
||
|
- // Initialize the device
|
||
|
- dev_stk11xx_init_camera(dev);
|
||
|
- dev_stk11xx_camera_on(dev);
|
||
|
- dev_stk11xx_reconf_camera(dev);
|
||
|
-
|
||
|
- // ISOC and URB init
|
||
|
- usb_stk11xx_isoc_init(dev);
|
||
|
-
|
||
|
- // Re-start the stream
|
||
|
- dev_stk11xx_start_stream(dev);
|
||
|
-
|
||
|
- // Video settings
|
||
|
- dev_stk11xx_camera_settings(dev);
|
||
|
- }
|
||
|
- break;
|
||
|
-
|
||
|
- case VIDIOCGFBUF:
|
||
|
- {
|
||
|
- struct video_buffer *vb = arg;
|
||
|
-
|
||
|
- STK_DEBUG("VIDIOCGFBUF\n");
|
||
|
-
|
||
|
- memset(vb, 0, sizeof(*vb));
|
||
|
- }
|
||
|
- break;
|
||
|
-
|
||
|
- case VIDIOCGMBUF:
|
||
|
- {
|
||
|
- int i;
|
||
|
- struct video_mbuf *vm = arg;
|
||
|
-
|
||
|
- STK_DEBUG("VIDIOCGMBUF\n");
|
||
|
-
|
||
|
- memset(vm, 0, sizeof(*vm));
|
||
|
-
|
||
|
- vm->size = dev->nbuffers * dev->len_per_image;
|
||
|
- vm->frames = dev->nbuffers;
|
||
|
-
|
||
|
- for (i=0; i<dev->nbuffers; i++)
|
||
|
- vm->offsets[i] = i * dev->len_per_image;
|
||
|
- }
|
||
|
- break;
|
||
|
-
|
||
|
- case VIDIOCMCAPTURE:
|
||
|
- {
|
||
|
- struct video_mmap *vm = arg;
|
||
|
-
|
||
|
- STK_DEBUG("VIDIOCMCAPTURE format=%d\n", vm->format);
|
||
|
-
|
||
|
- if (vm->frame < 0 || vm->frame >= dev->nbuffers)
|
||
|
- return -EINVAL;
|
||
|
-
|
||
|
- if (vm->format) {
|
||
|
- switch (vm->format) {
|
||
|
- case VIDEO_PALETTE_RGB32:
|
||
|
- break;
|
||
|
-
|
||
|
- case VIDEO_PALETTE_RGB24:
|
||
|
- break;
|
||
|
-
|
||
|
- case VIDEO_PALETTE_UYVY:
|
||
|
- break;
|
||
|
-
|
||
|
- case VIDEO_PALETTE_YUYV:
|
||
|
- break;
|
||
|
-
|
||
|
- default:
|
||
|
- return -EINVAL;
|
||
|
- }
|
||
|
- }
|
||
|
-
|
||
|
- if ((vm->width != dev->view.x) || (vm->height != dev->view.y))
|
||
|
- return -EAGAIN;
|
||
|
-
|
||
|
- if (dev->image_used[vm->frame])
|
||
|
- return -EBUSY;
|
||
|
-
|
||
|
- dev->image_used[vm->frame] = 1;
|
||
|
-
|
||
|
- STK_DEBUG("VIDIOCMCAPTURE done\n");
|
||
|
- }
|
||
|
- break;
|
||
|
-
|
||
|
- case VIDIOCSYNC:
|
||
|
- {
|
||
|
- int ret;
|
||
|
- int *mbuf = arg;
|
||
|
-
|
||
|
- STK_DEBUG("VIDIOCSYNC\n");
|
||
|
-
|
||
|
- if (*mbuf < 0 || *mbuf >= dev->nbuffers)
|
||
|
- return -EINVAL;
|
||
|
-
|
||
|
- if (dev->image_used[*mbuf] == 0)
|
||
|
- return -EINVAL;
|
||
|
-
|
||
|
- add_wait_queue(&dev->wait_frame, &wait);
|
||
|
-
|
||
|
- while (dev->full_frames == NULL) {
|
||
|
- if (dev->error_status) {
|
||
|
- remove_wait_queue(&dev->wait_frame, &wait);
|
||
|
- set_current_state(TASK_RUNNING);
|
||
|
- return -dev->error_status;
|
||
|
- }
|
||
|
-
|
||
|
- if (signal_pending(current)) {
|
||
|
- remove_wait_queue(&dev->wait_frame, &wait);
|
||
|
- set_current_state(TASK_RUNNING);
|
||
|
- return -ERESTARTSYS;
|
||
|
- }
|
||
|
-
|
||
|
- schedule();
|
||
|
- set_current_state(TASK_INTERRUPTIBLE);
|
||
|
- }
|
||
|
-
|
||
|
- remove_wait_queue(&dev->wait_frame, &wait);
|
||
|
- set_current_state(TASK_RUNNING);
|
||
|
-
|
||
|
- STK_DEBUG("VIDIOCSYNC: frame ready\n");
|
||
|
-
|
||
|
- dev->fill_image = *mbuf;
|
||
|
-
|
||
|
- ret = stk11xx_handle_frame(dev);
|
||
|
-
|
||
|
- if (ret != 0)
|
||
|
- STK_ERROR("VIDIOCSYNC error !\n");
|
||
|
-
|
||
|
- dev->image_used[*mbuf] = 0;
|
||
|
- }
|
||
|
- break;
|
||
|
-
|
||
|
- case VIDIOCGAUDIO:
|
||
|
- STK_DEBUG("VIDIOCGAUDIO\n");
|
||
|
- return -EINVAL;
|
||
|
- break;
|
||
|
-
|
||
|
- case VIDIOCSAUDIO:
|
||
|
- STK_DEBUG("VIDIOCSAUDIO\n");
|
||
|
- return -EINVAL;
|
||
|
- break;
|
||
|
-
|
||
|
- case VIDIOCGUNIT:
|
||
|
- {
|
||
|
- struct video_unit *vu = arg;
|
||
|
-
|
||
|
- vu->video = dev->vdev->minor & 0x3f;
|
||
|
- vu->audio = -1;
|
||
|
- vu->vbi = -1;
|
||
|
- vu->radio = -1;
|
||
|
- vu->teletext = -1;
|
||
|
- }
|
||
|
- break;
|
||
|
-
|
||
|
|
||
|
// Video 4 Linux v2
|
||
|
|