All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Philipp Zabel <philipp.zabel@gmail.com>
Cc: linux-media@vger.kernel.org
Subject: Re: [RFC PATCH] uvcvideo: Add quirk to force the Oculus DK2 IR tracker to grayscale
Date: Wed, 06 Aug 2014 00:57:50 +0200	[thread overview]
Message-ID: <7469726.37hXtroWo1@avalon> (raw)
In-Reply-To: <1407182535-7622-1-git-send-email-philipp.zabel@gmail.com>

Hi Philipp,

Thank you for the patch.

On Monday 04 August 2014 22:02:15 Philipp Zabel wrote:
> This patch adds a quirk to force Y8 pixel format even if the camera reports
> half-width YUYV.
> 
> Signed-off-by: Philipp Zabel <philipp.zabel@gmail.com>
> ---
> The Oculus Rift DK2 comes with an IR webcam that lies about the pixel
> format and frame size it produces. This is a quick hack to make it
> produce proper greyscale images.

I wish webcam vendors could get the firmware right... *sigh*



> ---
>  drivers/media/usb/uvc/uvc_driver.c | 19 +++++++++++++++++++
>  drivers/media/usb/uvc/uvcvideo.h   |  1 +
>  2 files changed, 20 insertions(+)
> 
> diff --git a/drivers/media/usb/uvc/uvc_driver.c
> b/drivers/media/usb/uvc/uvc_driver.c index f8135f4..322a674 100644
> --- a/drivers/media/usb/uvc/uvc_driver.c
> +++ b/drivers/media/usb/uvc/uvc_driver.c
> @@ -352,6 +352,10 @@ static int uvc_parse_format(struct uvc_device *dev,
> 
>  		/* Find the format descriptor from its GUID. */
>  		fmtdesc = uvc_format_by_guid(&buffer[5]);
> +		if (dev->quirks & UVC_QUIRK_FORCE_Y8) {
> +			WARN_ON(!fmtdesc || fmtdesc->fcc != V4L2_PIX_FMT_YUYV);

I don't think this deserves a full WARN_ON, just a warning message should do.

> +			fmtdesc = &uvc_fmts[9];

Do we have to force all formats to Y8, or should we only force 
V4L2_PIX_FMT_YUYV ? To put it differently, could we have cameras that 
implement different formats and for which only YUYV is incorrect ?

Ideally I'd like a more versatile format override mechanism, not just an ad-
hoc quirk, but the overheard is probably too big given the problem at hand. We 
can delay that to the next format-related quirk.

> +		}
> 
>  		if (fmtdesc != NULL) {
>  			strlcpy(format->name, fmtdesc->name,
> @@ -366,6 +370,10 @@ static int uvc_parse_format(struct uvc_device *dev,
>  		}
> 
>  		format->bpp = buffer[21];
> +		if (dev->quirks & UVC_QUIRK_FORCE_Y8) {
> +			WARN_ON(format->bpp != 16);

Same here.

> +			format->bpp /= 2;
> +		}
>  		if (buffer[2] == UVC_VS_FORMAT_UNCOMPRESSED) {
>  			ftype = UVC_VS_FRAME_UNCOMPRESSED;
>  		} else {
> @@ -475,6 +483,8 @@ static int uvc_parse_format(struct uvc_device *dev,
>  		frame->bFrameIndex = buffer[3];
>  		frame->bmCapabilities = buffer[4];
>  		frame->wWidth = get_unaligned_le16(&buffer[5]);
> +		if (dev->quirks & UVC_QUIRK_FORCE_Y8)
> +			frame->wWidth *= 2;
>  		frame->wHeight = get_unaligned_le16(&buffer[7]);
>  		frame->dwMinBitRate = get_unaligned_le32(&buffer[9]);
>  		frame->dwMaxBitRate = get_unaligned_le32(&buffer[13]);
> @@ -2486,6 +2496,15 @@ static struct usb_device_id uvc_ids[] = {
>  	  .bInterfaceProtocol	= 0,
>  	  .driver_info		= UVC_QUIRK_PROBE_MINMAX
> 
>  				| UVC_QUIRK_IGNORE_SELECTOR_UNIT },
> 
> +	/* Oculus VR Positional Tracker DK2 */
> +	{ .match_flags		= USB_DEVICE_ID_MATCH_DEVICE
> +				| USB_DEVICE_ID_MATCH_INT_INFO,
> +	  .idVendor		= 0x2833,
> +	  .idProduct		= 0x0201,
> +	  .bInterfaceClass	= USB_CLASS_VIDEO,
> +	  .bInterfaceSubClass	= 1,
> +	  .bInterfaceProtocol	= 0,
> +	  .driver_info		= UVC_QUIRK_FORCE_Y8 },
>  	/* Generic USB Video Class */
>  	{ USB_INTERFACE_INFO(USB_CLASS_VIDEO, 1, 0) },
>  	{}
> diff --git a/drivers/media/usb/uvc/uvcvideo.h
> b/drivers/media/usb/uvc/uvcvideo.h index b1f69a6..1252040 100644
> --- a/drivers/media/usb/uvc/uvcvideo.h
> +++ b/drivers/media/usb/uvc/uvcvideo.h
> @@ -147,6 +147,7 @@
>  #define UVC_QUIRK_FIX_BANDWIDTH		0x00000080
>  #define UVC_QUIRK_PROBE_DEF		0x00000100
>  #define UVC_QUIRK_RESTRICT_FRAME_RATE	0x00000200
> +#define UVC_QUIRK_FORCE_Y8		0x00000400
> 
>  /* Format flags */
>  #define UVC_FMT_FLAG_COMPRESSED		0x00000001

-- 
Regards,

Laurent Pinchart


      reply	other threads:[~2014-08-05 22:57 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-04 20:02 [RFC PATCH] uvcvideo: Add quirk to force the Oculus DK2 IR tracker to grayscale Philipp Zabel
2014-08-05 22:57 ` Laurent Pinchart [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7469726.37hXtroWo1@avalon \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=linux-media@vger.kernel.org \
    --cc=philipp.zabel@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.