Vmeta: Difference between revisions

From OLPC
Jump to navigation Jump to search
No edit summary
Line 65: Line 65:
=== vmetaxv ===
=== vmetaxv ===


This source package is a fork of gst-plugins-base. It seems to originate from Marvell, under the name "gst-plugins-bmmxv", and is shipped in the Cubox package bundle. The source tarball gst-plugins-bmmxv0.10_0.10.25-0ubuntu1~ppa9.tar.gz included there includes git history. [http://dev.laptop.org/~dsd/20130408/gst-plugins-bmmxv.patch Here is a diff] of the changes between gst-plugins-base-0.10.26.3 and the bmmxv tarball.
This source package is a fork of one gstreamer-plugins-base. It doesn't seem to come from Marvell, suggesting that it originates from OLPC.

OLPC has renamed/repackaged this as vmetaxvimagesink based on top of gst-plugins-base-0.10.36.


It looks like the motivation here is that xvimagesink always does a copy of the data it is going to display. vmetaxvimagesink is a modified xvimagesink that, in the case where it detects that the buffer comes from vmeta, it avoids the memcpy. The physical address is sent to the Xv driver and it is handled directly.
It looks like the motivation here is that xvimagesink always does a copy of the data it is going to display. vmetaxvimagesink is a modified xvimagesink that, in the case where it detects that the buffer comes from vmeta, it avoids the memcpy. The physical address is sent to the Xv driver and it is handled directly.

Revision as of 17:17, 9 April 2013

vMeta is a hardware-accelerated multimedia encoding and decoding engine included in the XO-1.75 and XO-4.

Installation and test

Tested on 12.1.0 on XO-1.75.

  1. Install gstreamer-plugins-marvell and libvmeta-marvell
  2. Download http://techslides.com/demos/sample-videos/small.mp4 and play it in Totem in GNOME

For a beefier test video, try http://archive.org/download/hellmans_mayonnaise_commercial/hellmans_mayonnaise_commercial.mpeg

Note that these packages do include software decoders too (not sure why) so just seeing the video play back doesn't mean that it is being done by the vmeta hardware engine. The best way to be confident that hardware accel is being used is by looking at totem standard output, which should be limited to:

vmetadec istance(0x....) found
At finalizing, Gstvmetadec instance(0x....) DecErroOccured is 0x0
Gstvmetadec instance(0x....) is finalized.

Also look in dmesg, check that there are not any vmeta-related complaints there.

Troubleshooting

Hangs after displaying first frame

Check that regular audio playback is working (e.g. with speaker-test).

gstreamer-plugins-marvell

This RPM package is built from two source tarballs: gst-plugins-marvell and gst-plugins-vmetaxv.

gst-plugins-marvell

This codebase seems to originate from Marvell. It provides several gstreamer plugins that do encoding/decoding using libvmeta (and friends) - apparently making existing gstreamer apps use hardware acceleration (via vmeta) for encoding and decoding purposes.

gstreamer-plugins-marvell-0.10-1

No source was published by the developer. Details unknown.

gstreamer-plugins-marvell-0.10-2

The Cubox package bundle (see their wiki) includes gst-plugins-marvell0.10_0.2.0-0ubuntu1~ppa14.tar.gz. This source tarball has full git history from the developers at Marvell, with the latest change committed in March 2011.

Our RPM was based on this, with this code change applied by OLPC. There is no associated info/changelog for this patch; presumably it is the minimum needed to make it work on MMP2.

gstreamer-plugins-marvell-0.10-3

There were no changes to the gst-plugins-marvell source used to build this version.

gstreamer-plugins-marvell-0.10-4

This version switches to an alternative gst-plugins-marvell codebase found in the private Android code-drops from Marvell (specifically the toughpad-a1 drop). No git history is included. Looking at the files and changes through each code drop, it would appear that this codebase shares an origin with the codebase found in the cubox download, but later diverged, while still merging in some of the changes from the cubox-acquired git tree.

For example, the Android codebase includes a debian/changelog file, with the latest entry from 2009. The cubox codebase comes with the same changelog but with entries going all the way to 2011. However, some of the things described in the post-2009 cubox codebase changelog are implemented in the Android codebase. This suggests a fork of the codebase and some confused history.

Despite the confusion, it does seem clear that this Android codebase is more recent than the Cubox gst-plugins-marvell0.10_0.2.0-0ubuntu1~ppa14.tar.gz (with last commit date March 2011). The gingerbread-beta3 code drop was received in October 2011, and this same codebase was updated in the toughpad-a1 code drop received in November 2012. This new version has some small fixes and other changes.

On top of this, OLPC applies some changes (no changelog/info available):

  • g711dec and g711enc compilation enabled in configure.ac
  • Marvell code compiles mpeg2dec with the FORBID_WMMX_DEINTERLACE flag; we drop that flag.
  • Add missing include to fix compile of gstwmvdec
  • Enable compilation of libgstvmetaenc (looks like the Marvell codebase only compiles the decoders)
  • Update to the latest GMutex API to fix compile warnings/failures

vmetaxv

This source package is a fork of gst-plugins-base. It seems to originate from Marvell, under the name "gst-plugins-bmmxv", and is shipped in the Cubox package bundle. The source tarball gst-plugins-bmmxv0.10_0.10.25-0ubuntu1~ppa9.tar.gz included there includes git history. Here is a diff of the changes between gst-plugins-base-0.10.26.3 and the bmmxv tarball.

OLPC has renamed/repackaged this as vmetaxvimagesink based on top of gst-plugins-base-0.10.36.

It looks like the motivation here is that xvimagesink always does a copy of the data it is going to display. vmetaxvimagesink is a modified xvimagesink that, in the case where it detects that the buffer comes from vmeta, it avoids the memcpy. The physical address is sent to the Xv driver and it is handled directly.

gstreamer-plugins-marvell-0.10-2.olpc

This is the first version where vmetaxvimagesink appears. It is based on gst-plugins-base git commit 12ef907f8a3762685da0b96391edc30a78d31805.

gstreamer-plugins-marvell-0.10-3.olpc

This is a minor change upon the previous release, which appears to be more careful when distinguishing between vmeta and non-vmeta image buffers.

gstreamer-plugins-marvell-0.10-4.xo4

Catches any error returned from posix_memalign (previously any failure here was ignored).

libvmeta