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