package org.jcodec.codecs.h264; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import org.jcodec.codecs.h264.io.model.SeqParameterSet; import org.jcodec.codecs.h264.io.model.VUIParameters; import org.jcodec.common.io.IOUtils; import org.jcodec.common.io.NIOUtils; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import java.io.BufferedInputStream; import java.io.File; import java.nio.ByteBuffer; public class SPSReadTest { private SeqParameterSet sps1; @Before public void setUp() throws Exception { sps1 = new SeqParameterSet(); sps1.profile_idc = 66; sps1.constraint_set_0_flag = false; sps1.constraint_set_1_flag = false; sps1.constraint_set_2_flag = false; sps1.constraint_set_3_flag = false; sps1.constraint_set_4_flag = false; sps1.constraint_set_5_flag = false; sps1.level_idc = 30; sps1.seq_parameter_set_id = 0; sps1.log2_max_frame_num_minus4 = 5; sps1.pic_order_cnt_type = 0; sps1.log2_max_pic_order_cnt_lsb_minus4 = 6; sps1.num_ref_frames = 1; sps1.gaps_in_frame_num_value_allowed_flag = false; sps1.pic_width_in_mbs_minus1 = 31; sps1.pic_height_in_map_units_minus1 = 23; sps1.frame_mbs_only_flag = true; sps1.direct_8x8_inference_flag = true; sps1.frame_cropping_flag = false; sps1.vuiParams = new VUIParameters(); sps1.vuiParams.aspect_ratio_info_present_flag = false; sps1.vuiParams.overscan_info_present_flag = false; sps1.vuiParams.video_signal_type_present_flag = false; sps1.vuiParams.chroma_loc_info_present_flag = false; sps1.vuiParams.timing_info_present_flag = true; sps1.vuiParams.num_units_in_tick = 1000; sps1.vuiParams.time_scale = 50000; sps1.vuiParams.fixed_frame_rate_flag = true; sps1.vuiParams.pic_struct_present_flag = false; sps1.vuiParams.bitstreamRestriction = new VUIParameters.BitstreamRestriction(); sps1.vuiParams.bitstreamRestriction.motion_vectors_over_pic_boundaries_flag = true; sps1.vuiParams.bitstreamRestriction.max_bytes_per_pic_denom = 0; sps1.vuiParams.bitstreamRestriction.max_bits_per_mb_denom = 0; sps1.vuiParams.bitstreamRestriction.log2_max_mv_length_horizontal = 10; sps1.vuiParams.bitstreamRestriction.log2_max_mv_length_vertical = 10; sps1.vuiParams.bitstreamRestriction.num_reorder_frames = 0; sps1.vuiParams.bitstreamRestriction.max_dec_frame_buffering = 1; } @Test public void testRead() throws Exception { String path = "src/test/resources/h264/sps/sps1.dat"; BufferedInputStream is = null; try { SeqParameterSet sps = SeqParameterSet.read(NIOUtils.fetchFromFile(new File(path))); assertEquals(sps.profile_idc, 66); assertEquals(sps.constraint_set_0_flag, false); assertEquals(sps.constraint_set_1_flag, false); assertEquals(sps.constraint_set_2_flag, false); assertEquals(sps.constraint_set_3_flag, false); assertEquals(sps.constraint_set_4_flag, false); assertEquals(sps.constraint_set_5_flag, false); assertEquals(sps.level_idc, 30); assertEquals(sps.seq_parameter_set_id, 0); assertEquals(sps.log2_max_frame_num_minus4, 5); assertEquals(sps.pic_order_cnt_type, 0); assertEquals(sps.log2_max_pic_order_cnt_lsb_minus4, 6); assertEquals(sps.num_ref_frames, 1); assertEquals(sps.gaps_in_frame_num_value_allowed_flag, false); assertEquals(sps.pic_width_in_mbs_minus1, 31); assertEquals(sps.pic_height_in_map_units_minus1, 23); assertEquals(sps.frame_mbs_only_flag, true); assertEquals(sps.direct_8x8_inference_flag, true); assertEquals(sps.frame_cropping_flag, false); assertNotNull(sps.vuiParams); assertEquals(sps.vuiParams.aspect_ratio_info_present_flag, false); assertEquals(sps.vuiParams.overscan_info_present_flag, false); assertEquals(sps.vuiParams.video_signal_type_present_flag, false); assertEquals(sps.vuiParams.chroma_loc_info_present_flag, false); assertEquals(sps.vuiParams.timing_info_present_flag, true); assertEquals(sps.vuiParams.num_units_in_tick, 1000); assertEquals(sps.vuiParams.time_scale, 50000); assertEquals(sps.vuiParams.fixed_frame_rate_flag, true); assertNull(sps.vuiParams.nalHRDParams); assertNull(sps.vuiParams.vclHRDParams); assertEquals(sps.vuiParams.pic_struct_present_flag, false); assertNotNull(sps.vuiParams.bitstreamRestriction); assertEquals(sps.vuiParams.bitstreamRestriction.motion_vectors_over_pic_boundaries_flag, true); assertEquals(sps.vuiParams.bitstreamRestriction.max_bytes_per_pic_denom, 0); assertEquals(sps.vuiParams.bitstreamRestriction.max_bits_per_mb_denom, 0); assertEquals(sps.vuiParams.bitstreamRestriction.log2_max_mv_length_horizontal, 10); assertEquals(sps.vuiParams.bitstreamRestriction.log2_max_mv_length_vertical, 10); assertEquals(sps.vuiParams.bitstreamRestriction.num_reorder_frames, 0); assertEquals(sps.vuiParams.bitstreamRestriction.max_dec_frame_buffering, 1); } finally { IOUtils.closeQuietly(is); } } @Test public void testWrite() throws Exception { String path = "src/test/resources/h264/sps/sps1.dat"; ByteBuffer bb = ByteBuffer.allocate(1024); sps1.write(bb); bb.flip(); ByteBuffer expect = NIOUtils.fetchFromFile(new File(path)); Assert.assertArrayEquals(NIOUtils.toArray(bb), NIOUtils.toArray(expect)); } }