Friday, January 9, 2015

High Quality Video Compression: Integrating an H.265/HEVC Solution for Android Platforms

This article introduces Strongene's H.265/HEVC solution on Intel Atom processor-based Android tablet. If you have any H.265 playback problem on Android or wanna an alternative, please refer.

For the HD videos are very popular today, most of us must have some HEVC files in Android Platforms. Here offers you some effective H.265/HEVC Solutions, we will provide you with information on products and services that we consider useful and of value to developers.
 


Abstract

According to the International Data Corporation, the total amount of global data for 2012 reached 2.7 zettabytes, an increase of 48% from 2011. Ninety percent of the global data was videos. Video apps consumed 66% of the total Internet data flow, and that number continues to increase rapidly. End users want to watch high quality videos but, for online video providers, costs of purchasing the network bandwidth and the storage devices grow increasingly expensive every year. How can video content providers meet the challenge of large data sources and their increasing storage requirements? Is it possible to achieve high quality videos with smaller bandwidth? The solution to these challenges is found in utilizing a video core compression technique known as High Efficiency Video Coding (H.265/HEVC).

Some open source communities such as FFmpeg are developing an H.265/HEVC decoder, but the performance has not yet reached commercial use capability. Strongene Ltd., a producer of video codec core technology, has developed advanced H.265/HEVC encoder/decoder solutions, including optimized H.265/HEVC encoder/decoder libraries and demonstration codes for Intel® Atom™ processor-based Android platforms. This article introduces Strongene's H.265/HEVC solution on Intel Atom processor-based Android tablet (condenamed Bay Trail).

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:


video standard evolution

Figure1. Video standard history

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:
CPU's workload

Figure2. Render method comparison

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:

Structure:

lenthevcdec_ctx;

Description: It is the context of decoder for identifying different decoders.

Functions:

1. Unit32_t lenthevcdec_version(void);

Description: For getting API version of current library.

2. lenthevcdec_ctx lenthevcdec_create(int threads, int comoatibility, void* reserved);

Description: Create decoder with specified parameters.

Example: 

int32_t got_frame, width, height, stride[3], ret, i;
uint8_t* pixels[3];
int64_tpts, got_pts;
for ( i = 0; i <au_count; i++ ) {
pts = i * 40;
got_frame = 0;
ret = lenthevcdec_decode_frame(ctx, au_buf + au_pos[i], au_pos[i + 1] -
au_pos[i], pts,&got_frame, &width, &height, stride, (void**)pixels,
&got_pts);
if ( ret < 0 ) {
fprintf(stderr, 
"calllenthevcdec_decode_frame failed! ret=%dn", ret);
exit(1);
}
if ( got_frame> 0 ) {
printf("decode frame, %dx%d, pts is %" PRId64 "n", 
width, height, got_pts);
/* got frame, do something ... */
}


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 testdec.c/lenthevcdec.h 
  • decoder: liblenthevcdec.so 
  • documents: 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 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:lentoid_ffmpeg2.0_patch_2014_01_23_new_encoder_interface.patch

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 &ndash;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 

Download build_x86.txt

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.

Summary

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. 

via codeproject.com 

Editor's Note:

Didn't understand? Never mind! Due to the complex process, you may meet unexpected problems. Please comment below.

If you need an easy-to-use yet powerful H.265 encoder, decoder and converter, the upgraded Pavtube Video Converter Ultimate will be the perfect solution. It is clean and safe to install and use. With it, you can not only effortlessly transcode Blu-ray, DVD and non-H.265 video to H.265/HEVC MP4 for Android, but also decode H.265 video to any video format for playback on media player, Android devices and game consoles without problems. It works well and converts flawlessly.