Ubuntu TV UI at Pandaboard, and next steps

Yesterday Canonical announced the first UI concept for the Ubuntu TV. Together with the announcement, the first code drop was released, so we could read and understand better the technologies used, and how this will behave on an ARM environment, mostly at a Pandaboard (that we already have OpenGL ES 2 and video decode working).

Getting Ubuntu TV to work

If are still using Oneiric, you can just follow the guide presented at https://wiki.ubuntu.com/UbuntuTV/Contributing, where you’ll find all needed steps to try Ubuntu TV at your machine.

As it’s quite close with Unity 2D (similar code base), and also based on Qt, I decided to follow the steps described at wiki page and see if it should work correctly.

First issue we found with Qt, was that it wasn’t rendering at full screen when using with latest PowerVR SGX drivers, so any application you wanted to use with Qt Opengl would just show itself on a small part of the screen. Luckily TI (Nicolas Dechesne and Xavier Boudet) quickly provided me a new release of the driver, fixing this issue (version that should be around later today at the Linaro Overlay), so I could continue my journey 🙂

Next problem was that Qt was enabling brokenTexSubImage and brokenFBOReadBack for the SGX drivers based on the old versions available for Beagle, and seems this is not needed anymore with the current version available at Pandaboard (still to be reviewed with TI, so a proper solution can be forwarded to Qt).

Code removed, patch applied and package built (after many hours), and I was finally able to successfully open the Ubuntu TV interface at my Panda 🙂

UI Navigation on a Pandaboard, with Qt and OpenGL ES2.0

Running Ubuntu TV is quite simple if you’re already running the Unity 2D interface. All you need to do is to make sure you kill all unity-2d components and that you’re running metacity without composite enabled. Other than that you just run ”unity-2d-shell -opengl” and voilà 😉

Here’s a video of the current interface running on my Panda:

As you can see from the video, I didn’t actually play any video, and that’s because currently we’re lacking a generic texture handler for OpenGL ES with Gstreamer at Qtmobility (there’s only one available, but specifically for Meego). Once that’s fixed, the video playback should behave similarly as with XBMC (but with less hacks, as it’s a native GST backend).

Next steps, enabling proper video decode

Looking at what would be needed to finally be able to play the videos, and to make it something useful at your Pandaboard, the first thing is that we need to improve Qtmobility to have a more generic (but unfortunately still specific to Omap) way handle texture streaming with Gstreamer and OpenGL ES. Rob Clark added a similar functionality at XBMC, creating support for ”eglImage”, so we just need to port the work and make sure it works properly with Qtmobility.

Once that’s ported, the video should be streamed as a texture at the video surface, making it also work transparently with QML (the way it’s done with Ubuntu TV).

If you know Qt and Gstreamer, and also want to help getting it to work properly on your panda, here follows a few resources:

As soon video decoding is working properly, a new blog post should be around explaining the details and how to reproduce it at your own Panda with Ubuntu LEB 🙂

Cheers!

Advertisements

STE U8500

One of the latest board we’ve been playing with is the new STE U8500.

The U8500 is a smartphone platform created by ST-Ericsson, offering a dual ARMv7-A Cortex A9 core, with strong hardware decoding power and ARM Mali 400 GPU.

More about it’s features:
* Full HD 1080p camcorder, multiple codecs supported via OMX (H264 HP, VC-1, MPEG-4)
* High-resolution, touchscreen display support up to XGA
* Simultaneous dual display support
* High performance 3D graphics, support for OpenVG 1.1 and OpenGL ES 2.0
* Dual camera support with Integrated ISP 18 Mpixel and 5 Mpixel
* Wi-Fi, Bluetooth and GPS enabled platform
* Built-in USB 2.0, HDMI out

And technology:
* Highly efficient, low-power ARM dual Cortex™- A9 processor
* Dual multimedia DSP for low-power, flexible media processing
* High-bandwidth LP-DDR2 interface
* ARM Mali™ 400 GPU and NEON®CPU extensions

U8500 with Ubuntu Lucid

U8500 with Ubuntu Lucid

Now, about the things that interest me the most, the current status in Linux in general:

Kernel:
The kernel we’ve been working on is a vendor’s based one, using 2.6.29 as base. With this kernel we have many features implemented, like blitter support, framebuffer, hdmi output and many more.

At upstream side, the code is just starting to be merged, and you can see already some basic commits going on linux-2.6, like commits 1, 2, 3, 4 and 5. STE seems to be doing a great job on getting the changes upstream, since it’s the only feasible way to make it supported in mid, long term in linux. So expect more changes at 2.6.34 and 2.6.35.

U-Boot:
Similar with the kernel, we’re also using a custom vendor’s version. They’re just starting to make the support upstream, and you can find the patch series here.

Once we get the basic U-Boot and Linux support upstream, we can start working directly with mainline, fixing and improving it when needed.

U8500 - Connectors

Connectors - HDMI, uSD, Headset and micro USB.

Our work:
Since we got the board we’ve been playing on supporting many different Linux platforms, and optimizing the basic Linux OS core to be commonly used by different distros.

We started with Maemo 5, as a proof of concept, and we got it up and running with a very good performance and hopefully soon we’ll be able to share more details.

OE Angstrom/Mamona is very easy to support, since we just need to create the machine configuration and use the same compilers already used by other ARMv7 architectures.

Personally I started testing Ubuntu Lucid release, and just got the very basic support, with a custom and simple image. Ubuntu is now a very good option since it’s targeting ARMv7 platforms, with compiler optimizations and Thumb2 support. NEON support is not included by default, but you can support it by compiling specific components by hand. For more information please check at ubuntu wikipage.

Meego also boots and runs fine at this platform, but since it’s just a basic OS ATM (armv5 only), doesn’t have anything interesting to play with.

Besides platform support, we’ve been working on creating the hardware accelerated X server video driver, to use EXA, DRI2 and Xvideo with overlay. Once we get it all running we can easily use it in any Linux distro we want, and X we’ll be accelerated by default.

U8500 Connectors

Connectors - RJ45, Uart and MIPI34, for debug.

Now the important question, where’s the code?
STE still didn’t deliver the main software in public, so we can’t just release the Kernel, U-Boot and other development that requires support from these software components. But this is changing, and I believe that very soon we’ll be able to get most of the things in public, so others can download and test if needed.

In the next posts I’ll be showing more about the status of these distros on this hardware, also showing the performance and demonstrating it.

Board I’ve being playing on:

root ~# cat /proc/cpuinfo
Processor : ARMv7 Processor rev 1 (v7l)
processor : 0
BogoMIPS : 1199.30

processor : 1
BogoMIPS : 1199.30

Features : swp half thumb fastmult vfp edsp neon vfpv3
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x1
CPU part : 0xc09
CPU revision : 1

Hardware : ST Ericsson U8500 Platform
Revision : 0000
Serial : 0000000000000000

Links and videos about U8500:
* ST-Ericsson U8500
* ST-Ericsson U8500: PlayStation controller, PlayStation grap
* U8500 3D Video