Example #1
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public void write(com.googlecode.mp4parser.h264.write.CAVLCWriter out) throws java.io.IOException
        public virtual void write(CAVLCWriter @out)
        {
            if (useDefaultScalingMatrixFlag)
            {
                @out.writeSE(0, "SPS: ");
                return;
            }

            int lastScale = 8;
            int nextScale = 8;

            for (int j = 0; j < scalingList.Length; j++)
            {
                if (nextScale != 0)
                {
                    int deltaScale = scalingList[j] - lastScale - 256;
                    @out.writeSE(deltaScale, "SPS: ");
                }
                lastScale = scalingList[j];
            }
        }
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public void write(java.io.OutputStream out) throws java.io.IOException
        public void write(Stream @out)
        {
            CAVLCWriter writer = new CAVLCWriter(@out);

            writer.writeUE(pic_parameter_set_id, "PPS: pic_parameter_set_id");
            writer.writeUE(seq_parameter_set_id, "PPS: seq_parameter_set_id");
            writer.writeBool(entropy_coding_mode_flag, "PPS: entropy_coding_mode_flag");
            writer.writeBool(pic_order_present_flag, "PPS: pic_order_present_flag");
            writer.writeUE(num_slice_groups_minus1, "PPS: num_slice_groups_minus1");
            if (num_slice_groups_minus1 > 0)
            {
                writer.writeUE(slice_group_map_type, "PPS: slice_group_map_type");
                int[] top_left          = new int[1];
                int[] bottom_right      = new int[1];
                int[] run_length_minus1 = new int[1];
                if (slice_group_map_type == 0)
                {
                    for (int iGroup = 0; iGroup <= num_slice_groups_minus1; iGroup++)
                    {
                        writer.writeUE(run_length_minus1[iGroup], "PPS: ");
                    }
                }
                else if (slice_group_map_type == 2)
                {
                    for (int iGroup = 0; iGroup < num_slice_groups_minus1; iGroup++)
                    {
                        writer.writeUE(top_left[iGroup], "PPS: ");
                        writer.writeUE(bottom_right[iGroup], "PPS: ");
                    }
                }
                else if (slice_group_map_type == 3 || slice_group_map_type == 4 || slice_group_map_type == 5)
                {
                    writer.writeBool(slice_group_change_direction_flag, "PPS: slice_group_change_direction_flag");
                    writer.writeUE(slice_group_change_rate_minus1, "PPS: slice_group_change_rate_minus1");
                }
                else if (slice_group_map_type == 6)
                {
                    int NumberBitsPerSliceGroupId;
                    if (num_slice_groups_minus1 + 1 > 4)
                    {
                        NumberBitsPerSliceGroupId = 3;
                    }
                    else if (num_slice_groups_minus1 + 1 > 2)
                    {
                        NumberBitsPerSliceGroupId = 2;
                    }
                    else
                    {
                        NumberBitsPerSliceGroupId = 1;
                    }
                    writer.writeUE(slice_group_id.Length, "PPS: ");
                    for (int i = 0; i <= slice_group_id.Length; i++)
                    {
                        writer.writeU(slice_group_id[i], NumberBitsPerSliceGroupId);
                    }
                }
            }
            writer.writeUE(num_ref_idx_l0_active_minus1, "PPS: num_ref_idx_l0_active_minus1");
            writer.writeUE(num_ref_idx_l1_active_minus1, "PPS: num_ref_idx_l1_active_minus1");
            writer.writeBool(weighted_pred_flag, "PPS: weighted_pred_flag");
            writer.writeNBit(weighted_bipred_idc, 2, "PPS: weighted_bipred_idc");
            writer.writeSE(pic_init_qp_minus26, "PPS: pic_init_qp_minus26");
            writer.writeSE(pic_init_qs_minus26, "PPS: pic_init_qs_minus26");
            writer.writeSE(chroma_qp_index_offset, "PPS: chroma_qp_index_offset");
            writer.writeBool(deblocking_filter_control_present_flag, "PPS: deblocking_filter_control_present_flag");
            writer.writeBool(constrained_intra_pred_flag, "PPS: constrained_intra_pred_flag");
            writer.writeBool(redundant_pic_cnt_present_flag, "PPS: redundant_pic_cnt_present_flag");
            if (extended != null)
            {
                writer.writeBool(extended.transform_8x8_mode_flag, "PPS: transform_8x8_mode_flag");
                writer.writeBool(extended.scalindMatrix != null, "PPS: scalindMatrix");
                if (extended.scalindMatrix != null)
                {
                    for (int i = 0; i < 6 + 2 * (extended.transform_8x8_mode_flag ? 1 : 0); i++)
                    {
                        if (i < 6)
                        {
                            writer.writeBool(extended.scalindMatrix.ScalingList4x4[i] != null, "PPS: ");
                            if (extended.scalindMatrix.ScalingList4x4[i] != null)
                            {
                                extended.scalindMatrix.ScalingList4x4[i].write(writer);
                            }
                        }
                        else
                        {
                            writer.writeBool(extended.scalindMatrix.ScalingList8x8[i - 6] != null, "PPS: ");
                            if (extended.scalindMatrix.ScalingList8x8[i - 6] != null)
                            {
                                extended.scalindMatrix.ScalingList8x8[i - 6].write(writer);
                            }
                        }
                    }
                }
                writer.writeSE(extended.second_chroma_qp_index_offset, "PPS: ");
            }

            writer.writeTrailingBits();
        }