Our light-weight and parallelized next-generation High Efficiency Video Coding (HEVC) software is made open-source at
under the GNU General Public License.
The ces265 is written in C++ and developed at the Chair for Embedded Systems (CES, http://ces.itec.kit.edu), Karlsruhe Institute of Technology (KIT), Germany. It facilitates the embedded systems, architecture, and video coding communities to perform (1) research, development, and testing of various video related concepts at both hardware and software levels, (2) fast simulation and evaluation, (3) accurate complexity analysis.
In case of usage, please refer to our corresponding DATE 2014 publication:
M. U. K. Khan, M. Shafique, J. Henkel, "Software Architecture of High Efficiency Video Coding for Many-Core Systems with Power-Efficient Workload Balancing",
In IEEE/ACM Design Automation and Test in Europe (DATE), 2014.
A couple of prominent features of this alpha release are:
1) A highly efficient implementation with light-weight data structures that provides a significantly high throughput compared to the HEVC reference software (a ces265 thread is about 13 times faster than that of the HM-9.2 reference software).
2) Parallelized using HEVC's novel Tile concept and pthread multi-threading API.
3) User-configurable Video Tile structure.
4) Comprehensive statistics generation at different granularities, i.e. at GOP-, frame-, Tile-, and CTU- level.
5) Standard-compliant Intra-Only Encoder (the inter-path is under development and coming soon).
6) Windows and Linux compatible.
Note: the feature list will be updated according to the regular releases of ces265.
This work was partly supported by the German Research Foundation (DFG) as part of the Transregional Collaborative Research Centre "Invasive Computing" (SFB/TR 89); http://invasic.de
User can provide input arguments via command line to this program. The command line arguments are given below with a brief detail. Note that the argument which is preceded by * is optional. The order in which the arguments appear is not important. For more information, see EncTop.cpp file.
|-i YUV420PFileName||The "-i" option is used to provide the yuv420 planar format file name to the program, which will be compressed by the program to generate the compressed bitstream as a file named "Video.h265".|
|-w FrameWidth||The "-w" option specifies width of a frame in pixels.|
|-h FrameHeight||The "-h" option specifies height of a frame in pixels.|
|*-gop GopSize||The "-gop" option specifies the length of the GOP. The starting frame of a GOP is an Intra frame and all the rest are P-frames. Note that for the current implementation, GopSize must be equal to 1 as only Intra frame compression is supported. The default value of GopSize is equal to 1.|
|-Nframes NumFrames||The "-Nframes" option specifies the total number of frames to compress.|
|*-fps FramesPerSec||The "-fps" option is used to specify the frame-rate. Note that this is only used while computing the RD-parameter and has no impact on compression or timing efficiency. The default value of FramesPerSec is 1.|
|*-QP QPValue||The "-QP" options specifies the QP of all the frames. The default value of QPValue is 32.|
|*-Ngopth NumGopThreads||The "-Ngopth" option specifies the total number of GOP threads used. For the current implementation, NumGopThreads must be equal to 1.|
|*-Nsliceth NumSliceThreads||The "-Nsliceth" option specifies the total number of slice threads used. For the current implementation, NumSliceThreads must be equal to 1.|
|*-Ntiles NumTilesPerFrame FrameWidthInTiles FrameHeightInTiles||The "-Ntiles" option specifies the total number of tiles that will reside in one full frame. Moreover, it also specifies the tile arrangement where FrameWidthInTiles argument gives the total tiles encompassing the width of the frame and FrameHeightInTiles argument does the same for the height of the frame. For example, "-Ntiles 20 5 4" will generate 20 tiles, 5 tile columns and 4 tile rows. For ces265, the sizes of the tiles are equal. Default value of NumTilesPerFrame is equal to 1.|
|*-Ntileth NumTileThreads||The "-Ntileth" option specifies the total number of tile threads that will be used. The default value of NumTileThreads is 1.|
|*--ver||The "--ver" option denotes verbosity and providing this argument to the program will produce verbose output. By default, verbosity is turned off.|
|*--rec||The "--rec" option denotes reconstructed output generation. The name of the reconstructed yuv420 planar file is YUV420PFileName_HEVCRecon (see "-i" option). By default, no reconstructed output is generated.|
|*--stat||The "--stat" option denotes writing output statistics in a "Statistics.txt" file. By default, no output statistics are written.|
For an example, consider the following command line argument.
-i foreman_cif.yuv -w 352 -h 288 -Nframes 50 -Ntiles 2 2 1 -Ntileth 2 -fps 30 --rec --ver -QP 32 --stat
This will encode 50 frames of "foreman_cif.yuv" yuv420p video sequence, with dimensions 352x288 at a QP of 32, to generate "Video.h265" in the same directory as the program. Total of 2 tiles per frame are used, with 2 threads. Output is verbose. Reconstructed output "foreman_cif_HEVCRecon.yuv" will be generated in the same directory as the source yuv file. "Statistics.txt" will be generated in the same directory as the program. The fps of 30 is used to generate RD statistics in the "RD.txt" file present in the same directory as the program (see EncMain.cpp file).