V4L/DVB (10197): uvcvideo: Whitespace and comments cleanup, copyright updates.
Signed-off-by: Laurent Pinchart <laurent.pinchart@skynet.be> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
bb1b082ed6
commit
2c2d264bb9
8 changed files with 183 additions and 177 deletions
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* uvc_ctrl.c -- USB Video Class driver - Controls
|
* uvc_ctrl.c -- USB Video Class driver - Controls
|
||||||
*
|
*
|
||||||
* Copyright (C) 2005-2008
|
* Copyright (C) 2005-2009
|
||||||
* Laurent Pinchart (laurent.pinchart@skynet.be)
|
* Laurent Pinchart (laurent.pinchart@skynet.be)
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
#define UVC_CTRL_DATA_BACKUP 1
|
#define UVC_CTRL_DATA_BACKUP 1
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------
|
/* ------------------------------------------------------------------------
|
||||||
* Control, formats, ...
|
* Controls
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static struct uvc_control_info uvc_ctrls[] = {
|
static struct uvc_control_info uvc_ctrls[] = {
|
||||||
|
@ -634,7 +634,7 @@ static __s32 uvc_get_le_value(struct uvc_control_mapping *mapping,
|
||||||
mask = (1 << bits) - 1;
|
mask = (1 << bits) - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Sign-extend the value if needed */
|
/* Sign-extend the value if needed. */
|
||||||
if (mapping->data_type == UVC_CTRL_DATA_TYPE_SIGNED)
|
if (mapping->data_type == UVC_CTRL_DATA_TYPE_SIGNED)
|
||||||
value |= -(value & (1 << (mapping->size - 1)));
|
value |= -(value & (1 << (mapping->size - 1)));
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* uvc_driver.c -- USB Video Class driver
|
* uvc_driver.c -- USB Video Class driver
|
||||||
*
|
*
|
||||||
* Copyright (C) 2005-2008
|
* Copyright (C) 2005-2009
|
||||||
* Laurent Pinchart (laurent.pinchart@skynet.be)
|
* Laurent Pinchart (laurent.pinchart@skynet.be)
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
@ -48,7 +48,7 @@ static unsigned int uvc_quirks_param;
|
||||||
unsigned int uvc_trace_param;
|
unsigned int uvc_trace_param;
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------
|
/* ------------------------------------------------------------------------
|
||||||
* Control, formats, ...
|
* Video formats
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static struct uvc_format_desc uvc_fmts[] = {
|
static struct uvc_format_desc uvc_fmts[] = {
|
||||||
|
@ -473,7 +473,7 @@ static int uvc_parse_format(struct uvc_device *dev,
|
||||||
|
|
||||||
/* Several UVC chipsets screw up dwMaxVideoFrameBufferSize
|
/* Several UVC chipsets screw up dwMaxVideoFrameBufferSize
|
||||||
* completely. Observed behaviours range from setting the
|
* completely. Observed behaviours range from setting the
|
||||||
* value to 1.1x the actual frame size of hardwiring the
|
* value to 1.1x the actual frame size to hardwiring the
|
||||||
* 16 low bits to 0. This results in a higher than necessary
|
* 16 low bits to 0. This results in a higher than necessary
|
||||||
* memory usage as well as a wrong image size information. For
|
* memory usage as well as a wrong image size information. For
|
||||||
* uncompressed formats this can be fixed by computing the
|
* uncompressed formats this can be fixed by computing the
|
||||||
|
@ -486,7 +486,7 @@ static int uvc_parse_format(struct uvc_device *dev,
|
||||||
/* Some bogus devices report dwMinFrameInterval equal to
|
/* Some bogus devices report dwMinFrameInterval equal to
|
||||||
* dwMaxFrameInterval and have dwFrameIntervalStep set to
|
* dwMaxFrameInterval and have dwFrameIntervalStep set to
|
||||||
* zero. Setting all null intervals to 1 fixes the problem and
|
* zero. Setting all null intervals to 1 fixes the problem and
|
||||||
* some other divisions by zero which could happen.
|
* some other divisions by zero that could happen.
|
||||||
*/
|
*/
|
||||||
for (i = 0; i < n; ++i) {
|
for (i = 0; i < n; ++i) {
|
||||||
interval = get_unaligned_le32(&buffer[26+4*i]);
|
interval = get_unaligned_le32(&buffer[26+4*i]);
|
||||||
|
@ -1199,13 +1199,13 @@ static void uvc_unregister_video(struct uvc_device *dev)
|
||||||
* Scan the UVC descriptors to locate a chain starting at an Output Terminal
|
* Scan the UVC descriptors to locate a chain starting at an Output Terminal
|
||||||
* and containing the following units:
|
* and containing the following units:
|
||||||
*
|
*
|
||||||
* - a USB Streaming Output Terminal
|
* - one Output Terminal (USB Streaming or Display)
|
||||||
* - zero or one Processing Unit
|
* - zero or one Processing Unit
|
||||||
* - zero, one or mode single-input Selector Units
|
* - zero, one or mode single-input Selector Units
|
||||||
* - zero or one multiple-input Selector Units, provided all inputs are
|
* - zero or one multiple-input Selector Units, provided all inputs are
|
||||||
* connected to input terminals
|
* connected to input terminals
|
||||||
* - zero, one or mode single-input Extension Units
|
* - zero, one or mode single-input Extension Units
|
||||||
* - one Camera Input Terminal, or one or more External terminals.
|
* - one or more Input Terminals (Camera, External or USB Streaming)
|
||||||
*
|
*
|
||||||
* A side forward scan is made on each detected entity to check for additional
|
* A side forward scan is made on each detected entity to check for additional
|
||||||
* extension units.
|
* extension units.
|
||||||
|
@ -1530,10 +1530,6 @@ static int uvc_register_video(struct uvc_device *dev)
|
||||||
|
|
||||||
/* Set the driver data before calling video_register_device, otherwise
|
/* Set the driver data before calling video_register_device, otherwise
|
||||||
* uvc_v4l2_open might race us.
|
* uvc_v4l2_open might race us.
|
||||||
*
|
|
||||||
* FIXME: usb_set_intfdata hasn't been called so far. Is that a
|
|
||||||
* problem ? Does any function which could be called here get
|
|
||||||
* a pointer to the usb_interface ?
|
|
||||||
*/
|
*/
|
||||||
dev->video.vdev = vdev;
|
dev->video.vdev = vdev;
|
||||||
video_set_drvdata(vdev, &dev->video);
|
video_set_drvdata(vdev, &dev->video);
|
||||||
|
@ -1568,7 +1564,7 @@ void uvc_delete(struct kref *kref)
|
||||||
struct uvc_device *dev = container_of(kref, struct uvc_device, kref);
|
struct uvc_device *dev = container_of(kref, struct uvc_device, kref);
|
||||||
struct list_head *p, *n;
|
struct list_head *p, *n;
|
||||||
|
|
||||||
/* Unregister the video device */
|
/* Unregister the video device. */
|
||||||
uvc_unregister_video(dev);
|
uvc_unregister_video(dev);
|
||||||
usb_put_intf(dev->intf);
|
usb_put_intf(dev->intf);
|
||||||
usb_put_dev(dev->udev);
|
usb_put_dev(dev->udev);
|
||||||
|
@ -1611,7 +1607,7 @@ static int uvc_probe(struct usb_interface *intf,
|
||||||
uvc_trace(UVC_TRACE_PROBE, "Probing generic UVC device %s\n",
|
uvc_trace(UVC_TRACE_PROBE, "Probing generic UVC device %s\n",
|
||||||
udev->devpath);
|
udev->devpath);
|
||||||
|
|
||||||
/* Allocate memory for the device and initialize it */
|
/* Allocate memory for the device and initialize it. */
|
||||||
if ((dev = kzalloc(sizeof *dev, GFP_KERNEL)) == NULL)
|
if ((dev = kzalloc(sizeof *dev, GFP_KERNEL)) == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
@ -1632,7 +1628,7 @@ static int uvc_probe(struct usb_interface *intf,
|
||||||
le16_to_cpu(udev->descriptor.idVendor),
|
le16_to_cpu(udev->descriptor.idVendor),
|
||||||
le16_to_cpu(udev->descriptor.idProduct));
|
le16_to_cpu(udev->descriptor.idProduct));
|
||||||
|
|
||||||
/* Parse the Video Class control descriptor */
|
/* Parse the Video Class control descriptor. */
|
||||||
if (uvc_parse_control(dev) < 0) {
|
if (uvc_parse_control(dev) < 0) {
|
||||||
uvc_trace(UVC_TRACE_PROBE, "Unable to parse UVC "
|
uvc_trace(UVC_TRACE_PROBE, "Unable to parse UVC "
|
||||||
"descriptors.\n");
|
"descriptors.\n");
|
||||||
|
@ -1652,18 +1648,18 @@ static int uvc_probe(struct usb_interface *intf,
|
||||||
"linux-uvc-devel mailing list.\n");
|
"linux-uvc-devel mailing list.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize controls */
|
/* Initialize controls. */
|
||||||
if (uvc_ctrl_init_device(dev) < 0)
|
if (uvc_ctrl_init_device(dev) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
/* Register the video devices */
|
/* Register the video devices. */
|
||||||
if (uvc_register_video(dev) < 0)
|
if (uvc_register_video(dev) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
/* Save our data pointer in the interface data */
|
/* Save our data pointer in the interface data. */
|
||||||
usb_set_intfdata(intf, dev);
|
usb_set_intfdata(intf, dev);
|
||||||
|
|
||||||
/* Initialize the interrupt URB */
|
/* Initialize the interrupt URB. */
|
||||||
if ((ret = uvc_status_init(dev)) < 0) {
|
if ((ret = uvc_status_init(dev)) < 0) {
|
||||||
uvc_printk(KERN_INFO, "Unable to initialize the status "
|
uvc_printk(KERN_INFO, "Unable to initialize the status "
|
||||||
"endpoint (%d), status interrupt will not be "
|
"endpoint (%d), status interrupt will not be "
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
*
|
*
|
||||||
* Copyright (C) 2006-2007
|
* Copyright (C) 2006-2007
|
||||||
* Ivan N. Zlatev <contact@i-nz.net>
|
* Ivan N. Zlatev <contact@i-nz.net>
|
||||||
|
* Copyright (C) 2008-2009
|
||||||
|
* Laurent Pinchart <laurent.pinchart@skynet.be>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* uvc_queue.c -- USB Video Class driver - Buffers management
|
* uvc_queue.c -- USB Video Class driver - Buffers management
|
||||||
*
|
*
|
||||||
* Copyright (C) 2005-2008
|
* Copyright (C) 2005-2009
|
||||||
* Laurent Pinchart (laurent.pinchart@skynet.be)
|
* Laurent Pinchart (laurent.pinchart@skynet.be)
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
@ -36,22 +36,22 @@
|
||||||
* to user space will return -EBUSY.
|
* to user space will return -EBUSY.
|
||||||
*
|
*
|
||||||
* Video buffers are managed using two queues. However, unlike most USB video
|
* Video buffers are managed using two queues. However, unlike most USB video
|
||||||
* drivers which use an in queue and an out queue, we use a main queue which
|
* drivers that use an in queue and an out queue, we use a main queue to hold
|
||||||
* holds all queued buffers (both 'empty' and 'done' buffers), and an irq
|
* all queued buffers (both 'empty' and 'done' buffers), and an irq queue to
|
||||||
* queue which holds empty buffers. This design (copied from video-buf)
|
* hold empty buffers. This design (copied from video-buf) minimizes locking
|
||||||
* minimizes locking in interrupt, as only one queue is shared between
|
* in interrupt, as only one queue is shared between interrupt and user
|
||||||
* interrupt and user contexts.
|
* contexts.
|
||||||
*
|
*
|
||||||
* Use cases
|
* Use cases
|
||||||
* ---------
|
* ---------
|
||||||
*
|
*
|
||||||
* Unless stated otherwise, all operations which modify the irq buffers queue
|
* Unless stated otherwise, all operations that modify the irq buffers queue
|
||||||
* are protected by the irq spinlock.
|
* are protected by the irq spinlock.
|
||||||
*
|
*
|
||||||
* 1. The user queues the buffers, starts streaming and dequeues a buffer.
|
* 1. The user queues the buffers, starts streaming and dequeues a buffer.
|
||||||
*
|
*
|
||||||
* The buffers are added to the main and irq queues. Both operations are
|
* The buffers are added to the main and irq queues. Both operations are
|
||||||
* protected by the queue lock, and the latert is protected by the irq
|
* protected by the queue lock, and the later is protected by the irq
|
||||||
* spinlock as well.
|
* spinlock as well.
|
||||||
*
|
*
|
||||||
* The completion handler fetches a buffer from the irq queue and fills it
|
* The completion handler fetches a buffer from the irq queue and fills it
|
||||||
|
@ -59,7 +59,7 @@
|
||||||
* returns immediately.
|
* returns immediately.
|
||||||
*
|
*
|
||||||
* When the buffer is full, the completion handler removes it from the irq
|
* When the buffer is full, the completion handler removes it from the irq
|
||||||
* queue, marks it as ready (UVC_BUF_STATE_DONE) and wake its wait queue.
|
* queue, marks it as ready (UVC_BUF_STATE_DONE) and wakes its wait queue.
|
||||||
* At that point, any process waiting on the buffer will be woken up. If a
|
* At that point, any process waiting on the buffer will be woken up. If a
|
||||||
* process tries to dequeue a buffer after it has been marked ready, the
|
* process tries to dequeue a buffer after it has been marked ready, the
|
||||||
* dequeing will succeed immediately.
|
* dequeing will succeed immediately.
|
||||||
|
@ -90,8 +90,8 @@ void uvc_queue_init(struct uvc_video_queue *queue, enum v4l2_buf_type type)
|
||||||
/*
|
/*
|
||||||
* Allocate the video buffers.
|
* Allocate the video buffers.
|
||||||
*
|
*
|
||||||
* Pages are reserved to make sure they will not be swaped, as they will be
|
* Pages are reserved to make sure they will not be swapped, as they will be
|
||||||
* filled in URB completion handler.
|
* filled in the URB completion handler.
|
||||||
*
|
*
|
||||||
* Buffers will be individually mapped, so they must all be page aligned.
|
* Buffers will be individually mapped, so they must all be page aligned.
|
||||||
*/
|
*/
|
||||||
|
@ -428,7 +428,7 @@ done:
|
||||||
* Cancel the video buffers queue.
|
* Cancel the video buffers queue.
|
||||||
*
|
*
|
||||||
* Cancelling the queue marks all buffers on the irq queue as erroneous,
|
* Cancelling the queue marks all buffers on the irq queue as erroneous,
|
||||||
* wakes them up and remove them from the queue.
|
* wakes them up and removes them from the queue.
|
||||||
*
|
*
|
||||||
* If the disconnect parameter is set, further calls to uvc_queue_buffer will
|
* If the disconnect parameter is set, further calls to uvc_queue_buffer will
|
||||||
* fail with -ENODEV.
|
* fail with -ENODEV.
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* uvc_status.c -- USB Video Class driver - Status endpoint
|
* uvc_status.c -- USB Video Class driver - Status endpoint
|
||||||
*
|
*
|
||||||
* Copyright (C) 2007-2008
|
* Copyright (C) 2007-2009
|
||||||
* Laurent Pinchart (laurent.pinchart@skynet.be)
|
* Laurent Pinchart (laurent.pinchart@skynet.be)
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* uvc_v4l2.c -- USB Video Class driver - V4L2 API
|
* uvc_v4l2.c -- USB Video Class driver - V4L2 API
|
||||||
*
|
*
|
||||||
* Copyright (C) 2005-2008
|
* Copyright (C) 2005-2009
|
||||||
* Laurent Pinchart (laurent.pinchart@skynet.be)
|
* Laurent Pinchart (laurent.pinchart@skynet.be)
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
@ -37,7 +37,7 @@
|
||||||
* must be grouped (for instance the Red Balance, Blue Balance and Do White
|
* must be grouped (for instance the Red Balance, Blue Balance and Do White
|
||||||
* Balance V4L2 controls use the White Balance Component UVC control) or
|
* Balance V4L2 controls use the White Balance Component UVC control) or
|
||||||
* otherwise translated. The approach we take here is to use a translation
|
* otherwise translated. The approach we take here is to use a translation
|
||||||
* table for the controls which can be mapped directly, and handle the others
|
* table for the controls that can be mapped directly, and handle the others
|
||||||
* manually.
|
* manually.
|
||||||
*/
|
*/
|
||||||
static int uvc_v4l2_query_menu(struct uvc_video_device *video,
|
static int uvc_v4l2_query_menu(struct uvc_video_device *video,
|
||||||
|
@ -189,7 +189,7 @@ static int uvc_v4l2_try_format(struct uvc_video_device *video,
|
||||||
probe->dwMaxVideoFrameSize =
|
probe->dwMaxVideoFrameSize =
|
||||||
video->streaming->ctrl.dwMaxVideoFrameSize;
|
video->streaming->ctrl.dwMaxVideoFrameSize;
|
||||||
|
|
||||||
/* Probe the device */
|
/* Probe the device. */
|
||||||
if ((ret = uvc_probe_video(video, probe)) < 0)
|
if ((ret = uvc_probe_video(video, probe)) < 0)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
|
@ -354,11 +354,11 @@ static int uvc_v4l2_set_streamparm(struct uvc_video_device *video,
|
||||||
*
|
*
|
||||||
* Each open instance of a UVC device can either be in a privileged or
|
* Each open instance of a UVC device can either be in a privileged or
|
||||||
* unprivileged state. Only a single instance can be in a privileged state at
|
* unprivileged state. Only a single instance can be in a privileged state at
|
||||||
* a given time. Trying to perform an operation which requires privileges will
|
* a given time. Trying to perform an operation that requires privileges will
|
||||||
* automatically acquire the required privileges if possible, or return -EBUSY
|
* automatically acquire the required privileges if possible, or return -EBUSY
|
||||||
* otherwise. Privileges are dismissed when closing the instance.
|
* otherwise. Privileges are dismissed when closing the instance.
|
||||||
*
|
*
|
||||||
* Operations which require privileges are:
|
* Operations that require privileges are:
|
||||||
*
|
*
|
||||||
* - VIDIOC_S_INPUT
|
* - VIDIOC_S_INPUT
|
||||||
* - VIDIOC_S_PARM
|
* - VIDIOC_S_PARM
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* uvc_video.c -- USB Video Class driver - Video handling
|
* uvc_video.c -- USB Video Class driver - Video handling
|
||||||
*
|
*
|
||||||
* Copyright (C) 2005-2008
|
* Copyright (C) 2005-2009
|
||||||
* Laurent Pinchart (laurent.pinchart@skynet.be)
|
* Laurent Pinchart (laurent.pinchart@skynet.be)
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
@ -159,7 +159,7 @@ static int uvc_get_video_ctrl(struct uvc_video_device *video,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Some broken devices return a null or wrong dwMaxVideoFrameSize.
|
/* Some broken devices return a null or wrong dwMaxVideoFrameSize.
|
||||||
* Try to get the value from the format and frame descriptor.
|
* Try to get the value from the format and frame descriptors.
|
||||||
*/
|
*/
|
||||||
uvc_fixup_buffer_size(video, ctrl);
|
uvc_fixup_buffer_size(video, ctrl);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
@ -190,9 +190,6 @@ static int uvc_set_video_ctrl(struct uvc_video_device *video,
|
||||||
*(__le16 *)&data[12] = cpu_to_le16(ctrl->wCompQuality);
|
*(__le16 *)&data[12] = cpu_to_le16(ctrl->wCompQuality);
|
||||||
*(__le16 *)&data[14] = cpu_to_le16(ctrl->wCompWindowSize);
|
*(__le16 *)&data[14] = cpu_to_le16(ctrl->wCompWindowSize);
|
||||||
*(__le16 *)&data[16] = cpu_to_le16(ctrl->wDelay);
|
*(__le16 *)&data[16] = cpu_to_le16(ctrl->wDelay);
|
||||||
/* Note: Some of the fields below are not required for IN devices (see
|
|
||||||
* UVC spec, 4.3.1.1), but we still copy them in case support for OUT
|
|
||||||
* devices is added in the future. */
|
|
||||||
put_unaligned_le32(ctrl->dwMaxVideoFrameSize, &data[18]);
|
put_unaligned_le32(ctrl->dwMaxVideoFrameSize, &data[18]);
|
||||||
put_unaligned_le32(ctrl->dwMaxPayloadTransferSize, &data[22]);
|
put_unaligned_le32(ctrl->dwMaxPayloadTransferSize, &data[22]);
|
||||||
|
|
||||||
|
@ -399,7 +396,7 @@ static int uvc_video_decode_start(struct uvc_video_device *video,
|
||||||
*
|
*
|
||||||
* Empty buffers (bytesused == 0) don't trigger end of frame detection
|
* Empty buffers (bytesused == 0) don't trigger end of frame detection
|
||||||
* as it doesn't make sense to return an empty buffer. This also
|
* as it doesn't make sense to return an empty buffer. This also
|
||||||
* avoids detecting and of frame conditions at FID toggling if the
|
* avoids detecting end of frame conditions at FID toggling if the
|
||||||
* previous payload had the EOF bit set.
|
* previous payload had the EOF bit set.
|
||||||
*/
|
*/
|
||||||
if (fid != video->last_fid && buf->buf.bytesused != 0) {
|
if (fid != video->last_fid && buf->buf.bytesused != 0) {
|
||||||
|
@ -452,6 +449,17 @@ static void uvc_video_decode_end(struct uvc_video_device *video,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Video payload encoding is handled by uvc_video_encode_header() and
|
||||||
|
* uvc_video_encode_data(). Only bulk transfers are currently supported.
|
||||||
|
*
|
||||||
|
* uvc_video_encode_header is called at the start of a payload. It adds header
|
||||||
|
* data to the transfer buffer and returns the header size. As the only known
|
||||||
|
* UVC output device transfers a whole frame in a single payload, the EOF bit
|
||||||
|
* is always set in the header.
|
||||||
|
*
|
||||||
|
* uvc_video_encode_data is called for every URB and copies the data from the
|
||||||
|
* video buffer to the transfer buffer.
|
||||||
|
*/
|
||||||
static int uvc_video_encode_header(struct uvc_video_device *video,
|
static int uvc_video_encode_header(struct uvc_video_device *video,
|
||||||
struct uvc_buffer *buf, __u8 *data, int len)
|
struct uvc_buffer *buf, __u8 *data, int len)
|
||||||
{
|
{
|
||||||
|
@ -952,7 +960,7 @@ int uvc_video_suspend(struct uvc_video_device *video)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Reconfigure the video interface and restart streaming if it was enable
|
* Reconfigure the video interface and restart streaming if it was enabled
|
||||||
* before suspend.
|
* before suspend.
|
||||||
*
|
*
|
||||||
* If an error occurs, disable the video queue. This will wake all pending
|
* If an error occurs, disable the video queue. This will wake all pending
|
||||||
|
@ -984,8 +992,8 @@ int uvc_video_resume(struct uvc_video_device *video)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize the UVC video device by retrieving the default format and
|
* Initialize the UVC video device by switching to alternate setting 0 and
|
||||||
* committing it.
|
* retrieve the default format.
|
||||||
*
|
*
|
||||||
* Some cameras (namely the Fuji Finepix) set the format and frame
|
* Some cameras (namely the Fuji Finepix) set the format and frame
|
||||||
* indexes to zero. The UVC standard doesn't clearly make this a spec
|
* indexes to zero. The UVC standard doesn't clearly make this a spec
|
||||||
|
@ -1013,7 +1021,7 @@ int uvc_video_init(struct uvc_video_device *video)
|
||||||
*/
|
*/
|
||||||
usb_set_interface(video->dev->udev, video->streaming->intfnum, 0);
|
usb_set_interface(video->dev->udev, video->streaming->intfnum, 0);
|
||||||
|
|
||||||
/* Some webcams don't suport GET_DEF request on the probe control. We
|
/* Some webcams don't suport GET_DEF requests on the probe control. We
|
||||||
* fall back to GET_CUR if GET_DEF fails.
|
* fall back to GET_CUR if GET_DEF fails.
|
||||||
*/
|
*/
|
||||||
if ((ret = uvc_get_video_ctrl(video, probe, 1, GET_DEF)) < 0 &&
|
if ((ret = uvc_get_video_ctrl(video, probe, 1, GET_DEF)) < 0 &&
|
||||||
|
|
Loading…
Reference in a new issue