MythTV on Playstation3
MythTV is running under YellowDogLinux with packages from atrpm. The problem: As others reported before: playback is choppy because XVideo is not available and MythTV falls back to XSHM for playback.
I have installed Gentoo on my PS3 to start experimenting with DirectFB. DirectFB 1.0.0 compiled cleanly. I rebuilt SDL with directfb-support, and compiled mplayer with directfb support.
Unfortunately, mplayer does not work with directfb or sdl, it always crashes at some point. I still need to figure out why. Though the test-program DFBPoint does work nicely. When run with --dfb:mode=1280x720 it entered fullscreen nicely, but some of the slide-animations where a little bit sloppy. I wonder if Mythtv would run smooth via directfb if there is no hardware acceleration.
I have now successfully emerged qt-embedded. After that I checked out the mythtv-vid branch and compiled it successfully. It even starts fine in fullscreen mode (1280x720), the menu is shown, keyboard works. Unfortunatly the mythtv-vid branch contains some changes from upstream and this made the mythfrontend incompatible with my backend running on my server (My Server has protocol 31, the mythtv-vid-branch currently 33) so i could not check how video-playback would run. However I made some tests with mplayer: When I just call it without parameters (no -vo=directfb) it works through sdl and that uses fbcon. It even scales to full 720p. However playback of HD-material is very choppy and not fluid at all. SD-material runs nearly smooth. Then I started the X server and used mplayer with the X11 driver. SD-material and material slightly over SD runs very smooth and great. Sadly the X11 driver cannot scale to fullscreen, which is very odd. HD-material (720p) runs better than under the console, but not even near the full framerate. Interestingly i heard of people running mplayer with Full-HD videos (1080p) under X and they said it was smooth as silk.
Playstation3 hardware issues
There are 2 major issues that need to be addressed when running Linux/mythtv on the PS3:
There is only around 200Mb of memory available for Linux to work with. As a result, Mythtv can be slow to start up and switch between menu pages as theme detail is swapped from the harddisk to main memory. Running Mythtv at 1080 can be painfully slow.
The main way of reducing memory consumption is to run Mythtv without the overhead of X11, window managers etc. This can be achieved by installing qt-embedded and building Mythtv to use it instead of the default qt.
- Displaying video
Sony have restricted any direct access to the video hardware. All rendering is via a memory backed framebuffer and all colour conversion, scaling etc for video playback must be done in software. Mythtv will happily play standard definition video but will skip a lot of frames due to this conversion overhead.
To improve performance we need to use the six additional processors (SPUs) that are available on the PS3. By offloading the heavy work of colour conversion and scaling, we can leave the main processor (PPU) to concentrate on video decoding, sound, osd, event handling etc.
Other less critical issues:
- No serial ports
Serial lirc interfaces will not work on the PS3. Either use a keyboard (wireless or wired) or a usb lirc receiver.
Alternatively, the sixaxis wireless controller should work with a more recent or patched kernel and a custom joystick config file. See http://www.pabr.org/sixlinux/sixlinux.en.html (wireless) and http://ps3.jim.sh/sixaxis/usb (wired).
- qt embedded
qt embedded compiled and installed. Need to compile with Mythtv.
Mythtv video playback does not currently work with DirectFB on the PS3. As far as I can tell, DirectFB really needs a new driver to deal with the specifics of the PS3 framebuffer. (Note: playback fails because there is no video layer available from directfb). Given the unique combination of the ps3 framebuffer and the 6 SPUs available, I'm focusing on a mythtv video method for the ps3 (see below)
- Sixaxis controller
Need to compile a patched kernel to test sixaxis input.
- Video display
I've written a new video output method for mythtv on the PS3. This takes control of the framebuffer directly and coordinates vertical synchronisation, buffer flipping etc. It also offloads all colour conversion and video scaling to one or more SPU's.
- Colour conversion on SPUs.
- vertical sync
- xrandr support (PS3 has a very clear set of supported display modes)
- osd blending
- full size osd
- Exit option - Boot GameOS
Done - added an extra (configurable) option to the exit menu that boots into the Sony game OS.
Information found on the web
For now I found the following interesting bits of information regarding MythTV on the ps3:
- First of all the wiki has dedicated page for using MythTV on the Framebuffer
Unfortunatly this is a little bit outdated (mentions MythTV 0.19) so we have to look in what way this is still up to date
- Here is a Gentoo HOWTO for installing MyhtTV with framebuffer: http://gentoo-wiki.com/HOWTO_Setup_MythTV_in_Framebuffer
This is also outdated but is a good base to start
- Here is a thread from small_frenchy who tries to get running MythTV on the framebuffer under Gentoo: http://forums.gentoo.org/viewtopic-p-3919197.html
Although this is not directly playstation 3 related it provides some current facts about MythTV on the framebuffer.
- Here is a thread from the dev-mailiniglist concerning Qt/Embedded 3.3.8 with directFB 1.0.0rc4 and MythTV: http://www.gossamer-threads.com/lists/mythtv/dev/256098?page=last
It has some useful information on getting the stuff compiled
General bits of information
- Here is a thread of someone reporting about having YellowDog Linux on the PS3: http://www.gossamer-threads.com/lists/mythtv/users/258573
Not very informative, but who knows what will be replied to that thread in the future...
- Here is a task in the Myth-Trac which relates to a new branch (mythtv-vid) in MythTV which aims to work on the video-output of mythtv: http://svn.mythtv.org/trac/ticket/2287
The MythTV in Framebuffer HOWTO mentions that this branch should be used when using MythTV in a framebuffer
Since I don't want to go SVN in my mythtv-network (one server, 2-3 frontends) i am stuck a little bit because I cannot try the frontend i compilde. Does anyone have an Idea on how to build a second mythbackend server with a newer version on the same machine as the real server and run them simultanously? Or could i run one in a virtual machine? But from where would i get some recordings to test video-playback then? Any Ideas?
Until I have a solution to the above problem, consider this project on halt.
Anyway I will probably test a little bit more with mplayer and see how i may optimize playback. Perhaps there are some workarounds to at least play back recordings in an easy and comfortable way. (UPnP and djmount come to mind)
I will report back when there is progress...