| /* ------------------------------------------------------------------ |
| * 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. |
| * ------------------------------------------------------------------- |
| */ |
| /* |
| ------------------------------------------------------------------------------ |
| INPUT AND OUTPUT DEFINITIONS |
| |
| Inputs: |
| input_ptr = pointer to the buffer containing values of type UChar |
| in a 2D block of data. |
| min_ptr = pointer to the minimum value of type Int to be found in a |
| square block of size BLKSIZE contained in 2D block of data. |
| max_ptr = pointer to the maximum value of type Int to be found in a |
| square block of size BLKSIZE contained in 2D block of data. |
| incr = value of type Int representing the width of 2D block of data. |
| |
| Local Stores/Buffers/Pointers Needed: |
| None |
| |
| Global Stores/Buffers/Pointers Needed: |
| None |
| |
| Outputs: |
| None |
| |
| Pointers and Buffers Modified: |
| min_ptr points to the found minimum value in the square block of |
| size BLKSIZE contained in 2D block of data. |
| |
| max_ptr points to the found maximum value in the square block of |
| size BLKSIZE contained in 2D block of data. |
| |
| Local Stores Modified: |
| None |
| |
| Global Stores Modified: |
| None |
| |
| ------------------------------------------------------------------------------ |
| FUNCTION DESCRIPTION |
| |
| This function finds the maximum and the minimum values in a square block of |
| data of size BLKSIZE * BLKSIZE. The data is contained in the buffer which |
| represents a 2D block of data that is larger than BLKSIZE * BLKSIZE. |
| This is illustrated below. |
| |
| mem loc x + 00h -> o o o o o o o o o o o o o o o o |
| mem loc x + 10h -> o o o o o X X X X X X X X o o o |
| mem loc x + 20h -> o o o o o X X X X X X X X o o o |
| mem loc x + 30h -> o o o o o X X X X X X X X o o o |
| mem loc x + 40h -> o o o o o X X X X X X X X o o o |
| mem loc x + 50h -> o o o o o X X X X X X X X o o o |
| mem loc x + 60h -> o o o o o X X X X X X X X o o o |
| mem loc x + 70h -> o o o o o X X X X X X X X o o o |
| mem loc x + 80h -> o o o o o X X X X X X X X o o o |
| mem loc x + 90h -> o o o o o o o o o o o o o o o o |
| mem loc x + A0h -> o o o o o o o o o o o o o o o o |
| mem loc x + B0h -> o o o o o o o o o o o o o o o o |
| |
| For illustration purposes, the diagram assumes that BLKSIZE is equal to 8 |
| but this is not a requirement. In this diagram, the buffer starts at |
| location x but the input pointer, input_ptr, passed into this function |
| would be the first row of data to be searched which is at x + 15h. The |
| value of incr passed onto this function represents the amount the input_ptr |
| needs to be incremented to point to the next row of data. |
| |
| This function compares each value in a row to the current maximum and |
| minimum. After each row, input_ptr is incremented to point to the next row. |
| This is repeated until all rows have been processed. When the search is |
| complete the location pointed to by min_ptr contains the minimum value |
| found and the location pointed to by max_ptr contains the maximum value found. |
| |
| ------------------------------------------------------------------------------ |
| */ |
| |
| |
| /*---------------------------------------------------------------------------- |
| ; INCLUDES |
| ----------------------------------------------------------------------------*/ |
| #include "mp4dec_lib.h" |
| #include "post_proc.h" |
| |
| /*---------------------------------------------------------------------------- |
| ; MACROS |
| ; Define module specific macros here |
| ----------------------------------------------------------------------------*/ |
| |
| /*---------------------------------------------------------------------------- |
| ; DEFINES |
| ; Include all pre-processor statements here. Include conditional |
| ; compile variables also. |
| ----------------------------------------------------------------------------*/ |
| |
| /*---------------------------------------------------------------------------- |
| ; LOCAL FUNCTION DEFINITIONS |
| ; Function Prototype declaration |
| ----------------------------------------------------------------------------*/ |
| |
| /*---------------------------------------------------------------------------- |
| ; LOCAL STORE/BUFFER/POINTER DEFINITIONS |
| ; Variable declaration - defined here and used outside this module |
| ----------------------------------------------------------------------------*/ |
| |
| /*---------------------------------------------------------------------------- |
| ; EXTERNAL FUNCTION REFERENCES |
| ; Declare functions defined elsewhere and referenced in this module |
| ----------------------------------------------------------------------------*/ |
| |
| /*---------------------------------------------------------------------------- |
| ; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES |
| ; Declare variables used in this module but defined elsewhere |
| ----------------------------------------------------------------------------*/ |
| |
| #ifdef PV_POSTPROC_ON |
| /*---------------------------------------------------------------------------- |
| ; FUNCTION CODE |
| ----------------------------------------------------------------------------*/ |
| void FindMaxMin( |
| uint8 *input_ptr, |
| int *min_ptr, |
| int *max_ptr, |
| int incr) |
| { |
| /*---------------------------------------------------------------------------- |
| ; Define all local variables |
| ----------------------------------------------------------------------------*/ |
| uint i, j; |
| int min, max; |
| |
| /*---------------------------------------------------------------------------- |
| ; Function body here |
| ----------------------------------------------------------------------------*/ |
| max = min = *input_ptr; |
| /* incr = incr - BLKSIZE; */ /* 09/06/2001, already passed in as width - BLKSIZE */ |
| |
| for (i = BLKSIZE; i > 0; i--) |
| { |
| for (j = BLKSIZE; j > 0; j--) |
| { |
| if (*input_ptr > max) |
| { |
| max = *input_ptr; |
| } |
| else if (*input_ptr < min) |
| { |
| min = *input_ptr; |
| } |
| input_ptr += 1; |
| } |
| |
| /* set pointer to the beginning of the next row*/ |
| input_ptr += incr; |
| } |
| |
| *max_ptr = max; |
| *min_ptr = min; |
| /*---------------------------------------------------------------------------- |
| ; Return nothing or data or data pointer |
| ----------------------------------------------------------------------------*/ |
| return; |
| } |
| #endif |