FatdogArm Beta2 sfs re-uploaded

The main change is that xorg-server is now built with these two patches: http://forum.odroid.com/viewtopic.php?p=37553&f=7#p37553 and http://forum.odroid.com/viewtopic.php?p=35833&f=7#p35833 for better performance and stability. Thanks Daniel (aka dsd). This change only improves Odroid, and has no impact in other platforms as only Odroid uses DRI2 interface at the moment (Allwinner: fbdev, OLPC/Marvell: DRI1, Cubox-i/Freescale: DRI1).

Coupled with a few updates in the repo and youtube-dl, it is now possible to write a simple script that will stream video and play it fullscreen on Odroid/Cubox-i directly from youtube. Perhaps I'll share that script later.

Posted on 8 Oct 2014, 5:33 - Categories: FatdogArm Linux Arm
No comments - Edit - Delete


3D hardware acceleration for cubox-i

I have finally managed to get 3D acceleration working on cubox-i. This has been long-time coming.

Initial testing of the 3D acceleration always caused a hard lock-up on Xorg. System was still alive, and was still responsive (if you use SSH), but Xorg completey died, you can't even switch VT anymore.

Today I have finally found the solution - Freescale provided a patch for libdrm, *and* Xorg must be re-compiled against this patched libdrm. This was found as early as March by forum member "notwa", but I didn't take this seriously because:
a) it was intended for kernel 3.0.35 while I used 3.10.30 kernel
b) I actually patched libdrm but didn't rebuild xorg-server as I thought it was unnecessary (I reviewed xorg-server source to find where exactly the patched change could have impact, and couldn't see it).

Today I found that another forum member "catwich" had the same problem I had, and confirmed that "notwa" solution worked - if followed in full. I decided to have a go myself on FatdogArm, and look and behold - it worked! es2gears, glmark2 and glmark2-es2 all worked. What a joy!

The updated drivers will be in the repository as usual. As a closing note, I also built gst-plugins-gl (containing "glimagesink" - see my earlier post about hardware accelerated video playback pipeline), and it works well as an alternative to mfw_v4lsink.

With this, support for cubox-i platform is now considered complete (apart from bluetooth support, but that's minor stuff ... may be later). All these work with FatdogArm beta2. I updated the release note to reflect this fact but if you have already downloaded the SFS and the kernel package, there is no need to download again as there is no change there: all the drivers are in the repository and those are the ones that got updated.

Posted on 6 Oct 2014, 1:23 - Categories: FatdogArm Linux Arm
No comments - Edit - Delete


Hardware-accelerated video playback on Odroid U2/U3 - part 2

Near the end of my previous post, I said that while the video playback was decent, it was not as smooth as expected, and that "memeka" from the odroid forum suggested to use cluttersink instead of glimagesink.

I have now built and tested cluttersink, and indeed cluttersink shows smoother playback than glimagesink. There is one small difference: cluttersink doesn't respect aspect ratio, it will just scale up everything to its window size; while glimagesink does honour aspect ratio (but you can disable it if you don't need it).

Here is an example pipeline that plays an mp4 file, both audio and video, with full video acceleration using cluttersink:
gst-launch-1.0 filesrc location=/path/to/media.mp4 ! qtdemux name=m m. ! queue ! h264parse ! video/x-h264, stream-format=byte-stream, alignment=au ! v4l2video8dec ! v4l2video10convert ! cluttersink m. ! queue ! faad ! audioconvert  ! alsasink

The same pipeline, simplified using decodebin:
gst-launch-1.0 filesrc location=/path/to/media.mp4 ! decodebin name=m m. ! queue ! v4l2video10convert ! cluttersink m. ! queue ! audioconvert ! autoaudiosink

cluttersink is available in "gst2-clutter" package in the repository.

I also re-uploaded Odroid U2/U3 kernel package for FatdogArm Beta2, now with MFC firmware (which is needed for hardware acceleration). Thanks to forum member "mories" who informed me that I forgot to do that. Beta2 sfs is also re-uploaded, now with updated glib (2.38.2 now, it was 2.36.3 previously) which is needed for cluttersink and its libraries, among other small fixes.

Posted on 4 Oct 2014, 16:48 - Categories: FatdogArm Linux Arm
No comments - Edit - Delete


Hardware-accelerated video playback on Odroid U2/U3

Thanks to the effort of many people, I have uploaded gstreamer 1.x libraries (1.4.3) (gstreamer2 and gst2-plugins-* in the repository) which provide support for video playback acceleration on Odroid U2/U3 on FatdogArm.

The accelerated pipeline in Odroid U2/U3 goes like this:
- hardware decoding (Samsung S5P MFC codec) - use v4l2video8dec
- hardware colourspace conversion (Samsung FIMC) - use v4l2video10convert
- GPU-assisted rendering - use glimagesink

There were a few hassles to finally get to this.

The hardware decoding was quite a breeze. The kernel has supported the MFC codec for a while. The userspace support was done by a gstreamer plugin called mfcdec, but this was finally deprecated and replaced with v4l2-based decoder in the most recent gstreamer version.

Hardware colourspace conversion didn't work due to a bug in libv4l2, as found out by forum member "memeka" in this post. The library basically assumes that all v4l2 devices can use DMABUF interface to v4l2 devices, but Samsung FIMC kernel drivers don't support that, only normal mmap-ed access. Disabling libv4l2 forces gstreamer to use its own internal code which works with either. So, following his advice, FatdogArm gstreamer libraries are built without libv4l2 dependency. However, the default colourspace converter for gst-play and playbin is unchanged and is still the software decoder (videoconvert) - because forcing the default to Samsung converter results in colour artifacts. If you need to use hardware colourspace converter, you will need to build the pipeline yourself (and if you do this yourself, there is no artifact - the artifact is only seen when using gst-playback/playbin with hardware converter, which is odd).

GPU-assisted rendering is done by glimagesink. This component replaces eglglessink in earlier gstreamer version. Due to a long-standing bug in Mali driver (documented here, found in r3p2 and still exist in r4p0), it doesn't always work (well - it *mostly* doesn't work on my tests). To make it work, I patched the binary driver (it's also in the repo as libmail-odroid).

The result of the acceleration is decent, but it is not as smooth as I hope. "memeka" in another forum post said that the best sink is cluttersink (better than glimagesink). We'll see about that later.

To test that it is all working, try this pipeline (it is one long line):
gst-launch-1.0 filesrc location=/path/to/media.mp4 typefind=true ! qtdemux name=m m.video_0 ! h264parse ! video/x-h264, stream-format=byte-stream, alignment=au ! v4l2video8dec ! v4l2video10convert ! glimagesink

This pipeline will only play the video and there is no buffering, but you get the idea.

Posted on 3 Oct 2014, 6:41 - Categories: FatdogArm Linux Arm
No comments - Edit - Delete


FatdogArm Beta2 release

FatdogArm Beta2 is a minor release, mainly:
- bugfixes and upstream update from Fatdog64 700
- updated kernel package for Odroid U2/U3 with r4p0 Mali driver
- introducing support for cubox-i (Freescale i.MX6DL/i.MX6Q SoC)

Release note here.
Get it from here or any of ibiblio mirrors.

Posted on 1 Oct 2014, 19:04 - Categories: FatdogArm Linux Arm
No comments - Edit - Delete


New article - Linux multi-seat

It has been a while since I wrote an article, so here is a new one: Demystifying Linux multi-seat.

Posted on 1 Oct 2014, 15:29 - Categories: Linux General
No comments - Edit - Delete


1080p video playback on cubox-i

I have been experimenting with hardware acceleration for video playback on i.MX6 (cubox-i), that came with Freescale BSP. The most recent released for Freescale BSP is version 3.10.17, for their kernel GA 3.10.17.

Hardware acceleration of anything is a fickle thing, because there are non-standard ways of doing things (one may disagree and says that there are too many standards to choose from: vdpau, vaapi, openmax, gstreamer, and others). In the end, different hardware vendors supports their hardware with different libraries.

Freescale chooses to use gstreamer to support video playback acceleration. It comes are a set of open-source gstreamer plugins, which links to closed-source VPU* and IPU* libraries, for gstreamer 0.10. Yeah that's the old version but it still works. Freescale has a newer (semi-official?) "community"(?) gstreamer 1.0 libraries but the support is not identical with 0.10 libraries.

[*Note: VPU is Freescale's hardware video processing unit, and IPU is Freescale's hardware Image Processing Unit]

The 0.10 libraries are purely VPU/IPU based and does not depend on a working GPU. It has a few plugins: a demux plugin ("aiurdemux") that recognises certain common formats like AVI, MKV, WEBM, MP4 and others, a VPU-assisted video decoder ("vpudec") and a video renderer (sink) that is IPU-assisted (mfw_v4lsink), among others.

If this sounds like alien language, let me translate it for you: "demux" is the one that splits a media file into its video and audio component (so they can be routed and processed by different components). "video decoder" is the one that decompress the video file and outputs raw video data, and "video renderer" is the component that takes that raw video data and display it on screen (possibly converting the formats in between).

Together they form a hardware accelerated video playback pipeline that can play 1080p video effortlessly with less than 10% CPU usage. As a comparison, even the quad-core i.MX6Q cannot play 1080p video smoothly using only its ARM cores alone.

There are just a few hiccups. The plugins apparently can't rotate the playback when you launch it using gst-launch (e.g see here - although if you use the gplay tool it would work), and if you try to use the plugin to play video on a rotated display (rotated using xrandr etc), then video playback gets totally wrong. This is mainly because certain parts of plugin follows X coordinate orientation, while other parts of it are stuck with real CRTC coordinates (that is, they aren't rotated).

I've done some fixes on that and the gstreamer plugins can now play video in any orientation (even from gst-launch) as well as in any display orientation. As a bonus, I have the code that makes video playback rotated following the display rotation automatically. Of course, because the final rendering is done by IPU, this is only possible if the size of the video output is not more than 1024x1024 pixels - this is an IPU limitation which isn't easily bypassed.

Combined with this: gstreamer npapi plugin, one can make an alternative video player plugin that provides accelerated video playback (compared to xine-plugin or vlc-plugin, for example); and when built with the "fixed" version, the video will play correctly on any display orientation. I know that, I've built one myself. It runs nicely on FatdogArm :)

Posted on 27 Sep 2014, 4:51 - Categories: FatdogArm Linux Arm
No comments - Edit - Delete


Fatdog64 700 beta1 is released.

This release is mostly for bug fixes and some package updates.

Forum announcement: http://murga-linux.com/puppy/viewtopic.php?p=799326.
Release notes: http://distro.ibiblio.org/fatdog/web/700b1.html.

Get it as usual from ibiblio or one of its mirrors: aarnet, uoc.gr, and nluug.nl.


Posted on 15 Sep 2014, 21:12 - Categories: Fatdog64 Linux
No comments - Edit - Delete


Xscreenshot updated

Add "delayed" snapshot function to Xscreenshot accessed by Shift-hotkey). This is useful when you want to capture open menus etc. The usual way of pressing hotkey to capture won't do because as soon as press a key, the menu is closed.

"Delayed" snapshot avoid this by you pressing the hotkey first (to trigger the capture), and it giving you the chance to open the menu, and after a while it will do the capture behind the program's back.

Get it from here.

Posted on 12 Sep 2014, 20:31 - Categories: Linux General
No comments - Edit - Delete


New URL for this blog

This blog and its corresponding wiki is now accessible from http://www.lightofdawn.org/. So it's time to update your bookmark or your RSS reader . The original URL will remain for a while, but will eventually be removed.



Posted on 25 Aug 2014, 0:01 - Categories: General
No comments - Edit - Delete


Pages: [1] [2] [3] [4] [5] ...