1dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu/* 2dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui ZhuCopyright (c) 2011 Stanislav Vitvitskiy 3dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 4dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui ZhuPermission is hereby granted, free of charge, to any person obtaining a copy of this 5dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhusoftware and associated documentation files (the "Software"), to deal in the Software 6dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuwithout restriction, including without limitation the rights to use, copy, modify, 7dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhumerge, publish, distribute, sublicense, and/or sell copies of the Software, and to 8dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupermit persons to whom the Software is furnished to do so, subject to the following 9dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuconditions: 10dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 11dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui ZhuThe above copyright notice and this permission notice shall be included in all copies or 12dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhusubstantial portions of the Software. 13dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 14dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui ZhuTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 15dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui ZhuINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 16dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui ZhuPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE 17dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui ZhuFOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 18dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui ZhuTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE 19dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui ZhuOR OTHER DEALINGS IN THE SOFTWARE. 20dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu*/ 21dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupackage com.googlecode.mp4parser.h264.model; 22dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 23dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.googlecode.mp4parser.h264.read.CAVLCReader; 24dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport com.googlecode.mp4parser.h264.write.CAVLCWriter; 25dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 26dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.io.ByteArrayInputStream; 27dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.io.IOException; 28dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.io.InputStream; 29dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.io.OutputStream; 30dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuimport java.util.Arrays; 31dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 32dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu/** 33dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * Picture Parameter Set entity of H264 bitstream 34dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * <p/> 35dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * capable to serialize / deserialize with CAVLC bitstream 36dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * 37dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu * @author Stanislav Vitvitskiy 38dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu */ 39dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupublic class PictureParameterSet extends BitstreamElement { 40dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 41dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public static class PPSExt { 42dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public boolean transform_8x8_mode_flag; 43dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public ScalingMatrix scalindMatrix = new ScalingMatrix(); 44dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int second_chroma_qp_index_offset; 45dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public boolean[] pic_scaling_list_present_flag; 46dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 47dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu @Override 48dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public String toString() { 49dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return "PPSExt{" + 50dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu "transform_8x8_mode_flag=" + transform_8x8_mode_flag + 51dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ", scalindMatrix=" + scalindMatrix + 52dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ", second_chroma_qp_index_offset=" + second_chroma_qp_index_offset + 53dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ", pic_scaling_list_present_flag=" + pic_scaling_list_present_flag + 54dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu '}'; 55dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 56dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 57dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 58dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public boolean entropy_coding_mode_flag; 59dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int num_ref_idx_l0_active_minus1; 60dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int num_ref_idx_l1_active_minus1; 61dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int slice_group_change_rate_minus1; 62dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int pic_parameter_set_id; 63dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int seq_parameter_set_id; 64dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public boolean pic_order_present_flag; 65dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int num_slice_groups_minus1; 66dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int slice_group_map_type; 67dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public boolean weighted_pred_flag; 68dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int weighted_bipred_idc; 69dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int pic_init_qp_minus26; 70dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int pic_init_qs_minus26; 71dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int chroma_qp_index_offset; 72dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public boolean deblocking_filter_control_present_flag; 73dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public boolean constrained_intra_pred_flag; 74dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public boolean redundant_pic_cnt_present_flag; 75dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int[] top_left; 76dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int[] bottom_right; 77dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int[] run_length_minus1; 78dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public boolean slice_group_change_direction_flag; 79dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int[] slice_group_id; 80dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public PPSExt extended; 81dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 82dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public static PictureParameterSet read(byte[] b) throws IOException { 83dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return read(new ByteArrayInputStream(b)); 84dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 85dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 86dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public static PictureParameterSet read(InputStream is) throws IOException { 87dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu CAVLCReader reader = new CAVLCReader(is); 88dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu PictureParameterSet pps = new PictureParameterSet(); 89dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 90dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.pic_parameter_set_id = reader.readUE("PPS: pic_parameter_set_id"); 91dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.seq_parameter_set_id = reader.readUE("PPS: seq_parameter_set_id"); 92dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.entropy_coding_mode_flag = reader 93dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .readBool("PPS: entropy_coding_mode_flag"); 94dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.pic_order_present_flag = reader 95dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .readBool("PPS: pic_order_present_flag"); 96dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.num_slice_groups_minus1 = reader 97dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .readUE("PPS: num_slice_groups_minus1"); 98dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (pps.num_slice_groups_minus1 > 0) { 99dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.slice_group_map_type = reader 100dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .readUE("PPS: slice_group_map_type"); 101dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.top_left = new int[pps.num_slice_groups_minus1 + 1]; 102dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.bottom_right = new int[pps.num_slice_groups_minus1 + 1]; 103dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.run_length_minus1 = new int[pps.num_slice_groups_minus1 + 1]; 104dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (pps.slice_group_map_type == 0) 105dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu for (int iGroup = 0; iGroup <= pps.num_slice_groups_minus1; iGroup++) 106dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.run_length_minus1[iGroup] = reader 107dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .readUE("PPS: run_length_minus1"); 108dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu else if (pps.slice_group_map_type == 2) 109dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu for (int iGroup = 0; iGroup < pps.num_slice_groups_minus1; iGroup++) { 110dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.top_left[iGroup] = reader.readUE("PPS: top_left"); 111dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.bottom_right[iGroup] = reader 112dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .readUE("PPS: bottom_right"); 113dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 114dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu else if (pps.slice_group_map_type == 3 115dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu || pps.slice_group_map_type == 4 116dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu || pps.slice_group_map_type == 5) { 117dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.slice_group_change_direction_flag = reader 118dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .readBool("PPS: slice_group_change_direction_flag"); 119dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.slice_group_change_rate_minus1 = reader 120dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .readUE("PPS: slice_group_change_rate_minus1"); 121dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } else if (pps.slice_group_map_type == 6) { 122dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int NumberBitsPerSliceGroupId; 123dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (pps.num_slice_groups_minus1 + 1 > 4) 124dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu NumberBitsPerSliceGroupId = 3; 125dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu else if (pps.num_slice_groups_minus1 + 1 > 2) 126dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu NumberBitsPerSliceGroupId = 2; 127dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu else 128dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu NumberBitsPerSliceGroupId = 1; 129dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int pic_size_in_map_units_minus1 = reader 130dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .readUE("PPS: pic_size_in_map_units_minus1"); 131dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.slice_group_id = new int[pic_size_in_map_units_minus1 + 1]; 132dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu for (int i = 0; i <= pic_size_in_map_units_minus1; i++) { 133dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.slice_group_id[i] = reader.readU( 134dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu NumberBitsPerSliceGroupId, "PPS: slice_group_id [" 135dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu + i + "]f"); 136dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 137dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 138dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 139dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.num_ref_idx_l0_active_minus1 = reader 140dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .readUE("PPS: num_ref_idx_l0_active_minus1"); 141dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.num_ref_idx_l1_active_minus1 = reader 142dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .readUE("PPS: num_ref_idx_l1_active_minus1"); 143dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.weighted_pred_flag = reader.readBool("PPS: weighted_pred_flag"); 144dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.weighted_bipred_idc = (int) reader.readNBit(2, 145dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu "PPS: weighted_bipred_idc"); 146dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.pic_init_qp_minus26 = reader.readSE("PPS: pic_init_qp_minus26"); 147dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.pic_init_qs_minus26 = reader.readSE("PPS: pic_init_qs_minus26"); 148dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.chroma_qp_index_offset = reader 149dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .readSE("PPS: chroma_qp_index_offset"); 150dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.deblocking_filter_control_present_flag = reader 151dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .readBool("PPS: deblocking_filter_control_present_flag"); 152dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.constrained_intra_pred_flag = reader 153dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .readBool("PPS: constrained_intra_pred_flag"); 154dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.redundant_pic_cnt_present_flag = reader 155dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .readBool("PPS: redundant_pic_cnt_present_flag"); 156dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (reader.moreRBSPData()) { 157dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.extended = new PictureParameterSet.PPSExt(); 158dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.extended.transform_8x8_mode_flag = reader 159dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .readBool("PPS: transform_8x8_mode_flag"); 160dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu boolean pic_scaling_matrix_present_flag = reader 161dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .readBool("PPS: pic_scaling_matrix_present_flag"); 162dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (pic_scaling_matrix_present_flag) { 163dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu for (int i = 0; i < 6 + 2 * (pps.extended.transform_8x8_mode_flag ? 1 164dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu : 0); i++) { 165dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu boolean pic_scaling_list_present_flag = reader 166dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .readBool("PPS: pic_scaling_list_present_flag"); 167dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (pic_scaling_list_present_flag) { 168dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.extended.scalindMatrix.ScalingList4x4 = new ScalingList[8]; 169dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.extended.scalindMatrix.ScalingList8x8 = new ScalingList[8]; 170dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (i < 6) { 171dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.extended.scalindMatrix.ScalingList4x4[i] = ScalingList 172dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .read(reader, 16); 173dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } else { 174dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.extended.scalindMatrix.ScalingList8x8[i - 6] = ScalingList 175dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .read(reader, 64); 176dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 177dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 178dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 179dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 180dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu pps.extended.second_chroma_qp_index_offset = reader 181dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .readSE("PPS: second_chroma_qp_index_offset"); 182dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 183dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 184dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu reader.readTrailingBits(); 185dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 186dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return pps; 187dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 188dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 189dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public void write(OutputStream out) throws IOException { 190dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu CAVLCWriter writer = new CAVLCWriter(out); 191dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 192dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeUE(pic_parameter_set_id, "PPS: pic_parameter_set_id"); 193dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeUE(seq_parameter_set_id, "PPS: seq_parameter_set_id"); 194dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeBool(entropy_coding_mode_flag, 195dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu "PPS: entropy_coding_mode_flag"); 196dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeBool(pic_order_present_flag, "PPS: pic_order_present_flag"); 197dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeUE(num_slice_groups_minus1, "PPS: num_slice_groups_minus1"); 198dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (num_slice_groups_minus1 > 0) { 199dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeUE(slice_group_map_type, "PPS: slice_group_map_type"); 200dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int[] top_left = new int[1]; 201dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int[] bottom_right = new int[1]; 202dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int[] run_length_minus1 = new int[1]; 203dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (slice_group_map_type == 0) { 204dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu for (int iGroup = 0; iGroup <= num_slice_groups_minus1; iGroup++) { 205dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeUE(run_length_minus1[iGroup], "PPS: "); 206dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 207dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } else if (slice_group_map_type == 2) { 208dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu for (int iGroup = 0; iGroup < num_slice_groups_minus1; iGroup++) { 209dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeUE(top_left[iGroup], "PPS: "); 210dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeUE(bottom_right[iGroup], "PPS: "); 211dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 212dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } else if (slice_group_map_type == 3 || slice_group_map_type == 4 213dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu || slice_group_map_type == 5) { 214dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeBool(slice_group_change_direction_flag, 215dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu "PPS: slice_group_change_direction_flag"); 216dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeUE(slice_group_change_rate_minus1, 217dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu "PPS: slice_group_change_rate_minus1"); 218dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } else if (slice_group_map_type == 6) { 219dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int NumberBitsPerSliceGroupId; 220dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (num_slice_groups_minus1 + 1 > 4) 221dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu NumberBitsPerSliceGroupId = 3; 222dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu else if (num_slice_groups_minus1 + 1 > 2) 223dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu NumberBitsPerSliceGroupId = 2; 224dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu else 225dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu NumberBitsPerSliceGroupId = 1; 226dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeUE(slice_group_id.length, "PPS: "); 227dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu for (int i = 0; i <= slice_group_id.length; i++) { 228dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeU(slice_group_id[i], NumberBitsPerSliceGroupId); 229dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 230dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 231dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 232dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeUE(num_ref_idx_l0_active_minus1, 233dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu "PPS: num_ref_idx_l0_active_minus1"); 234dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeUE(num_ref_idx_l1_active_minus1, 235dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu "PPS: num_ref_idx_l1_active_minus1"); 236dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeBool(weighted_pred_flag, "PPS: weighted_pred_flag"); 237dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeNBit(weighted_bipred_idc, 2, "PPS: weighted_bipred_idc"); 238dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeSE(pic_init_qp_minus26, "PPS: pic_init_qp_minus26"); 239dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeSE(pic_init_qs_minus26, "PPS: pic_init_qs_minus26"); 240dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeSE(chroma_qp_index_offset, "PPS: chroma_qp_index_offset"); 241dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeBool(deblocking_filter_control_present_flag, 242dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu "PPS: deblocking_filter_control_present_flag"); 243dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeBool(constrained_intra_pred_flag, 244dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu "PPS: constrained_intra_pred_flag"); 245dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeBool(redundant_pic_cnt_present_flag, 246dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu "PPS: redundant_pic_cnt_present_flag"); 247dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (extended != null) { 248dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeBool(extended.transform_8x8_mode_flag, 249dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu "PPS: transform_8x8_mode_flag"); 250dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeBool(extended.scalindMatrix != null, 251dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu "PPS: scalindMatrix"); 252dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (extended.scalindMatrix != null) { 253dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu for (int i = 0; i < 6 + 2 * (extended.transform_8x8_mode_flag ? 1 254dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu : 0); i++) { 255dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (i < 6) { 256dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer 257dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .writeBool( 258dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu extended.scalindMatrix.ScalingList4x4[i] != null, 259dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu "PPS: "); 260dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (extended.scalindMatrix.ScalingList4x4[i] != null) { 261dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu extended.scalindMatrix.ScalingList4x4[i] 262dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .write(writer); 263dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 264dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 265dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } else { 266dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer 267dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .writeBool( 268dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu extended.scalindMatrix.ScalingList8x8[i - 6] != null, 269dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu "PPS: "); 270dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (extended.scalindMatrix.ScalingList8x8[i - 6] != null) { 271dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu extended.scalindMatrix.ScalingList8x8[i - 6] 272dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu .write(writer); 273dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 274dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 275dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 276dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 277dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeSE(extended.second_chroma_qp_index_offset, "PPS: "); 278dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 279dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 280dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu writer.writeTrailingBits(); 281dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 282dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 283dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu @Override 284dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public int hashCode() { 285dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu final int prime = 31; 286dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu int result = 1; 287dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = prime * result + Arrays.hashCode(bottom_right); 288dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = prime * result + chroma_qp_index_offset; 289dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = prime * result + (constrained_intra_pred_flag ? 1231 : 1237); 290dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = prime * result 291dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu + (deblocking_filter_control_present_flag ? 1231 : 1237); 292dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = prime * result + (entropy_coding_mode_flag ? 1231 : 1237); 293dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = prime * result 294dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu + ((extended == null) ? 0 : extended.hashCode()); 295dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = prime * result + num_ref_idx_l0_active_minus1; 296dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = prime * result + num_ref_idx_l1_active_minus1; 297dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = prime * result + num_slice_groups_minus1; 298dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = prime * result + pic_init_qp_minus26; 299dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = prime * result + pic_init_qs_minus26; 300dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = prime * result + (pic_order_present_flag ? 1231 : 1237); 301dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = prime * result + pic_parameter_set_id; 302dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = prime * result 303dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu + (redundant_pic_cnt_present_flag ? 1231 : 1237); 304dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = prime * result + Arrays.hashCode(run_length_minus1); 305dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = prime * result + seq_parameter_set_id; 306dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = prime * result 307dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu + (slice_group_change_direction_flag ? 1231 : 1237); 308dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = prime * result + slice_group_change_rate_minus1; 309dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = prime * result + Arrays.hashCode(slice_group_id); 310dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = prime * result + slice_group_map_type; 311dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = prime * result + Arrays.hashCode(top_left); 312dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = prime * result + weighted_bipred_idc; 313dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu result = prime * result + (weighted_pred_flag ? 1231 : 1237); 314dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return result; 315dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 316dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 317dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu @Override 318dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public boolean equals(Object obj) { 319dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (this == obj) 320dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return true; 321dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (obj == null) 322dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 323dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (getClass() != obj.getClass()) 324dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 325dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu PictureParameterSet other = (PictureParameterSet) obj; 326dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (!Arrays.equals(bottom_right, other.bottom_right)) 327dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 328dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (chroma_qp_index_offset != other.chroma_qp_index_offset) 329dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 330dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (constrained_intra_pred_flag != other.constrained_intra_pred_flag) 331dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 332dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (deblocking_filter_control_present_flag != other.deblocking_filter_control_present_flag) 333dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 334dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (entropy_coding_mode_flag != other.entropy_coding_mode_flag) 335dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 336dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (extended == null) { 337dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (other.extended != null) 338dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 339dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } else if (!extended.equals(other.extended)) 340dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 341dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (num_ref_idx_l0_active_minus1 != other.num_ref_idx_l0_active_minus1) 342dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 343dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (num_ref_idx_l1_active_minus1 != other.num_ref_idx_l1_active_minus1) 344dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 345dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (num_slice_groups_minus1 != other.num_slice_groups_minus1) 346dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 347dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (pic_init_qp_minus26 != other.pic_init_qp_minus26) 348dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 349dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (pic_init_qs_minus26 != other.pic_init_qs_minus26) 350dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 351dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (pic_order_present_flag != other.pic_order_present_flag) 352dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 353dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (pic_parameter_set_id != other.pic_parameter_set_id) 354dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 355dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (redundant_pic_cnt_present_flag != other.redundant_pic_cnt_present_flag) 356dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 357dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (!Arrays.equals(run_length_minus1, other.run_length_minus1)) 358dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 359dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (seq_parameter_set_id != other.seq_parameter_set_id) 360dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 361dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (slice_group_change_direction_flag != other.slice_group_change_direction_flag) 362dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 363dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (slice_group_change_rate_minus1 != other.slice_group_change_rate_minus1) 364dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 365dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (!Arrays.equals(slice_group_id, other.slice_group_id)) 366dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 367dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (slice_group_map_type != other.slice_group_map_type) 368dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 369dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (!Arrays.equals(top_left, other.top_left)) 370dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 371dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (weighted_bipred_idc != other.weighted_bipred_idc) 372dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 373dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu if (weighted_pred_flag != other.weighted_pred_flag) 374dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return false; 375dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return true; 376dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 377dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu 378dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu @Override 379dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu public String toString() { 380dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu return "PictureParameterSet{" + 381dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu "\n entropy_coding_mode_flag=" + entropy_coding_mode_flag + 382dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ",\n num_ref_idx_l0_active_minus1=" + num_ref_idx_l0_active_minus1 + 383dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ",\n num_ref_idx_l1_active_minus1=" + num_ref_idx_l1_active_minus1 + 384dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ",\n slice_group_change_rate_minus1=" + slice_group_change_rate_minus1 + 385dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ",\n pic_parameter_set_id=" + pic_parameter_set_id + 386dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ",\n seq_parameter_set_id=" + seq_parameter_set_id + 387dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ",\n pic_order_present_flag=" + pic_order_present_flag + 388dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ",\n num_slice_groups_minus1=" + num_slice_groups_minus1 + 389dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ",\n slice_group_map_type=" + slice_group_map_type + 390dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ",\n weighted_pred_flag=" + weighted_pred_flag + 391dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ",\n weighted_bipred_idc=" + weighted_bipred_idc + 392dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ",\n pic_init_qp_minus26=" + pic_init_qp_minus26 + 393dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ",\n pic_init_qs_minus26=" + pic_init_qs_minus26 + 394dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ",\n chroma_qp_index_offset=" + chroma_qp_index_offset + 395dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ",\n deblocking_filter_control_present_flag=" + deblocking_filter_control_present_flag + 396dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ",\n constrained_intra_pred_flag=" + constrained_intra_pred_flag + 397dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ",\n redundant_pic_cnt_present_flag=" + redundant_pic_cnt_present_flag + 398dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ",\n top_left=" + top_left + 399dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ",\n bottom_right=" + bottom_right + 400dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ",\n run_length_minus1=" + run_length_minus1 + 401dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ",\n slice_group_change_direction_flag=" + slice_group_change_direction_flag + 402dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ",\n slice_group_id=" + slice_group_id + 403dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu ",\n extended=" + extended + 404dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu '}'; 405dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu } 406dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu} 407