13306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/* ------------------------------------------------------------------
23306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * Copyright (C) 1998-2009 PacketVideo
33306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong *
43306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * Licensed under the Apache License, Version 2.0 (the "License");
53306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * you may not use this file except in compliance with the License.
63306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * You may obtain a copy of the License at
73306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong *
83306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong *      http://www.apache.org/licenses/LICENSE-2.0
93306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong *
103306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * Unless required by applicable law or agreed to in writing, software
113306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * distributed under the License is distributed on an "AS IS" BASIS,
123306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
133306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * express or implied.
143306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * See the License for the specific language governing permissions
153306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * and limitations under the License.
163306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong * -------------------------------------------------------------------
173306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong */
183306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*
193306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong------------------------------------------------------------------------------
203306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong INPUT AND OUTPUT DEFINITIONS
213306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
223306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Inputs:
233306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    input_ptr = pointer to the buffer containing values of type UChar
243306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            in a 2D block of data.
253306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    min_ptr = pointer to the minimum value of type Int to be found in a
263306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong          square block of size BLKSIZE contained in 2D block of data.
273306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    max_ptr = pointer to the maximum value of type Int to be found in a
283306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong          square block of size BLKSIZE contained in 2D block of data.
293306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    incr = value of type Int representing the width of 2D block of data.
303306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
313306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Local Stores/Buffers/Pointers Needed:
323306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    None
333306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
343306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Global Stores/Buffers/Pointers Needed:
353306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    None
363306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
373306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Outputs:
383306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    None
393306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
403306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Pointers and Buffers Modified:
413306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    min_ptr points to the found minimum value in the square block of
423306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    size BLKSIZE contained in 2D block of data.
433306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
443306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    max_ptr points to the found maximum value in the square block of
453306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    size BLKSIZE contained in 2D block of data.
463306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
473306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Local Stores Modified:
483306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    None
493306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
503306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Global Stores Modified:
513306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    None
523306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
533306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong------------------------------------------------------------------------------
543306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong FUNCTION DESCRIPTION
553306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
563306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong This function finds the maximum and the minimum values in a square block of
573306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong data of size BLKSIZE * BLKSIZE. The data is contained in the buffer which
583306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong represents a 2D block of data that is larger than BLKSIZE * BLKSIZE.
593306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong This is illustrated below.
603306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
613306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    mem loc x + 00h -> o o o o o o o o o o o o o o o o
623306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    mem loc x + 10h -> o o o o o X X X X X X X X o o o
633306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    mem loc x + 20h -> o o o o o X X X X X X X X o o o
643306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    mem loc x + 30h -> o o o o o X X X X X X X X o o o
653306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    mem loc x + 40h -> o o o o o X X X X X X X X o o o
663306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    mem loc x + 50h -> o o o o o X X X X X X X X o o o
673306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    mem loc x + 60h -> o o o o o X X X X X X X X o o o
683306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    mem loc x + 70h -> o o o o o X X X X X X X X o o o
693306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    mem loc x + 80h -> o o o o o X X X X X X X X o o o
703306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    mem loc x + 90h -> o o o o o o o o o o o o o o o o
713306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    mem loc x + A0h -> o o o o o o o o o o o o o o o o
723306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    mem loc x + B0h -> o o o o o o o o o o o o o o o o
733306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
743306cfee3bf38ab207a0504e49c2d492bb73ffbfJames DongFor illustration purposes, the diagram assumes that BLKSIZE is equal to 8
753306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongbut this is not a requirement. In this diagram, the buffer starts at
763306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Donglocation x but the input pointer, input_ptr, passed into this function
773306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongwould be the first row of data to be searched which is at x + 15h. The
783306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongvalue of incr passed onto this function represents the amount the input_ptr
793306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongneeds to be incremented to point to the next row of data.
803306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
813306cfee3bf38ab207a0504e49c2d492bb73ffbfJames DongThis function compares each value in a row to the current maximum and
823306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongminimum. After each row, input_ptr is incremented to point to the next row.
833306cfee3bf38ab207a0504e49c2d492bb73ffbfJames DongThis is repeated until all rows have been processed. When the search is
843306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongcomplete the location pointed to by min_ptr contains the minimum value
853306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongfound and the location pointed to by max_ptr contains the maximum value found.
863306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
873306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong------------------------------------------------------------------------------
883306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong*/
893306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
903306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
913306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
923306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; INCLUDES
933306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
943306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#include    "mp4dec_lib.h"
953306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#include    "post_proc.h"
963306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
973306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
983306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; MACROS
993306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; Define module specific macros here
1003306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
1013306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1023306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
1033306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; DEFINES
1043306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; Include all pre-processor statements here. Include conditional
1053306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; compile variables also.
1063306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
1073306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1083306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
1093306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; LOCAL FUNCTION DEFINITIONS
1103306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; Function Prototype declaration
1113306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
1123306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1133306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
1143306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; LOCAL STORE/BUFFER/POINTER DEFINITIONS
1153306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; Variable declaration - defined here and used outside this module
1163306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
1173306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1183306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
1193306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; EXTERNAL FUNCTION REFERENCES
1203306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; Declare functions defined elsewhere and referenced in this module
1213306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
1223306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1233306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
1243306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
1253306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; Declare variables used in this module but defined elsewhere
1263306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
1273306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1283306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#ifdef PV_POSTPROC_ON
1293306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
1303306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; FUNCTION CODE
1313306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
1323306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongvoid  FindMaxMin(
1333306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    uint8 *input_ptr,
1343306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    int *min_ptr,
1353306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    int *max_ptr,
1363306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    int incr)
1373306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{
1383306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    /*----------------------------------------------------------------------------
1393306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ; Define all local variables
1403306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ----------------------------------------------------------------------------*/
1413306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    register    uint    i, j;
1423306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    register    int min, max;
1433306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1443306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    /*----------------------------------------------------------------------------
1453306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ; Function body here
1463306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ----------------------------------------------------------------------------*/
1473306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    max = min = *input_ptr;
1483306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    /*  incr = incr - BLKSIZE; */   /*  09/06/2001, already passed in as width - BLKSIZE */
1493306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1503306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    for (i = BLKSIZE; i > 0; i--)
1513306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    {
1523306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        for (j = BLKSIZE; j > 0; j--)
1533306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        {
1543306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            if (*input_ptr > max)
1553306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            {
1563306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                max = *input_ptr;
1573306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            }
1583306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            else if (*input_ptr < min)
1593306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            {
1603306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                min = *input_ptr;
1613306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            }
1623306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong            input_ptr += 1;
1633306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        }
1643306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1653306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        /* set pointer to the beginning of the next row*/
1663306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        input_ptr += incr;
1673306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    }
1683306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1693306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    *max_ptr = max;
1703306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    *min_ptr = min;
1713306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    /*----------------------------------------------------------------------------
1723306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ; Return nothing or data or data pointer
1733306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ----------------------------------------------------------------------------*/
1743306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    return;
1753306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong}
1763306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#endif
177