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_variable_name] = [description of the input to module, its type
243306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                 definition, and length (when applicable)]
253306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
263306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Local Stores/Buffers/Pointers Needed:
273306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    [local_store_name] = [description of the local store, its type
283306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                  definition, and length (when applicable)]
293306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    [local_buffer_name] = [description of the local buffer, its type
303306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                   definition, and length (when applicable)]
313306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    [local_ptr_name] = [description of the local pointer, its type
323306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                definition, and length (when applicable)]
333306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
343306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Global Stores/Buffers/Pointers Needed:
353306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    [global_store_name] = [description of the global store, its type
363306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                   definition, and length (when applicable)]
373306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    [global_buffer_name] = [description of the global buffer, its type
383306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                definition, and length (when applicable)]
393306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    [global_ptr_name] = [description of the global pointer, its type
403306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                 definition, and length (when applicable)]
413306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
423306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Outputs:
433306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    [return_variable_name] = [description of data/pointer returned
443306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                  by module, its type definition, and length
453306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                  (when applicable)]
463306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
473306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Pointers and Buffers Modified:
483306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    [variable_bfr_ptr] points to the [describe where the
493306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong      variable_bfr_ptr points to, its type definition, and length
503306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong      (when applicable)]
513306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    [variable_bfr] contents are [describe the new contents of
523306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong      variable_bfr]
533306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
543306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Local Stores Modified:
553306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    [local_store_name] = [describe new contents, its type
563306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                  definition, and length (when applicable)]
573306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
583306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong Global Stores Modified:
593306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    [global_store_name] = [describe new contents, its type
603306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong                   definition, and length (when applicable)]
613306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
623306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong------------------------------------------------------------------------------
633306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong FUNCTION DESCRIPTION
643306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
653306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong This module calculates the DC quantization scale according
663306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong to the incoming Q and type.
673306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
683306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong------------------------------------------------------------------------------
693306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong REQUIREMENTS
703306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
713306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong [List requirements to be satisfied by this module.]
723306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
733306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong------------------------------------------------------------------------------
743306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong REFERENCES
753306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
763306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong [List all references used in designing this module.]
773306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
783306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong------------------------------------------------------------------------------
793306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong PSEUDO-CODE
803306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
813306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong------------------------------------------------------------------------------
823306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong RESOURCES USED
833306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong   When the code is written for a specific target processor the
843306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong     the resources used should be documented below.
853306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
863306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong STACK USAGE: [stack count for this module] + [variable to represent
873306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong          stack usage for each subroutine called]
883306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
893306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong     where: [stack usage variable] = stack usage for [subroutine
903306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong         name] (see [filename].ext)
913306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
923306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong DATA MEMORY USED: x words
933306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
943306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong PROGRAM MEMORY USED: x words
953306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
963306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong CLOCK CYCLES: [cycle count equation for this module] + [variable
973306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong           used to represent cycle count for each subroutine
983306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong           called]
993306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1003306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong     where: [cycle count variable] = cycle count for [subroutine
1013306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        name] (see [filename].ext)
1023306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1033306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong------------------------------------------------------------------------------
1043306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong*/
1053306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1063306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1073306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
1083306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; INCLUDES
1093306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
1103306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#include    "mp4dec_lib.h"
1113306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#include    "vlc_decode.h"
1123306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#include    "bitstream.h"
1133306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong#include    "zigzag.h"
1143306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1153306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
1163306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; MACROS
1173306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; Define module specific macros here
1183306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
1193306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1203306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1213306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
1223306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; DEFINES
1233306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; Include all pre-processor statements here. Include conditional
1243306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; compile variables also.
1253306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
1263306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1273306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
1283306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; LOCAL FUNCTION DEFINITIONS
1293306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; Function Prototype declaration
1303306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
1313306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1323306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
1333306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; LOCAL STORE/BUFFER/POINTER DEFINITIONS
1343306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; Variable declaration - defined here and used outside this module
1353306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
1363306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1373306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
1383306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; EXTERNAL FUNCTION REFERENCES
1393306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; Declare functions defined elsewhere and referenced in this module
1403306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
1413306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1423306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
1433306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
1443306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; Declare variables used in this module but defined elsewhere
1453306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
1463306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1473306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong/*----------------------------------------------------------------------------
1483306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong; FUNCTION CODE
1493306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong----------------------------------------------------------------------------*/
1503306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dongint cal_dc_scaler(
1513306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    int QP,
1523306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    int type)
1533306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong{
1543306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1553306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    /*----------------------------------------------------------------------------
1563306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ; Define all local variables
1573306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ----------------------------------------------------------------------------*/
1583306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    int dc_scaler;
1593306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1603306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    /*----------------------------------------------------------------------------
1613306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ; Function body here
1623306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ----------------------------------------------------------------------------*/
1633306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    if (type == LUMINANCE_DC_TYPE)
1643306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    {
1653306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        if (QP > 0 && QP < 5) dc_scaler = 8;
1663306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        else if (QP > 4 && QP < 9) dc_scaler = 2 * QP;
1673306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        else if (QP > 8 && QP < 25) dc_scaler = QP + 8;
1683306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        else dc_scaler = 2 * QP - 16;
1693306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    }
1703306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    else /* if (type == CHROMINANCE_DC_TYPE), there is no other types.  */
1713306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    {
1723306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        if (QP > 0 && QP < 5) dc_scaler = 8;
1733306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        else if (QP > 4 && QP < 25) dc_scaler = (QP + 13) >> 1;
1743306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong        else dc_scaler = QP - 6;
1753306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    }
1763306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
1773306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    /*----------------------------------------------------------------------------
1783306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ; Return nothing or data or data pointer
1793306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    ----------------------------------------------------------------------------*/
1803306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong    return dc_scaler;
1813306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong}
1823306cfee3bf38ab207a0504e49c2d492bb73ffbfJames Dong
183