@37 SPS: bit_depth_chroma_minus8 ue(v) 0 [1] @38 SPS: qpprime_y_zero_transform_bypass_flag u(1) 0 [0] @39 SPS: seq_scaling_matrix_present_flag u(1) 0 [0]
@40 SPS: log2_max_frame_num_minus_4 ue(v) 5 [00110] @45 SPS: pic_order_cnt_type ue(v) 0 [1]
@46 SPS: log2_max_pic_order_cnt_lsb_minus4 ue(v) 2 [011] @49 SPS: num_ref_frames ue(v) 0 [1]
@50 SPS: gaps_in_frame_num_value_allowed_flag u(1) 1 [1]
@51 SPS: pic_width_in_mbs_minus1 ue(v) 21 [000010110] @60 SPS: pic_height_in_map_units_minus1 ue(v) 17 [000010010] @69 SPS: frame_mbs_only_flag u(1) 1 [1] @70 SPS: direct_8x8_inference_flag u(1) 1 [1] @71 SPS: frame_cropping_flag u(1) 0 [0] @72 SPS: vui_parameters_present_flag u(1) 0 [0]
@73 SPS: inter_layer_deblocking_filter_control_present_flag u(1) 0 [0] @74 SPS: extended_spatial_scalability u(2) 0 [00] @76 SPS: chroma_phase_x_plus1_flag u(1) 0 [0] @77 SPS: chroma_phase_y_plus1 u(2) 1 [01] @79 SPS: seq_tcoeff_level_prediction_flag u(1) 0 [0] @80 SPS: slice_header_restriction_flag u(1) 0 [0] @81 SPS: svc_vui_parameters_present_flag u(1) 0 [0] @82 SPS: additional_extension2_flag u(1) 0 [0]
7.3.5 NAL sample: PPS (Picture parameter set) trace Sample
Which apply to the decoding of one or more individual pictures within a coded video sequence.
-------------------- PICTURE PARAMETER SET --------------------
@0 NAL unit header: forbidden_zero_bit u(1) 0 [0] @1 NAL unit header: nal_ref_idc u(2) 3 [11]
@3 NAL unit header: nal_unit_type u(5) 8 [01000] @8 PPS: pic_parameter_set_id ue(v) 0 [1] @9 PPS: seq_parameter_set_id ue(v) 0 [1] @10 PPS: entropy_coding_mode_flag u(1) 1 [1] @11 PPS: pic_order_present_flag u(1) 1 [1] @12 PPS: num_slice_groups_minus1 ue(v) 0 [1] @13 PPS: num_ref_idx_l0_active_minus1 ue(v) 0 [1] @14 PPS: num_ref_idx_l1_active_minus1 ue(v) 0 [1] @15 PPS: weighted_pred_flag u(1) 0 [0] @16 PPS: weighted_bipred_idc u(2) 0 [00]
@18 PPS: pic_init_qp_minus26 se(v) -16 [00000100001]
@29 PPS: pic_init_qs_minus26 se(v) 0 [1] @30 PPS: chroma_qp_index_offset se(v) 0 [1] @31 PPS: deblocking_filter_control_present_flag u(1) 0 [0] @32 PPS: constrained_intra_pred_flag u(1) 1 [1] @33 PPS: redundant_pic_cnt_present_flag u(1) 0 [0] -------------------- PICTURE PARAMETER SET --------------------
@0 NAL unit header: forbidden_zero_bit u(1) 0 [0] @1 NAL unit header: nal_ref_idc u(2) 3 [11]
@3 NAL unit header: nal_unit_type u(5) 8 [01000] @8 PPS: pic_parameter_set_id ue(v) 1 [010] @11 PPS: seq_parameter_set_id ue(v) 0 [1] @12 PPS: entropy_coding_mode_flag u(1) 1 [1] @13 PPS: pic_order_present_flag u(1) 1 [1] @14 PPS: num_slice_groups_minus1 ue(v) 0 [1] @15 PPS: num_ref_idx_l0_active_minus1 ue(v) 0 [1] @16 PPS: num_ref_idx_l1_active_minus1 ue(v) 0 [1] @17 PPS: weighted_pred_flag u(1) 0 [0] @18 PPS: weighted_bipred_idc u(2) 0 [00]
@20 PPS: pic_init_qp_minus26 se(v) -16 [00000100001] @31 PPS: pic_init_qs_minus26 se(v) 0 [1] @32 PPS: chroma_qp_index_offset se(v) 0 [1] @33 PPS: deblocking_filter_control_present_flag u(1) 0 [0] @34 PPS: constrained_intra_pred_flag u(1) 1 [1] @35 PPS: redundant_pic_cnt_present_flag u(1) 0 [0] -------------------- PICTURE PARAMETER SET --------------------
@0 NAL unit header: forbidden_zero_bit u(1) 0 [0] @1 NAL unit header: nal_ref_idc u(2) 3 [11]
@3 NAL unit header: nal_unit_type u(5) 8 [01000] @8 PPS: pic_parameter_set_id ue(v) 2 [011] @11 PPS: seq_parameter_set_id ue(v) 0 [1] @12 PPS: entropy_coding_mode_flag u(1) 1 [1] @13 PPS: pic_order_present_flag u(1) 1 [1] @14 PPS: num_slice_groups_minus1 ue(v) 0 [1] @15 PPS: num_ref_idx_l0_active_minus1 ue(v) 0 [1] @16 PPS: num_ref_idx_l1_active_minus1 ue(v) 0 [1] @17 PPS: weighted_pred_flag u(1) 0 [0] @18 PPS: weighted_bipred_idc u(2) 0 [00]
@20 PPS: pic_init_qp_minus26 se(v) -16 [00000100001] @31 PPS: pic_init_qs_minus26 se(v) 0 [1] @32 PPS: chroma_qp_index_offset se(v) 0 [1] @33 PPS: deblocking_filter_control_present_flag u(1) 0 [0] @34 PPS: constrained_intra_pred_flag u(1) 0 [0] @35 PPS: redundant_pic_cnt_present_flag u(1) 0 [0]
7.3.6 NAL sample: Prefix
-------------------- PREFIX UNIT --------------------
@0 NAL unit header: forbidden_zero_bit u(1) 0 [0] @1 NAL unit header: nal_ref_idc u(2) 3 [11]
@3 NAL unit header: nal_unit_type u(5) 14 [01110] @8 NAL unit header: reserved_one_bit u(1) 1 [1] @9 NAL unit header: idr_flag u(1) 1 [1]
@10 NAL unit header: priority_id u(6) 0 [000000] @16 NAL unit header: no_inter_layer_pred_flag u(1) 1 [1] @17 NAL unit header: dependency_id u(3) 0 [000] @20 NAL unit header: quality_id u(4) 0 [0000] @24 NAL unit header: temporal_id u(3) 0 [000] @27 NAL unit header: use_ref_base_pic_flag u(1) 0 [0] @28 NAL unit header: discardable_flag u(1) 0 [0] @29 NAL unit header: output_flag u(1) 1 [1] @30 NAL unit header: reserved_three_2bits u(2) 3 [11] @32 store_ref_base_pic_flag u(1) 0 [0]
@33 additional_prefix_nal_unit_extension_flag u(1) 0 [0]
7.3.7 NAL sample: Slice
-------------------- Slice # 0 Frame # 0 --------------------
@0 NAL unit header: forbidden_zero_bit u(1) 0 [0] @1 NAL unit header: nal_ref_idc u(2) 3 [11]
@3 NAL unit header: nal_unit_type u(5) 5 [00101] @8 SH: first_mb_in_slice ue(v) 0 [1] @9 SH: slice_type ue(v) 2 [011] @12 SH: pic_parameter_set_id ue(v) 0 [1]
@13 SH: frame_num u(9) 0 [000000000] @22 SH: idr_pic_id ue(v) 0 [1]
@23 SH: pic_order_cnt_lsb u(6) 0 [000000] @29 SH: delta_pic_order_cnt_bottom se(v) 0 [1] @30 DRPM: no_output_of_prior_pics_flag u(1) 1 [1] @31 DRPM: long_term_reference_flag u(1) 0 [0] @32 SH: slice_qp_delta se(v) 0 [1]
7.3.8 NAL sample: MacroBlock
********* Pic: 33 (I/P) MB: 51 Slice: 0 **********
@108388mb_skip_flag 0000 ( 1)
@108392mb_type (P_SLICE) ( 7, 4) = 1 1 ( 1) @108393ref_idx_l0 = 0 ( 0)
@108393mvd_l0 (0) = 2 (org_mv 2 pred_mv 0) 010110 ( 2) @108399mvd_l0 (1) = 0 (org_mv 0 pred_mv 0) ( 0) @108399CBP ( 7, 4) = 31 00001001111 ( 31) @108410transform size 8x8 flag = 1 11 ( 1) @108412Delta QP ( 7, 4) = 0 ( 0) @108412Luma8x8 sng( 0) level = -2 run = 0 ( -2) @108412Luma8x8 sng( 1) level = 0 run = 0 00001001111 ( 0) @108423Luma8x8 sng( 0) level = -3 run = 0 ( -3) @108423Luma8x8 sng( 1) level = 0 run = 1 000001001110 ( 0) @108435Luma8x8 sng( 0) level = -2 run = 0 ( -2) @108435Luma8x8 sng( 1) level = 0 run = 1 1001010 ( 0) @108442Luma8x8 sng( 0) level = -3 run = 0 ( -3) @108442Luma8x8 sng( 1) level = 0 run = 1 001001001 ( 0) @108451DC Chroma 0: level = 1 run = 0 ( 1) @108451DC Chroma 1: level = 0 run = 2 1010 ( 0) @108455DC Chroma 0: level = -1 run = 0 ( -1) @108455DC Chroma 1: level = 0 run = 1 0101 ( 0) CABAC terminating bit = 0
7.3.9 Byte Stream Format
Although NAL Unit allows putting a synchronization byte sequence, it doesn‘t have any yet. The standard defines another wrapper to add three or four bytes synchronization byte pattern: the Byte Stream Format. The byte stream format puts a synchronization byte sequence (0×000001 or 0×00000001) before every NAL Unit. The byte stream format is used as the elementary stream of H.264 in transport stream and MP4 container.
The original intention of the standard is to let applications to pick a suitable format. For example, MPEG Transport Stream uses byte stream format to allow decoder to find the NAL Unit easily. Other container format such as AVI where the length of the header is stored in a packet would use NAL Unit or even RBSP to reduce the overhead of
synchronization bytes. However, in real world, almost all storage and delivery formats use byte stream format. It‘s due to practical reasons such as to simplify the re-wrapping process.
7.3.10 Packet Stream Format
In IP-based systems (e.g., IP/RTP systems), the coded data is carried in packets that are framed by the system transport protocol, and identification of the boundaries of NAL units within the packets can be established without use of start code prefix patterns. In such systems, the inclusion of start code prefixes in the data would be a waste of data carrying capacity, so instead the NAL units can be carried in data packets without start code prefixes.