CedarX

CedarX is the name of Allwinner's proprietary multimedia library for hardware accelerated video and image decoding, also incorrectly called VPU, as used inside their A10, A10s, A13, A20, and A23 SoC series.

=Overview= CedarX is composed of several parts, including:
 * A hardware video unit (video engine or "VE" for short)
 * Varous Features
 * Adaptive Motion Filter
 * 3D Anaglyph decoding
 * 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 the official Android's MediaCodec API and underlying 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-zh/media-codec Officiall Allwinner source tree
 * 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
 * https://github.com/stulluk/CedarX-12.06.2015 This is new source from Allwinner with some API documentation and example C application...

= 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