CedarX

CedarX is Allwinner's multimedia co-processing technology for hardware accelerated video and image decoding, as used inside their A10 SoC's and others.

=Overview= CedarX is composed of several parts, including:
 * A hardware video unit(VE)
 * MPEG Decoder SubEngine
 * MPEG1
 * MPEG2
 * MPEG4
 * MS-MPEG
 * VP6
 * MJPEG (JPEG)
 * XDIV/DIVX (mpeg 3.11)
 * Soreson
 * H264 Decoder SubEngine
 * H264
 * VP8
 * AVS Jizun
 * VC1 Decoder SubEngine
 * WMV9
 * RMVB SubEngine
 * Real Media
 * ISP Engine (Image signal processor)
 * Alpha blending{need check}
 * Non-integer resize
 * AVC Encoder SubEngine
 * H264 Encode
 * JPEG Encode
 * MPEG Encode {need check}
 * A hardware audio codec engine (ACE) (only A10, modern A20,A13 have no this module)
 * Audio engines
 * DTS Audio hardware decoder
 * AC3 Audio hardware decoder
 * Codec engines
 * PNG (zlib's deflate offload)
 * TSCC Codec(zlib's deflate offload)

Benefits to Allwinner's CedarX technology and libraries:

 * Efficient use of system resources when decoding multimedia, offloading audio and video decoding to CedarX co-processor so that the CPU can be used for other things, (when CedarX is working as it as it should).
 * Allows small and low-powered ARM systems to playback high resolution/bitrate multimedia content, which would not be possible using software-only decoding using only the CPU.

Disadvantages Allwinner's CedarX technology and libraries:

 * Allwinner's own CedarX proprietary libraries have no clear usage license, so even if the source code for some versions is available the terms-of-use is unknown in open source software.
 * The Android glue code is implemented as a "media player" (parallel to Android's Stagefright multimedia framework) instead of as standard OpenMAX (OMX) components and API's.
 * This "media player" has limitations when it comes to playing back content pointed to by Android URIs and some web-based content.
 * There is no glue code for any other multimedia frameworks on GNU/Linux systems. The use of OpenMAX (OMX) instead would have rendered this a non-issue, with existing projects like GstOpenMAX (GStreamer OpenMAX).

= Reverse engineering = The video engine is current being reverse engineered with successful results. To the point of making possible an experimental vdpau implementation capable of be used to play videos.
 * Reverse engineering status
 * Video Engine (VE) VE Register guide
 * Audio Codec Engine (ACE) ACE Register guide
 * A basic tutorial to help get users started in using Cedrus/libvdpau-sunxi.

= Integration =
 * XBMC
 * VLC

=CedarX official source code libraries and third-party forks=
 * https://github.com/allwinner-dev-team/android_external_cedarx Allwinner Dev Team Android external CedarX fork
 * https://github.com/linux-sunxi/cedarx-libs linux-sunxi team fork of the official Allwinner CedarX libcedar source code libraries
 * https://github.com/huceke/libcedar libcedar decoder library for libvecore by Edgar Hucek (a.k.a. Gimli) fork for XBMC
 * https://github.com/willswang/libcedarx Wills Wang libcedarx library for libvecore fork for VLC
 * https://github.com/mortaromarcello/android_external_cedarx Android external CedarX fork by mortaromarcello

= Possibly irrelevant observations =
 * There seems to be a distinction in the Android code between audio decoding ("CedarA") and video decoding ("CedarV").

=References=

= See also =
 * CedarX/Misc Docs - some useful facts from IRC chat conversations
 * CedarXVideoRenderingChart - Overview chart of working/ non working video files
 * CedarX/libve - Using the Android blob on linux via libhybris
 * XBMC - XBMC Media Center
 * VLC - VideoLAN Client
 * CedarXPlayerTest - Testing player from Ubuntu image