Modified JM H.264/AVC Codec
Adjusted JM Reference software to generate traces
Version 16.1 of the JM Reference software has been adjusted in order to enable the generation of an XML-based trace file. This file contains detailed information concerning the encoded H.264 bit stream. The trace file is generated during the decoding process. Changes have been made to the following source files for enabling the trace file generation:
ldecod/src/image.c
ldecod/src/ldecod.c
ldecod/src/macroblock.c
ldecod/src/mbuffer.c
ldecod/src/output.c
ldecod/src/parset.c
ldecod/inc/global.h
ldecod/inc/mbuffer.h
Changes made for trace file generation are placed between a ā/*** XML_TRACE_BEGIN **/ā and a ā/** XML_TRACE_END *****/ā comment line. In addition, some new files are needed which simplify the creation of the XML trace file. These files are located in the ldecod/xmltracefile/src and the ldecod/xmltracefile/inc directories.
Tracefile overview
Currently, the following information is extracted during the decoding process and stored in the trace file (version 1.5):
For every non-picture (NALU type >= 6)
- NAL unit information
NAL unit information:
- Num - NAL unit number according to position in the bit stream
- Type - NALU type as defined in Table 7-1 of ITU-Rec. H.264
- TypeString - String identifying NALU type (Redundant information)
- Length - Size of the NALU in bytes
In case of an SPS NALU (NALU type = 7), the following fields are literally outputted:
pic_width_in_mbs_minus1
pic_height_in_map_units_minus1
frame_mbs_only_flag
frame_cropping parameters:
frame_crop_left_offset
frame_crop_right_offset
frame_crop_top_offset
-
frame_crop_bottom_offset
-
VUI parameters with timing information (if available):
- num_units_in_tick
- time_scale
- fixed_frame_rate_flag
For every picture:
- id
- poc - Picture Order Count
- GOPNr - GOP number to which this picture belongs
- SubPicture information (Represents frame or field data. In case of interlaced content, each picture contains two elements for the top and bottom field.)
For every subpicture:
- structure - integer indicating whether the subpicture contains frame or field data (0 = frame data, 1 = top field data, 2 = bottom field data)
- Slice information
For every slice:
- num
- Type - Slice type as defined in Table 7-6 of ITU-Rec. H.264
- TypeString - String identifying the slice type (Redundant information)
- NAL unit information - Note: this information can occur up to three times in case of data partitioning
- Macroblock information
For every macroblock:
- num
- QP_Y
- Type - Macroblock type as defined in tables 7-11, 7-12, 7-13 and 7-14 of ITU-Rec. H.264
- TypeString - String identifying the macroblock type (Redundant information)
- PredModeString - String identifying the macroblock prediction mode (I, SI, P or B)
- SkipFlag - true if the current macroblock is a P_SKIP or a B_SKIP
- Position - X and Y coordinate (in pixels) of the current macroblock
- MotionVector information or Submacroblock information (in case of B_8x8 or P_8x8 macroblock)
- Coefficients
For every submacroblock:
- num
- Type - Submacroblock type as defined in tables 7-17 and 7-18 of ITU-Rec. H.264
- TypeString - String identifying the submacroblock type (Redundant information)
- MotionVector information
For every motion vector:
- list - list 0 or list 1 prediction
- RefIdx - index in reference picture list of the reference picture to be used for prediction
- Difference - horizontal and vertical motion vector component difference
- Absolute - horizontal and vertical motion vector component
The structure of the XML trace file is also described in the XSD schema file AVCTrace.xsd
.
When using a configuration file for decoding the video sequence (see below), it is possible to limit the XML trace file generation depth by setting the XML trace log level variable. Possible values are:
0 => trace up to Slice and NAL header
1 => add Macroblock info
2 => add SubMacroblock info
3 => add MotionVector info
4 => add Coefficients
Usage
Command line interface:
ldecod.exe [-s] -i <input>.264 -o <output>.yuv [-r <orig>.yuv] [-xmltrace <tracefile>.xml]
-s silent decode ommit unnecessary information during decoding (optional)
-i <input>.264 encoded bitstream to decode
-o <output>.yuv output filename for the decoded bitstream
-r <orig>.yuv original decoded file (for PSNR computation) (optional)
-xmltrace <tracefile>.xml filename for the XML tracefile (optional)
WARNING: this command line interface can only be used when no concealment must be performed
Configuration file
Must be used in case error concealment must be performed
ldecod.exe config.cfg
A sample configuration file is located in ldecod/xmltracefile/doc/decod.cfg
Error concealment
In order for the error concealment to work correctly, two parameters need to be set in the config file: āErr Concealmentā (should be set to 1) and āReference POC gapā (2: IPP (Default), 4: IbP / IpP, ā¦) Currently, the error concealment only works in case of a fixed GOP size and structure.
It is also possible to conceal the corrupted stream based on the encoder log created during encoding with the JM reference software. This way, perfect error concealment can be achieved. The path to the encoder log must be specified at the end of the configuration file.
A sample configuration file is located in ldecod/xmltracefile/doc/decod_with_enctrace.cfg