Exemplo n.º 1
0
        private void updateMap(SliceHeader sh)
        {
            int mapType   = pps.slice_group_map_type;
            int numGroups = pps.num_slice_groups_minus1 + 1;

            if (numGroups > 1 && mapType >= 3 && mapType <= 5 &&
                (sh.slice_group_change_cycle != prevSliceGroupChangeCycle || mbToSliceGroupMap == null))
            {
                prevSliceGroupChangeCycle = sh.slice_group_change_cycle;

                int picWidthInMbs         = sps.pic_width_in_mbs_minus1 + 1;
                int picHeightInMbs        = Utility.getPicHeightInMbs(sps);
                int picSizeInMapUnits     = picWidthInMbs * picHeightInMbs;
                int mapUnitsInSliceGroup0 = sh.slice_group_change_cycle * (pps.slice_group_change_rate_minus1 + 1);
                mapUnitsInSliceGroup0 = mapUnitsInSliceGroup0 > picSizeInMapUnits ? picSizeInMapUnits
                        : mapUnitsInSliceGroup0;

                int sizeOfUpperLeftGroup = (pps.slice_group_change_direction_flag ? (picSizeInMapUnits - mapUnitsInSliceGroup0)
                        : mapUnitsInSliceGroup0);

                int[] map;
                if (mapType == 3)
                {
                    map = SliceGroupMapBuilder.buildBoxOutMap(picWidthInMbs, picHeightInMbs,
                                                              pps.slice_group_change_direction_flag, mapUnitsInSliceGroup0);
                }
                else if (mapType == 4)
                {
                    map = SliceGroupMapBuilder.buildRasterScanMap(picWidthInMbs, picHeightInMbs, sizeOfUpperLeftGroup,
                                                                  pps.slice_group_change_direction_flag);
                }
                else
                {
                    map = SliceGroupMapBuilder.buildWipeMap(picWidthInMbs, picHeightInMbs, sizeOfUpperLeftGroup,
                                                            pps.slice_group_change_direction_flag);
                }

                this.mbToSliceGroupMap = buildMapIndices(map, numGroups);
            }
        }
Exemplo n.º 2
0
 public MapManager(SeqParameterSet sps, PictureParameterSet pps)
 {
     this.sps = sps;
     this.pps = pps;
     this.mbToSliceGroupMap = buildMap(sps, pps);
 }