"Peter Lee 2006.05.07 videosky.9126.com
In May 2003, when the H.264 coding standard draft, many people think that H.264 is too complicated and should not be practical. In the blink of an eye, I have passed, and I have been confused by the realistic rinsing. With the improvement of hardware performance and video coding workers continue to optimize H.264, today's H.264 is fully practical, the latest D1 resolution (720 * 480) video is real-time encoding, For decoding, a normal PC can achieve smooth playback of X264 encoded DVDRIP movies. Throughout the past three years, how many people have pour the H.264 enthusiasm and sweat to exchange today's achievements, and those H.264 open source projects and developers who participate in these projects are naturally good.
This paper evaluates the authors of the H.264 open source decoder, including: JM Decoder, T264 Decoder, X264 Decoder, FFmpeg Libavcodec, Intel IPP Simple Player. The contents of the evaluation are: support for the H.264 characteristics, decoding speed, and difficulty in secondary development.
First, H.264 open source decoder introduction
1, JM Decoder
JM Decoder is the official source code of H.264, which is often also referred to as a calibration model. It is characterized by a good support characteristic, practicality. The programs selected herein are JM86, which does not support HIGH PROFILE because this article does not perform experimental comparison of the high profile section.
Note: JM has not made a practical effort, so its decoding speed represents the 2003 level.
2, T264 Decoder
T264 is a domestic open source project. The program of T264 Decoder has been assembled, and the speed is OK, but only the T264 itself can be described. The author modifications to T264 Decoder Version 0.14 (2005-3-29), supporting Baseline decoding.
3, X264 Decoder
The x264 has no decoder, but it contains some of the partial functions of Decoder. The deputy author is ready to implement Decoder at the beginning, and later abandoned this idea (pure belonging, huh, huh).
The X264 Decoder of this article is implemented on the basis of X264 SVN Check Out 2005.12.26, supporting the Baseline decoding.
4, FFMPEG LIBAVCODEC
Ffmpeg is a big project that contains all kinds of audio and video standard CODEC, and also supports Parsing of all kinds of File Format (.avi, .mp4, .mkv and etc). Therefore, many open source projects use FFMPEG directly or indirectly. If the MPLAYER player is directly adopted, the MPC player first uses FFDShow Filter, while ffdshow has used FFMPEG. Ffmpeg is a great audio and video coding library, which supports standards, and the codec is very fast.
This paper uses the version of CVS CHECK OUT 2006.02.20. The author has a simple modification of Apiexample Demo, used to decode H.264 code stream.
5, Intel IPP SIMPLE PLAYER
Integ's IPP library, all integrate Performance Primitives, implemented signal processing common algorithms, common mathematical operations and audio and video codec algorithms, etc. on various processor platforms (IA-32, Itanium, Xscale and ETC) IPP gives me the first feeling that on Intel's processor platform, the various algorithms it implement should be the fastest, as for the actual outcomes, waiting until the experiment, see it.
The IPP library version used in this paper is IA32 5.1.017 evaluation version
Intel IPP Simple Player is a simple player for playing various audio and video files, using C ++ practical, and the specific algorithm calls IPP library to implement. The Simple Player version used in this paper is 5.0.017
Second, support for H.264 characteristics
1, JM86 Decoder
Support Baseline, Extended, Main Profile
2, T264 Decoder
Baseline
3, X264 Decodeer
Baseline
4, FFMPEG LIBAVCODEC
Support Baseline, Main Profile, High Profile Except The Feature: PAFF, MBAFF ...
5, Intel IPP SIMPLE PLAYER
Support Baseline and Main Profile
Third, evaluation conditions
1, the test sequence used
Table 1 test sequence used
Resolution Sequence Name Features Coding Frame QCIF Foreman Texture Complex General Sports Dramatic: Screen Characters and Sports The motion form is rich - there are multiple sports objects, but the direction of motion of each moving object is regular and gentle, the lens is also moving 200 d1 (720 * 480) Soccer2 lens has movement, the football player of the screen is also very violent 300 puppy lens No exercise, the toy puppy in the picture is only simple sports 100
(a) soccer2
(b) Puppy
2, encoding parameters
Encoding program: x264 svn check out 2006.05.06
Parameter setting example: x264enc --frames 300 - NO-cabac - QP 26 -o test.264 foreman.cif 352x288 (equivalent to Baseline)
Quantitative step: 26 and 36
2, the environment
CPU: Pentium4 2.4GHz, RAM: DDR 512M
OS: Windows2000 Professional + SP4
3, decoder program compilation environment
JM86 DECODER: VC71 Release
T264 DECODER: VC71 Release
X264 Decodeer: VC71 Release
Ffmpeg Libavcodec: MingW
Intel IPP SIMPLE PLAYER: VC71 Release + DirectX 9.0c SDK
4, decoding parameter settings
Does not save reconstruction sequences (Note: Whether to save reconstruction sequences is very affected by decoding speeds)
Fourth, decoding speed comparison results
To be complemented. . .
Table 2 Decoding speed comparison (unit: FPS)
Sequence name resolution quantization step JM86 decoder x264 decodeer ffmpeg libavcodec QCIF foreman about about 26 50fps 684.93 1196 36 874.64 1916.67 CIF foreman 26 15fps 168.44 303.86 36 190.11 503.37 mthr_dotr 26 182.82 421.28 36 200 634.62 mobile 26 129.28 190.07 36 173.01 353.46 D1 (720 * 480) SoCcer2 26 5fps left and right 53.04 105.17 36 60.19 158.12 Puppy 26 61.54 192.23 36 64.64 253.85
[Note]
The decoding program of T264 can solve the JM Baseline's code stream, but the code stream generated above the X264 is not solved, so the experimental results cannot be given. However, by statistics of the decoding speed of the T264 Fast Mode stream, T264 Decoder and X264 Decoder, the decoding speed is reduced by about 40%.
Intel IPP Simple Player compiles unsuccessful on my computer, simply testing on other successful compilation computers (XP systems, DirectX, VS.NET, IPP is installed in C), decoding speed and FFMPEG decoding speed phase Comparison, it reduces about 10%.
[Simple Conclusion]
Decoding speed: ffmpeg> IPP Simple Player> x264 decoder> T264 Decoder> JM86 Decoder
Baseline based on FFMPEG, it is assumed to be 100fps, then:
IPP Simple Player: 90FPS
X264 Decoder: 50fps
T264 DECODER: 30FPS
JM86 DECODER: 3FPS
V. Comparison of program development
I estimate that most of the readers who read this article are engaged in developing. Therefore, it will naturally think about how to learn from the program development or adopt the above-mentioned H.264 decoder, which is the difficult, applicable to the development of procedures. Operation, etc.
1, JM86 Decoder
Suitable for writing Paper groups
2, T264 Decoder
3, X264 Decodeer
The codes are very similar, so they will talk together. The program structure of these two source code is clear, supporting the compilation environment of VC and GCC, but there is a gap between the H.264's characteristics, decoding speed and FFMPEG.
4, FFMPEG LIBAVCODEC
The program structure is relatively poor, the code decoded by the H.264 is basically in the H264.c file, this file has more than 8,000 rows, which is not intended to read.
The compilation environment is GCC or MINGW, which is more difficult to transplant to VC (I tried).
Decoding speed is fast (BTW: Understand through the Doom9 Forum, the fastest H.264 decoder is Coreavc Decoder, 50% faster than FFMPEG).
Support for H.264 features.
5, Intel IPP SIMPLE PLAYER
Two aspects:
(A) IPP library
I think it is very good, but the implementation is some key functions of H.264 decoding (IPP also have H.264 encoding), such as Deblock, DCT, interpolation compensation, etc., cannot be used directly.
Other disadvantages: IPP library is commercial software, to Money, and only support Intel platform
(B) SIMPLE PLAYER
Open source, written with C ++, and DirectShow programming, that is, the Windows platform is only supported.
Its decoding speed is about 10% slower than FFMPEG, and I think the reason is not IPP library, but the code of Simple Player is not perfect.
I would like to use this article to all participants who have participated in the H.264 open source project, the river is endless. "
Our other product: