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