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); } }
public MapManager(SeqParameterSet sps, PictureParameterSet pps) { this.sps = sps; this.pps = pps; this.mbToSliceGroupMap = buildMap(sps, pps); }