From: Hans de Goede <j.w.r.degoede@hhs.nl>
To: Simon Farnsworth <simon.farnsworth@onelan.com>
Cc: Linux Media Mailing List <linux-media@vger.kernel.org>
Subject: Re: libv4l2 and the Hauppauge HVR1600 (cx18 driver) not working well together
Date: Thu, 03 Sep 2009 11:44:38 +0200 [thread overview]
Message-ID: <4A9F9006.6020203@hhs.nl> (raw)
In-Reply-To: <4A9F89AD.7030106@onelan.com>
[-- Attachment #1: Type: text/plain, Size: 2202 bytes --]
Hi,
On 09/03/2009 11:17 AM, Simon Farnsworth wrote:
> Hans de Goede wrote:
>> Hi,
>>
>> On 09/02/2009 06:32 PM, Simon Farnsworth wrote:
>>> I have a Hauppauge HVR1600 for NTSC and ATSC support, and it appears to
>>> simply not work with libv4l2, due to lack of mmap support. My code works
>>> adequately (modulo a nice pile of bugs) with a HVR1110r3, so it appears
>>> to be driver level.
>>>
>>> Which is the better route to handling this; adding code to input_v4l to
>>> use libv4lconvert when mmap isn't available, or converting the cx18
>>> driver to use mmap?
>>>
>>
>> Or modify libv4l2 to also handle devices which can only do read. There have
>> been some changes to libv4l2 recently which would make doing that feasible.
>>
> Roughly what would I need to do to libv4l2?
>
> I can see four new cases to handle:
>
> 1) driver supports read(), client wants read(), format supported by
> both. Just pass read() through to the driver.
>
>
> 3) As 1, but needs conversion. read() into a temporary buffer, convert
> with libv4lconvert (I think this needs a secondary buffer), and supply
> data from the secondary buffer to read()
>
Ok,
That was even easier then I thought it would be. Attached is a patch
(against libv4l-0.6.1), which implements 1) and 3) from above.
Please give this a try.
Regards,
Hans
>>> If it's a case of converting the cx18 driver, how would I go about doing
>>> that? I have no experience of the driver, so I'm not sure what I'd have
>>> to do - noting that if I break the existing read() support, other users
>>> will get upset.
>>
>> I don't believe that modifying the driver is the answer, we need to either
>> fix this at the libv4l or xine level.
>>
>> I wonder though, doesn't the cx18 offer any format that xine can handle
>> directly?
>>
> Not sensibly; it offers HM12 only, and Xine needs an RGB format, YV12,
> or YUYV. With a lot of rework, I could have the cx18 encode video to
> MPEG-2, then have Xine decode the resulting MPEG-2 stream, but this
> seems like overkill for uncompressed video. I could also teach Xine to
> handle HM12 natively, but that would duplicate effort already done in
> libv4l2 and libv4lconvert, which seems a bit silly to me.
[-- Attachment #2: diff --]
[-- Type: text/plain, Size: 1486 bytes --]
diff -r 88a9c2ed612e v4l2-apps/libv4l/libv4l2/libv4l2.c
--- a/v4l2-apps/libv4l/libv4l2/libv4l2.c Wed Sep 02 11:25:10 2009 +0200
+++ b/v4l2-apps/libv4l/libv4l2/libv4l2.c Thu Sep 03 11:43:15 2009 +0200
@@ -526,10 +526,9 @@
return -1;
}
- /* we only add functionality for video capture devices, and we do not
- handle devices which don't do mmap */
+ /* we only add functionality for video capture devices */
if (!(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE) ||
- !(cap.capabilities & V4L2_CAP_STREAMING))
+ !(cap.capabilities & (V4L2_CAP_STREAMING|V4L2_CAP_READWRITE))
return fd;
/* Get current cam format */
@@ -564,6 +563,8 @@
devices[index].flags = v4l2_flags;
if (cap.capabilities & V4L2_CAP_READWRITE)
devices[index].flags |= V4L2_SUPPORTS_READ;
+ if (!(cap.capabilities & V4L2_CAP_STREAMING))
+ devices[index].flags |= V4L2_USE_READ_FOR_READ;
if (!strcmp((char *)cap.driver, "uvcvideo"))
devices[index].flags |= V4L2_IS_UVC;
devices[index].open_count = 1;
@@ -571,7 +572,7 @@
devices[index].dest_fmt = fmt;
/* When a user does a try_fmt with the current dest_fmt and the dest_fmt
- is a supported one we will align the resulution (see try_fmt for why).
+ is a supported one we will align the resolution (see try_fmt for why).
Do the same here now, so that a try_fmt on the result of a get_fmt done
immediately after open leaves the fmt unchanged. */
if (v4lconvert_supported_dst_format(
next prev parent reply other threads:[~2009-09-03 9:41 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-02 16:32 libv4l2 and the Hauppauge HVR1600 (cx18 driver) not working well together Simon Farnsworth
2009-09-02 17:44 ` Hans de Goede
2009-09-03 9:17 ` Simon Farnsworth
2009-09-03 9:28 ` Hans de Goede
2009-09-03 9:44 ` Hans de Goede [this message]
2009-09-03 10:21 ` Simon Farnsworth
2009-09-03 10:37 ` Simon Farnsworth
2009-09-03 10:56 ` Simon Farnsworth
2009-09-03 11:16 ` Andy Walls
2009-09-03 11:20 ` Hans de Goede
2009-09-03 11:23 ` Andy Walls
2009-09-04 3:14 ` Andy Walls
2009-09-04 6:22 ` Hans de Goede
2009-09-03 11:13 ` Hans de Goede
2009-09-03 11:45 ` Hans de Goede
2009-09-03 11:06 ` Andy Walls
2009-09-03 11:23 ` Simon Farnsworth
2009-09-03 11:29 ` Andy Walls
2009-09-03 11:44 ` Simon Farnsworth
2009-09-03 23:34 ` Andy Walls
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=4A9F9006.6020203@hhs.nl \
--to=j.w.r.degoede@hhs.nl \
--cc=linux-media@vger.kernel.org \
--cc=simon.farnsworth@onelan.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox