summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/codecs/avc/common/src/fmo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'media/libstagefright/codecs/avc/common/src/fmo.cpp')
-rw-r--r--media/libstagefright/codecs/avc/common/src/fmo.cpp249
1 files changed, 0 insertions, 249 deletions
diff --git a/media/libstagefright/codecs/avc/common/src/fmo.cpp b/media/libstagefright/codecs/avc/common/src/fmo.cpp
deleted file mode 100644
index d66eba3..0000000
--- a/media/libstagefright/codecs/avc/common/src/fmo.cpp
+++ /dev/null
@@ -1,249 +0,0 @@
-/* ------------------------------------------------------------------
- * Copyright (C) 1998-2009 PacketVideo
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
- * express or implied.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- * -------------------------------------------------------------------
- */
-#include <string.h>
-
-#include "avclib_common.h"
-
-/* see subclause 8.2.2 Decoding process for macroblock to slice group map */
-OSCL_EXPORT_REF AVCStatus FMOInit(AVCCommonObj *video)
-{
- AVCPicParamSet *currPPS = video->currPicParams;
- int *MbToSliceGroupMap = video->MbToSliceGroupMap;
- int PicSizeInMapUnits = video->PicSizeInMapUnits;
- int PicWidthInMbs = video->PicWidthInMbs;
-
- if (currPPS->num_slice_groups_minus1 == 0)
- {
- memset(video->MbToSliceGroupMap, 0, video->PicSizeInMapUnits*sizeof(uint));
- }
- else
- {
- switch (currPPS->slice_group_map_type)
- {
- case 0:
- FmoGenerateType0MapUnitMap(MbToSliceGroupMap, currPPS->run_length_minus1, currPPS->num_slice_groups_minus1, PicSizeInMapUnits);
- break;
- case 1:
- FmoGenerateType1MapUnitMap(MbToSliceGroupMap, PicWidthInMbs, currPPS->num_slice_groups_minus1, PicSizeInMapUnits);
- break;
- case 2:
- FmoGenerateType2MapUnitMap(currPPS, MbToSliceGroupMap, PicWidthInMbs, currPPS->num_slice_groups_minus1, PicSizeInMapUnits);
- break;
- case 3:
- FmoGenerateType3MapUnitMap(video, currPPS, MbToSliceGroupMap, PicWidthInMbs);
- break;
- case 4:
- FmoGenerateType4MapUnitMap(MbToSliceGroupMap, video->MapUnitsInSliceGroup0, currPPS->slice_group_change_direction_flag, PicSizeInMapUnits);
- break;
- case 5:
- FmoGenerateType5MapUnitMap(MbToSliceGroupMap, video, currPPS->slice_group_change_direction_flag, PicSizeInMapUnits);
- break;
- case 6:
- FmoGenerateType6MapUnitMap(MbToSliceGroupMap, (int*)currPPS->slice_group_id, PicSizeInMapUnits);
- break;
- default:
- return AVC_FAIL; /* out of range, shouldn't come this far */
- }
- }
-
- return AVC_SUCCESS;
-}
-
-/* see subclause 8.2.2.1 interleaved slice group map type*/
-void FmoGenerateType0MapUnitMap(int *mapUnitToSliceGroupMap, uint *run_length_minus1, uint num_slice_groups_minus1, uint PicSizeInMapUnits)
-{
- uint iGroup, j;
- uint i = 0;
- do
- {
- for (iGroup = 0;
- (iGroup <= num_slice_groups_minus1) && (i < PicSizeInMapUnits);
- i += run_length_minus1[iGroup++] + 1)
- {
- for (j = 0; j <= run_length_minus1[ iGroup ] && i + j < PicSizeInMapUnits; j++)
- mapUnitToSliceGroupMap[i+j] = iGroup;
- }
- }
- while (i < PicSizeInMapUnits);
-}
-
-/* see subclause 8.2.2.2 dispersed slice group map type*/
-void FmoGenerateType1MapUnitMap(int *mapUnitToSliceGroupMap, int PicWidthInMbs, uint num_slice_groups_minus1, uint PicSizeInMapUnits)
-{
- uint i;
- for (i = 0; i < PicSizeInMapUnits; i++)
- {
- mapUnitToSliceGroupMap[i] = ((i % PicWidthInMbs) + (((i / PicWidthInMbs) * (num_slice_groups_minus1 + 1)) / 2))
- % (num_slice_groups_minus1 + 1);
- }
-}
-
-/* see subclause 8.2.2.3 foreground with left-over slice group map type */
-void FmoGenerateType2MapUnitMap(AVCPicParamSet *pps, int *mapUnitToSliceGroupMap, int PicWidthInMbs,
- uint num_slice_groups_minus1, uint PicSizeInMapUnits)
-{
- int iGroup;
- uint i, x, y;
- uint yTopLeft, xTopLeft, yBottomRight, xBottomRight;
-
- for (i = 0; i < PicSizeInMapUnits; i++)
- {
- mapUnitToSliceGroupMap[ i ] = num_slice_groups_minus1;
- }
-
- for (iGroup = num_slice_groups_minus1 - 1 ; iGroup >= 0; iGroup--)
- {
- yTopLeft = pps->top_left[ iGroup ] / PicWidthInMbs;
- xTopLeft = pps->top_left[ iGroup ] % PicWidthInMbs;
- yBottomRight = pps->bottom_right[ iGroup ] / PicWidthInMbs;
- xBottomRight = pps->bottom_right[ iGroup ] % PicWidthInMbs;
- for (y = yTopLeft; y <= yBottomRight; y++)
- {
- for (x = xTopLeft; x <= xBottomRight; x++)
- {
- mapUnitToSliceGroupMap[ y * PicWidthInMbs + x ] = iGroup;
- }
- }
- }
-}
-
-
-/* see subclause 8.2.2.4 box-out slice group map type */
-/* follow the text rather than the JM, it's quite different. */
-void FmoGenerateType3MapUnitMap(AVCCommonObj *video, AVCPicParamSet* pps, int *mapUnitToSliceGroupMap,
- int PicWidthInMbs)
-{
- uint i, k;
- int leftBound, topBound, rightBound, bottomBound;
- int x, y, xDir, yDir;
- int mapUnitVacant;
- uint PicSizeInMapUnits = video->PicSizeInMapUnits;
- uint MapUnitsInSliceGroup0 = video->MapUnitsInSliceGroup0;
-
- for (i = 0; i < PicSizeInMapUnits; i++)
- {
- mapUnitToSliceGroupMap[ i ] = 1;
- }
-
- x = (PicWidthInMbs - pps->slice_group_change_direction_flag) / 2;
- y = (video->PicHeightInMapUnits - pps->slice_group_change_direction_flag) / 2;
-
- leftBound = x;
- topBound = y;
- rightBound = x;
- bottomBound = y;
-
- xDir = pps->slice_group_change_direction_flag - 1;
- yDir = pps->slice_group_change_direction_flag;
-
- for (k = 0; k < MapUnitsInSliceGroup0; k += mapUnitVacant)
- {
- mapUnitVacant = (mapUnitToSliceGroupMap[ y * PicWidthInMbs + x ] == 1);
- if (mapUnitVacant)
- {
- mapUnitToSliceGroupMap[ y * PicWidthInMbs + x ] = 0;
- }
-
- if (xDir == -1 && x == leftBound)
- {
- leftBound = AVC_MAX(leftBound - 1, 0);
- x = leftBound;
- xDir = 0;
- yDir = 2 * pps->slice_group_change_direction_flag - 1;
- }
- else if (xDir == 1 && x == rightBound)
- {
- rightBound = AVC_MIN(rightBound + 1, (int)PicWidthInMbs - 1);
- x = rightBound;
- xDir = 0;
- yDir = 1 - 2 * pps->slice_group_change_direction_flag;
- }
- else if (yDir == -1 && y == topBound)
- {
- topBound = AVC_MAX(topBound - 1, 0);
- y = topBound;
- xDir = 1 - 2 * pps->slice_group_change_direction_flag;
- yDir = 0;
- }
- else if (yDir == 1 && y == bottomBound)
- {
- bottomBound = AVC_MIN(bottomBound + 1, (int)video->PicHeightInMapUnits - 1);
- y = bottomBound;
- xDir = 2 * pps->slice_group_change_direction_flag - 1;
- yDir = 0;
- }
- else
- {
- x = x + xDir;
- y = y + yDir;
- }
- }
-}
-
-/* see subclause 8.2.2.5 raster scan slice group map types */
-void FmoGenerateType4MapUnitMap(int *mapUnitToSliceGroupMap, int MapUnitsInSliceGroup0, int slice_group_change_direction_flag, uint PicSizeInMapUnits)
-{
- uint sizeOfUpperLeftGroup = slice_group_change_direction_flag ? (PicSizeInMapUnits - MapUnitsInSliceGroup0) : MapUnitsInSliceGroup0;
-
- uint i;
-
- for (i = 0; i < PicSizeInMapUnits; i++)
- if (i < sizeOfUpperLeftGroup)
- mapUnitToSliceGroupMap[ i ] = 1 - slice_group_change_direction_flag;
- else
- mapUnitToSliceGroupMap[ i ] = slice_group_change_direction_flag;
-
-}
-
-/* see subclause 8.2.2.6, wipe slice group map type. */
-void FmoGenerateType5MapUnitMap(int *mapUnitToSliceGroupMap, AVCCommonObj *video,
- int slice_group_change_direction_flag, uint PicSizeInMapUnits)
-{
- int PicWidthInMbs = video->PicWidthInMbs;
- int PicHeightInMapUnits = video->PicHeightInMapUnits;
- int MapUnitsInSliceGroup0 = video->MapUnitsInSliceGroup0;
- int sizeOfUpperLeftGroup = slice_group_change_direction_flag ? (PicSizeInMapUnits - MapUnitsInSliceGroup0) : MapUnitsInSliceGroup0;
- int i, j, k = 0;
-
- for (j = 0; j < PicWidthInMbs; j++)
- {
- for (i = 0; i < PicHeightInMapUnits; i++)
- {
- if (k++ < sizeOfUpperLeftGroup)
- {
- mapUnitToSliceGroupMap[ i * PicWidthInMbs + j ] = 1 - slice_group_change_direction_flag;
- }
- else
- {
- mapUnitToSliceGroupMap[ i * PicWidthInMbs + j ] = slice_group_change_direction_flag;
- }
- }
- }
-}
-
-/* see subclause 8.2.2.7, explicit slice group map */
-void FmoGenerateType6MapUnitMap(int *mapUnitToSliceGroupMap, int *slice_group_id, uint PicSizeInMapUnits)
-{
- uint i;
- for (i = 0; i < PicSizeInMapUnits; i++)
- {
- mapUnitToSliceGroupMap[i] = slice_group_id[i];
- }
-}
-
-