[pvrusb2] driver status / update
Mike Isely
isely at isely.net
Sun Jan 11 22:00:42 CST 2009
Well I've spent a chunk of time on the driver today, and I'm not nearly
as far along as I'd wanted. But I'd thought I'd offer a summary here
since I know several people are waiting around to hear about it.
It's been quite a while since I had released a snapshot, and as such,
there's been some divergence between the standalone driver and the
v4l-dvb (and kernel) versions. I had to pull that back together, and I
hit a few issues along the way. Nothing really earth-shattering, but it
took time to sort out. Note: the current latest standalone snapshot
probably won't compile in 2.6.28 - until this afternoon I hadn't even
tried 2.6.28 yet. I already have fixes for this, but read on...
I looked at the bus_info question, and I've been convinced. I've made a
change now that puts the driver serial number into the bus_info V4L
capability field. Actually, what I did was to push the logic that
generated the sysfs-interface string for this into the driver core, then
exported that back out to the interfaces. So now the sysfs interface
(as the "abcdef" in "/sys/class/pvrusb2/abcdef") and the V4L interface
(via the bus_info capability field) exactly match each other.
I haven't dug out the cx25840 problem yet. I think this is a line of
investigation that once chased, is going to reveal other issues. I am
working on this however.
The raw video support looks very interesting. To do this right, I have
to advertise a different "format" in V4L. Not a surprise; I knew this
all along and I've had hooks in the driver since the beginning to make
this feasible. I should also now do the work to support the other I/O
methods in V4L (mmap and async). Those methods weren't really useful
for mpeg, but for raw uncompressed output they make more sense. Again,
the foundation is already there to support the other methods; I just
need to finish it. Also, I *might* have to support isochronous USB
transfers for this. Well I'm not sure, but for data like this
uncompressed video where the timing is not actually in the stream itself
(I assume) you need a transfer method that is less sensitive to jitter /
latency. USB bulk transfers don't really satify either constraint.
Also, I have reason to suspect that the video format being sent by the
device probably does not match what V4L expects. So the driver is going
to have to swizzle the pixel data. No more direct pass-through to the
app...
Another even more interesting issue is the audio side of this. In raw
mode, there's no means to encapsulate the audio inside the same stream
as the video - after all V4L was originally a video spec not an audio
one. We've been able to ignore this with mpeg since the mpeg format
allows for embedded audio and the hardware encoder does all the heavy
lifting here. But not with raw mode. In this case another means must
be found, and I am thinking that what needs to happen is that the
pvrusb2 driver will have to export an ALSA interface now. So now the
driver will actually have to parse the stream and send the video to the
video app, and (hopefully) PCM audio to the ALSA interface. This change
will in fact make the device walk and talk pretty much exactly like an
old-school V4L device with "external" audio - tvtime should then work.
Let's hope. (Might have an issue here maintaining audio/video sync, due
to split buffers in the two paths, but I'm not going to sweat that yet.)
One other interesting thing about raw support: radio mode. Right now
when in radio mode, you get the audio stream as MP3 data inside a normal
mpeg container, complete with its own useless blank video channel as
well. And by "blank" I mean blank as in wasting-bandwidth-blank. If
the pvrusb2 driver can act like an ALSA device and if we can get the
audio in raw mode as PCM data, then, well now we can run the radio such
that it looks like a normal V4L radio device...
Now, with all that said, it should be obvious that full raw mode support
isn't going to happen immediately. This is still going to take a little
while. But I'm not stuck on this, and I'll let you all know how it's
going. I do plan an incremental approach, i.e. the audio fun will
probably show up after the video is working.
For the immediate future however I need to figure out what is going on
with the cx25840 module. Only after dealing with that will I seriously
look at raw mode.
I can release another snapshot now with the bus_info change. But it's
not that big of a change, and with the cx25840 breakage, the value of
that snapshot will be somewhat less than it should be. (Running such a
standalone driver against any kernel at least up to 2.6.27 should still
be OK, but after that the cx25840 issue is probably going to nail
everyone except those whose [older] devices use the saa7115 instead -
then again maybe it's broken too - I need to test further.)
-Mike
--
Mike Isely
isely @ pobox (dot) com
PGP: 03 54 43 4D 75 E5 CC 92 71 16 01 E2 B5 F5 C1 E8
More information about the pvrusb2
mailing list