find_min_max.cpp revision 3306cfee3bf38ab207a0504e49c2d492bb73ffbf
1ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross/* ------------------------------------------------------------------
2ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * Copyright (C) 1998-2009 PacketVideo
3ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross *
4ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * Licensed under the Apache License, Version 2.0 (the "License");
5ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * you may not use this file except in compliance with the License.
6ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * You may obtain a copy of the License at
7ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross *
8ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross *      http://www.apache.org/licenses/LICENSE-2.0
9ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross *
10ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * Unless required by applicable law or agreed to in writing, software
11ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * distributed under the License is distributed on an "AS IS" BASIS,
12ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * express or implied.
14ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * See the License for the specific language governing permissions
15ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * and limitations under the License.
16ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross * -------------------------------------------------------------------
17ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross */
18ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross/*
19ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross------------------------------------------------------------------------------
20ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross INPUT AND OUTPUT DEFINITIONS
21ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
227a8bee7653c393d8da0e28668cb51d3ccab793e8Colin Cross Inputs:
23ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    input_ptr = pointer to the buffer containing values of type UChar
24ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross            in a 2D block of data.
25ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    min_ptr = pointer to the minimum value of type Int to be found in a
26ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross          square block of size BLKSIZE contained in 2D block of data.
27ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    max_ptr = pointer to the maximum value of type Int to be found in a
28ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross          square block of size BLKSIZE contained in 2D block of data.
29ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    incr = value of type Int representing the width of 2D block of data.
30ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
31ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross Local Stores/Buffers/Pointers Needed:
32ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    None
334b83b8acdcc4dad375adaf0f3b41fc41b22ee742Colin Cross
34ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross Global Stores/Buffers/Pointers Needed:
35ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    None
36ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
37ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross Outputs:
38ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    None
39ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
407a8bee7653c393d8da0e28668cb51d3ccab793e8Colin Cross Pointers and Buffers Modified:
41ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    min_ptr points to the found minimum value in the square block of
42ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    size BLKSIZE contained in 2D block of data.
43ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
44ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    max_ptr points to the found maximum value in the square block of
45ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    size BLKSIZE contained in 2D block of data.
46ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
47ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross Local Stores Modified:
48ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    None
49ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
50ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross Global Stores Modified:
51ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    None
52ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
53ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross------------------------------------------------------------------------------
54ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross FUNCTION DESCRIPTION
55ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
56ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross This function finds the maximum and the minimum values in a square block of
57ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross data of size BLKSIZE * BLKSIZE. The data is contained in the buffer which
58ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross represents a 2D block of data that is larger than BLKSIZE * BLKSIZE.
59ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross This is illustrated below.
607a8bee7653c393d8da0e28668cb51d3ccab793e8Colin Cross
61ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    mem loc x + 00h -> o o o o o o o o o o o o o o o o
62ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    mem loc x + 10h -> o o o o o X X X X X X X X o o o
63ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    mem loc x + 20h -> o o o o o X X X X X X X X o o o
64ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    mem loc x + 30h -> o o o o o X X X X X X X X o o o
65ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    mem loc x + 40h -> o o o o o X X X X X X X X o o o
66ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    mem loc x + 50h -> o o o o o X X X X X X X X o o o
67ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    mem loc x + 60h -> o o o o o X X X X X X X X o o o
68ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    mem loc x + 70h -> o o o o o X X X X X X X X o o o
697a8bee7653c393d8da0e28668cb51d3ccab793e8Colin Cross    mem loc x + 80h -> o o o o o X X X X X X X X o o o
70ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    mem loc x + 90h -> o o o o o o o o o o o o o o o o
71ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    mem loc x + A0h -> o o o o o o o o o o o o o o o o
727a8bee7653c393d8da0e28668cb51d3ccab793e8Colin Cross    mem loc x + B0h -> o o o o o o o o o o o o o o o o
73ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
74ec0a2e83dc66d67addeb90e83144187691852a3eColin CrossFor illustration purposes, the diagram assumes that BLKSIZE is equal to 8
757a8bee7653c393d8da0e28668cb51d3ccab793e8Colin Crossbut this is not a requirement. In this diagram, the buffer starts at
76ec0a2e83dc66d67addeb90e83144187691852a3eColin Crosslocation x but the input pointer, input_ptr, passed into this function
77ec0a2e83dc66d67addeb90e83144187691852a3eColin Crosswould be the first row of data to be searched which is at x + 15h. The
787a8bee7653c393d8da0e28668cb51d3ccab793e8Colin Crossvalue of incr passed onto this function represents the amount the input_ptr
79ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossneeds to be incremented to point to the next row of data.
807a8bee7653c393d8da0e28668cb51d3ccab793e8Colin Cross
817a8bee7653c393d8da0e28668cb51d3ccab793e8Colin CrossThis function compares each value in a row to the current maximum and
827a8bee7653c393d8da0e28668cb51d3ccab793e8Colin Crossminimum. After each row, input_ptr is incremented to point to the next row.
83ec0a2e83dc66d67addeb90e83144187691852a3eColin CrossThis is repeated until all rows have been processed. When the search is
847a8bee7653c393d8da0e28668cb51d3ccab793e8Colin Crosscomplete the location pointed to by min_ptr contains the minimum value
85ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossfound and the location pointed to by max_ptr contains the maximum value found.
867a8bee7653c393d8da0e28668cb51d3ccab793e8Colin Cross
87ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross------------------------------------------------------------------------------
887a8bee7653c393d8da0e28668cb51d3ccab793e8Colin Cross*/
89ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
90ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
91ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross/*----------------------------------------------------------------------------
92ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross; INCLUDES
93ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross----------------------------------------------------------------------------*/
94ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#include    "mp4dec_lib.h"
95ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#include    "post_proc.h"
96ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
978aef66d2125af8de7672a12895276802fcc1948fColin Cross/*----------------------------------------------------------------------------
98ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross; MACROS
998aef66d2125af8de7672a12895276802fcc1948fColin Cross; Define module specific macros here
100ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross----------------------------------------------------------------------------*/
101ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
102ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross/*----------------------------------------------------------------------------
103ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross; DEFINES
104ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross; Include all pre-processor statements here. Include conditional
1058aef66d2125af8de7672a12895276802fcc1948fColin Cross; compile variables also.
1068aef66d2125af8de7672a12895276802fcc1948fColin Cross----------------------------------------------------------------------------*/
107ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
108ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross/*----------------------------------------------------------------------------
1098aef66d2125af8de7672a12895276802fcc1948fColin Cross; LOCAL FUNCTION DEFINITIONS
1108aef66d2125af8de7672a12895276802fcc1948fColin Cross; Function Prototype declaration
111ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross----------------------------------------------------------------------------*/
112ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
113ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross/*----------------------------------------------------------------------------
114ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross; LOCAL STORE/BUFFER/POINTER DEFINITIONS
115ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross; Variable declaration - defined here and used outside this module
116ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross----------------------------------------------------------------------------*/
117ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
118ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross/*----------------------------------------------------------------------------
119ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross; EXTERNAL FUNCTION REFERENCES
120ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross; Declare functions defined elsewhere and referenced in this module
121ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross----------------------------------------------------------------------------*/
122ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
123ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross/*----------------------------------------------------------------------------
124ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
125ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross; Declare variables used in this module but defined elsewhere
126ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross----------------------------------------------------------------------------*/
127ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
128ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#ifdef PV_POSTPROC_ON
129ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross/*----------------------------------------------------------------------------
130ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross; FUNCTION CODE
131ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross----------------------------------------------------------------------------*/
132ec0a2e83dc66d67addeb90e83144187691852a3eColin Crossvoid  FindMaxMin(
133ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    uint8 *input_ptr,
134ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    int *min_ptr,
135ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    int *max_ptr,
136ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    int incr)
137ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross{
138ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    /*----------------------------------------------------------------------------
139ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    ; Define all local variables
140ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    ----------------------------------------------------------------------------*/
141ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    register    uint    i, j;
142ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    register    int min, max;
143ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
144ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    /*----------------------------------------------------------------------------
145ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    ; Function body here
146ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    ----------------------------------------------------------------------------*/
147ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    max = min = *input_ptr;
148ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    /*  incr = incr - BLKSIZE; */   /*  09/06/2001, already passed in as width - BLKSIZE */
149ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
150ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    for (i = BLKSIZE; i > 0; i--)
151ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    {
152ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross        for (j = BLKSIZE; j > 0; j--)
153ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross        {
154ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross            if (*input_ptr > max)
155ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross            {
156ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross                max = *input_ptr;
157ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross            }
158ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross            else if (*input_ptr < min)
159ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross            {
160ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross                min = *input_ptr;
161ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross            }
162ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross            input_ptr += 1;
163ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross        }
164ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
165ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross        /* set pointer to the beginning of the next row*/
166ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross        input_ptr += incr;
167ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    }
168ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross
169ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    *max_ptr = max;
170ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    *min_ptr = min;
171ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    /*----------------------------------------------------------------------------
172ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    ; Return nothing or data or data pointer
173ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    ----------------------------------------------------------------------------*/
174ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross    return;
175ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross}
176ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross#endif
177ec0a2e83dc66d67addeb90e83144187691852a3eColin Cross