Exemple #1
0
        private MBToSliceGroupMap buildMap(SeqParameterSet sps, PictureParameterSet pps)
        {
            int numGroups = pps.num_slice_groups_minus1 + 1;

            if (numGroups > 1)
            {
                int[] map;
                int   picWidthInMbs  = sps.pic_width_in_mbs_minus1 + 1;
                int   picHeightInMbs = Utility.getPicHeightInMbs(sps);

                if (pps.slice_group_map_type == 0)
                {
                    int[] runLength = new int[numGroups];
                    for (int i = 0; i < numGroups; i++)
                    {
                        runLength[i] = pps.run_length_minus1[i] + 1;
                    }
                    map = SliceGroupMapBuilder.buildInterleavedMap(picWidthInMbs, picHeightInMbs, runLength);
                }
                else if (pps.slice_group_map_type == 1)
                {
                    map = SliceGroupMapBuilder.buildDispersedMap(picWidthInMbs, picHeightInMbs, numGroups);
                }
                else if (pps.slice_group_map_type == 2)
                {
                    map = SliceGroupMapBuilder.buildForegroundMap(picWidthInMbs, picHeightInMbs, numGroups, pps.top_left,
                                                                  pps.bottom_right);
                }
                else if (pps.slice_group_map_type >= 3 && pps.slice_group_map_type <= 5)
                {
                    return(null);
                }
                else if (pps.slice_group_map_type == 6)
                {
                    map = pps.slice_group_id;
                }
                else
                {
                    throw new Exception("Unsupported slice group map type");
                }

                return(buildMapIndices(map, numGroups));
            }

            return(null);
        }
    //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
    //ORIGINAL LINE: public SliceHeader(InputStream is, com.googlecode.mp4parser.h264.model.SeqParameterSet sps, com.googlecode.mp4parser.h264.model.PictureParameterSet pps, boolean IdrPicFlag) throws IOException
    public SliceHeader(Stream @is, SeqParameterSet sps, PictureParameterSet pps, bool IdrPicFlag)
    {
        @is.ReadByte();
        CAVLCReader reader = new CAVLCReader(@is);

        first_mb_in_slice = reader.readUE("SliceHeader: first_mb_in_slice");
        switch (reader.readUE("SliceHeader: slice_type"))
        {
        case 0:
        case 5:
            slice_type = SliceType.P;
            break;

        case 1:
        case 6:
            slice_type = SliceType.B;
            break;

        case 2:
        case 7:
            slice_type = SliceType.I;
            break;

        case 3:
        case 8:
            slice_type = SliceType.SP;
            break;

        case 4:
        case 9:
            slice_type = SliceType.SI;
            break;
        }
        pic_parameter_set_id = reader.readUE("SliceHeader: pic_parameter_set_id");
        if (sps.residual_color_transform_flag)
        {
            colour_plane_id = reader.readU(2, "SliceHeader: colour_plane_id");
        }
        frame_num = reader.readU(sps.log2_max_frame_num_minus4 + 4, "SliceHeader: frame_num");

        if (!sps.frame_mbs_only_flag)
        {
            field_pic_flag = reader.readBool("SliceHeader: field_pic_flag");
            if (field_pic_flag)
            {
                bottom_field_flag = reader.readBool("SliceHeader: bottom_field_flag");
            }
        }
        if (IdrPicFlag)
        {
            idr_pic_id = reader.readUE("SliceHeader: idr_pic_id");
            if (sps.pic_order_cnt_type == 0)
            {
                pic_order_cnt_lsb = reader.readU(sps.log2_max_pic_order_cnt_lsb_minus4 + 4, "SliceHeader: pic_order_cnt_lsb");
                if (pps.pic_order_present_flag && !field_pic_flag)
                {
                    delta_pic_order_cnt_bottom = reader.readSE("SliceHeader: delta_pic_order_cnt_bottom");
                }
            }
        }
    }
Exemple #3
0
 public MapManager(SeqParameterSet sps, PictureParameterSet pps)
 {
     this.sps = sps;
     this.pps = pps;
     this.mbToSliceGroupMap = buildMap(sps, pps);
 }