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
 * MPEG Decoder Engine (VE)
 * MPEG1
 * MPEG2
 * MPEG4
 * MS-MPEG
 * VP6
 * MJPEG (JPEG)
 * XDIV/DIVX (mpeg 3.11)
 * Soreson
 * H264 Decoder Engine
 * H264
 * VP8
 * AVS Jizun
 * VC1 Decoder Engine
 * WMV9
 * RMVB Engine
 * Real Media
 * MPEG Encoder Engine
 * ISP Engine (Image signal processor)
 * JPEG Encoder
 * Alpha blending{need check}
 * Non-integer resize {need check}
 * AVC Encoder Engine
 * H264 Encoder
 * A hardware audio codec engine (ACE)
 * Audio engines
 * DTS Audio hardware decoder
 * AC3 Audio hardware decoder
 * Codec engines
 * PNG (zlib's deflate offload)
 * TSCC Codec(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).

= CedarX Register Guide = Video Engine (VE)

VE Register guide

Audio Codec Engine (ACE)

ACE Register guide

= Integration =
 * XBMC
 * VLC
 * OpenMAX
 * Stagefright
 * GStreamer
 * FFmpeg

=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

= Reverse Engineering = There is some Reverse Engineering in progress, it deserves its own page.

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

=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
 * OpenMAX - Open standard API for cross-platform hardware acceleration of audio, image, and video decoding
 * GStreamer - Cross-platform API and ABI for hardware acceleration of audio, image, and video decoding
 * Stagefright - Google's API for hardware acceleration of audio, image, and video decoding on Android
 * FFmpeg - open source software project that produces libraries and programs for handling multimedia data
 * XBMC - XBMC Media Center
 * VLC - VideoLAN Client