The H.265/HEVC standard is becoming more and more popular in the mobile market. Online video providers, mobile Internet users, and broadcast/TV operators are the beneficiaries of this new video revolution, along with users. To produce the results described in this article, Strongene's H.265/HEVC solutions were fully optimized for Intel® Atom™ processor-based Android platforms, so don't hesitate to adopt their solutions to develop HEVC players.
Strongene's H.265/HEVC Solution
To evaluate a good video standard, we generally use efficiency and compatibility standards. The video standard evolution over the past 20 years is shown in the following graph:
H.265/HEVC is the successor codec to H.264/AVC (Advanced Video Coding), both were developed jointly by the ISO/IEC Moving Picture Experts Group  and ITU-T Video Coding Experts Group (VCEG) . The primary goal of the new codec is to provide 50% better compression efficiency than H.264 and support resolutions up to 8192 x 4320.
As shown in Figure 1, it took 9 years to evolve from MPEG-2 to H.264/AVC, so more challenges are expected to be encountered in moving from the H.264/AVC standard to the H.265/HEVC standard. Gaps between the technical concept and the actual quality of the product still exist for H.265/HEVC. However, H.265/HEVC does a good job of balancing the efficiency and compatibility requirements, which make up the next level of video standards.
Strongene's H.265/HEVC solutions were optimized using YASM  assembler compiler, Intel® C++ Compiler, Intel® Streaming SIMD Extensions (Intel® SSE) , and Intel® Threading Building Blocks (Intel® TBB) , with OpenGL*  used for rendering. By directly uploading the decoded YUV420 data to the GPU, it finishes the transcoding of YUV data to RGB data and renders the RGB data to LCD. This reduces the CPU's workload and improves performance. The data stream is shown in the following diagram:
On an Intel Atom processor-based tablet (codenamed Bay Trail), after having been tested by Intel® Graphics Performance Analyzers (Intel® GPA)  tool, the optimized H.265/HEVC decoder refresh rate can reach 90 FPS (frames per second) when playing a 1080p HEVC video. If we set the refresh rate to 24 FPS on the Bay Trail tablet when playing the 1080p video, the CPU workload is less than 25%. Thus, Strongene's H.265/HEVC solution achieves commercial use capability.
Analysis of the APIs of Strongene's H.265/HEVC Solution
The APIs of Strongene's H.265/HEVC solution are easily used directly with or integrated into FFmpeg open source. Strongene defined five functions and one structure for the H.265/HEVC decoder, as listed below:
Description: It is the context of decoder for identifying different decoders.
Description: For getting API version of current library.
lenthevcdec_ctx lenthevcdec_create(int threads, int comoatibility, void* reserved);
Description: Create decoder with specified parameters.
Void lenthevcdec_destroy(lenthevcdec_ctx ctx);
Description： Close decoder and release any resources.
Void lenthevcdec_flush(lenthevcdec_ctx ctx);
Description: flush decoder and clean the buffer.
int LENTAPI lenthevcdec_decode_frame( lenthevcdec_ctx ctx, const void* bs, intbs_len, int64_tpts, int* got_frame, int* width, int* height, intline_stride, void* pixels, int64_t* got_pts);
Description: Decode one frame. Input one frame's bit stream to decoder, and get one frame's pixel data from decoder if any frame has been decoded.
How to Integrate Strongene's H.265/HEVC Solution
Developers can easily integrate these five functions when developing HEVC video players. The documentation and sample code are available from Strongene's download web site .
Developers can directly call the Strongene's H.265/HEVC APIs to develop their video players, or they can merge Strongene's H.265/HEVC patch for FFmpeg, and then use the merged FFmpeg APIs to develop their video players. The following paragraph introduces the two methods separately.
Directly Use Strongene's APIs to Develop Video Players
On Strongene's web site, developers can download the:
- sample code
lenthevcdec_en.pdf, the Makefile
Copy the sample code to Ubuntu* build machine into separate folders:
wangsy@ubuntu:~/Desktop cp testdec.c Makefille ~/hevc/src wangsy@ubuntu:~/Desktop cp lenthevcdec.h ~/hevc/include wangsy@ubuntu:~/Desktop cp liblenthevcdec.so ~/hevc/lib/Android_x86
Set up ANDROID_NDK_HOME environment with the "export" command:
export ANDROID_NDK_HOME= $ ANDROID_NDK_HOME :/~/android-ndk-r9c
Then run the "make" command.
Then build the sample code and get the output file testdec. Copy the output file and the decoder libs into the root Android devices under /data/hevc_test.
Set up LD_LIBRARY_PATH environment with the "export" command:
Then you can run the demo on the Android devices directly.
Use the H.265/HEVC Patch for FFmpeg to Develop the Video Players
In fact, most developers will use the open source FFmpeg to develop their video players. Strongene's web site also provides the patch for FFmpeg, which can be downloaded from:
To merge this patch, you should also download and decompress the FFmpeg 2.0.4 version . Then add the patch:
wangsy@ubuntu:~/ffmpeg-2.0.4 patch –p1 < ./lentoid_ffmpeg2.0_patch_2014_01_23_new_encoder_interface.patch
Copy the downloaded headfile and the libs code to ~/ffmpeg-2.0.4/thirdparty
cp lenthevcdec.h lenthevcenc.h liblenthevcdec.so liblenthevcenc.so ~/ffmpeg-2.0.4/thirdparty
Copy the following configure file to ~/ffmpeg-2.0.4 and add the "run" permissions:
wangsy@ubuntu: cp build_x86.sh ~/ffmpeg-2.0.4 wangsy@ubuntu: sudo chmod a+x ~/ffmpeg-2.0.4/build_x86.sh
Run the configure file "build_x86.sh" (embedded above), then run the "make" and "make install" commands. The merged FFmpeg with Strongene's H.265/HEVC patch should now be built successfully. The output libs will be under~/FFmpeg2.0.4/android/x86/lib. You can use these output libs in your video players.
For more such Android resources and tools from Intel, please visit the Intel® Developer Zone