[beagleboard] Accelerated video for browser kiosk

Your browser would need to be configurable to run video through a player
that supports the DSP. Not sure about the angstrom and Ubuntu builds
but I think a gstreamer-based solution may work with those, if you can
get your browser to call it. I'm not sure which other players have DSP
support, but I'd guess if any do it would be mplayer. Maybe that
requires ffmpeg DSP support. Dunno for sure.

Gstreamer/mplayer/other video player needs DSP support to perform
hardware accelerated video decoding. You can use the processor for this
(without DSP) to playback standard definition quality video. HD may
need DSP support to get what you're after. Try playing a video you
created for your system without DSP and see if it plays at the rate you
require. If not, you may need to get DSP working.

SGX is OpenGL, which you need if you want to play 3D games or
hardware-accelerated Flash video. Note that Adobe has a Flash player
for ARM but I don't know (yet) how easy it is to get. You'd also need
OpenGL for media platforms like XBMC. Technically you don't need SGX to
playback video, depending on the kind of video.

Running OpenGL under X.org requires using the SGX provided 1.9.4
X-Server and supporting components. That's so you can access the binary
blobs that provide the 3D acceleration for the PowerVR hardware
graphics. There is a small tradeoff here for performance. The PowerVR
binaries are softfp, not hardfp. So you're toolchain will need to be
softfp too. Hardfp would be better, but without source you can't
recompile the binary blobs. Robert Nelson has some special releases of
SGX that has hardfp to address that problem when using his Ubuntu
release.

Bridgedriver is for DSP. tidspbridge is, I believe, a variation on
that. I'm using bridgedriver with gst-dsp to try and get video decoding
supported in my project (it's not 100% working yet).

Hope that helps a little.

Yes, that is helpful, thanks for your response. Looks like, for my application, I’m not so concerned about SGX if I’m mostly after clean video playback.

I thought I’d report back on our progress thus far in the hopes it might be useful to somebody.
We went with Angstrom since we were at least getting mplayer to work there. Using pywebkit we made a very simple fullscreen chromeless browser (uses webkitgtk), and once the right gstreamer plugins were installed it knew what a video tag was. After more tweaking, however, we couldn’t get the video to play well in the browser, so we must be missing something with gst or the board drivers. I’m not sure why mplayer works (not wonderfully), and gst doesn’t, so I’ve got more research to do there.

For now, we ended up hacking something together in which our python browser launches mplayer to play a video when a link gets clicked. It’s ugly, it doesn’t work like a webage would, but it’s progress.

After seeing projects like XBMC and NthCode (http://www.youtube.com/watch?v=-YLROdDPpZY) on BeagleBoard, I got all excited about the possibilities but had no concept of what it was going to take to make something work. How do they do it?!

One more question - what is the difference between Angstrom and Ubuntu in terms of DSP support? I see that the drivers can be built for Ubuntu, but are there differences in the way each supports the stack that make one better suited than the other? In theory, gstreamer, webkit, and the DSP drivers should work equally well on either, right?

-Benjamin

After seeing projects like XBMC and NthCode
(http://www.youtube.com/watch?v=-YLROdDPpZY) on BeagleBoard, I got all
excited about the possibilities but had no concept of what it was
going to take to make something work. How do they do it?!

System integration work isn't always as easy as it seems. :slight_smile: You have
to understand what you have, what you need and how to put the two
together. Sounds easy. In practice, it can be rather challenging,
especially if the things you need are not stable, are available from
multiple (different) projects or, in some cases, simply don't exist yet.

I'm curious how XBMC manages playback of Amazon Prime video when Firefox
can't (out of date Flash player) and Chrome can't (player version okay
but nothing plays). That's just on an x86-64 box, but it's something
I'll be looking into once I get to the point of cross compiling XBMC for
my own platform.

One more question - what is the difference between Angstrom and Ubuntu
in terms of DSP support?

Unsure. Robert Nelson can probably explain that better than I. He does
quite a bit of work making Ubuntu work well on BeagleBoards (pre-Xm, Xm
and Bone). But I mostly just work on my build system using his Ubuntu
work as a guideline.

I see that the drivers can be built for Ubuntu, but are there
differences in the way each supports the stack that make one better
suited than the other? In theory, gstreamer, webkit, and the DSP
drivers should work equally well on either, right?

Ubuntu and Angstrom are distributions. They rely on the same underlying
collections of software though they build them differently. While both
might have webkit support, one might have a newer version of webkit than
the other (and all the variations in supporting libraries that might
imply). That's essentially the difference between most Linux
distributions, if you ignore desktop configuration issues.

For DSP support, there is a single low level package that everyone uses
(binaries, re: the .dof files) and then kernel support and user space
support related to that. I only know of one kernel driver solution
(which is in the staging section of the kernel config) but there seem to
be multiple projects for user space support. As I said, I've been
working with the gst-dsp user space support. There are alternatives.
The elinux.org web site has info on them, but I don't happen to have the
direct link handy. Try a search for DSP and see what you get.

I think the main difference with respect to DSP is probably the user
space support though there may be some kernel level stuff that differs
too. Also, its always possible that each distro has a different release
of the DSP binaries (.dof files). I'm not saying they do, just that
this would be one possible difference between them.