Home | History | Annotate | Download | only in src
      1 /* ------------------------------------------------------------------
      2  * Copyright (C) 1998-2009 PacketVideo
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
     13  * express or implied.
     14  * See the License for the specific language governing permissions
     15  * and limitations under the License.
     16  * -------------------------------------------------------------------
     17  */
     18 /*
     19 ------------------------------------------------------------------------------
     20  INPUT AND OUTPUT DEFINITIONS
     21 
     22  Inputs:
     23     [input_variable_name] = [description of the input to module, its type
     24                  definition, and length (when applicable)]
     25 
     26  Local Stores/Buffers/Pointers Needed:
     27     [local_store_name] = [description of the local store, its type
     28                   definition, and length (when applicable)]
     29     [local_buffer_name] = [description of the local buffer, its type
     30                    definition, and length (when applicable)]
     31     [local_ptr_name] = [description of the local pointer, its type
     32                 definition, and length (when applicable)]
     33 
     34  Global Stores/Buffers/Pointers Needed:
     35     [global_store_name] = [description of the global store, its type
     36                    definition, and length (when applicable)]
     37     [global_buffer_name] = [description of the global buffer, its type
     38                 definition, and length (when applicable)]
     39     [global_ptr_name] = [description of the global pointer, its type
     40                  definition, and length (when applicable)]
     41 
     42  Outputs:
     43     [return_variable_name] = [description of data/pointer returned
     44                   by module, its type definition, and length
     45                   (when applicable)]
     46 
     47  Pointers and Buffers Modified:
     48     [variable_bfr_ptr] points to the [describe where the
     49       variable_bfr_ptr points to, its type definition, and length
     50       (when applicable)]
     51     [variable_bfr] contents are [describe the new contents of
     52       variable_bfr]
     53 
     54  Local Stores Modified:
     55     [local_store_name] = [describe new contents, its type
     56                   definition, and length (when applicable)]
     57 
     58  Global Stores Modified:
     59     [global_store_name] = [describe new contents, its type
     60                    definition, and length (when applicable)]
     61 
     62 ------------------------------------------------------------------------------
     63  FUNCTION DESCRIPTION
     64 
     65  This module calculates the DC quantization scale according
     66  to the incoming Q and type.
     67 
     68 ------------------------------------------------------------------------------
     69  REQUIREMENTS
     70 
     71  [List requirements to be satisfied by this module.]
     72 
     73 ------------------------------------------------------------------------------
     74  REFERENCES
     75 
     76  [List all references used in designing this module.]
     77 
     78 ------------------------------------------------------------------------------
     79  PSEUDO-CODE
     80 
     81 ------------------------------------------------------------------------------
     82  RESOURCES USED
     83    When the code is written for a specific target processor the
     84      the resources used should be documented below.
     85 
     86  STACK USAGE: [stack count for this module] + [variable to represent
     87           stack usage for each subroutine called]
     88 
     89      where: [stack usage variable] = stack usage for [subroutine
     90          name] (see [filename].ext)
     91 
     92  DATA MEMORY USED: x words
     93 
     94  PROGRAM MEMORY USED: x words
     95 
     96  CLOCK CYCLES: [cycle count equation for this module] + [variable
     97            used to represent cycle count for each subroutine
     98            called]
     99 
    100      where: [cycle count variable] = cycle count for [subroutine
    101         name] (see [filename].ext)
    102 
    103 ------------------------------------------------------------------------------
    104 */
    105 
    106 
    107 /*----------------------------------------------------------------------------
    108 ; INCLUDES
    109 ----------------------------------------------------------------------------*/
    110 #include    "mp4dec_lib.h"
    111 #include    "vlc_decode.h"
    112 #include    "bitstream.h"
    113 #include    "zigzag.h"
    114 
    115 /*----------------------------------------------------------------------------
    116 ; MACROS
    117 ; Define module specific macros here
    118 ----------------------------------------------------------------------------*/
    119 
    120 
    121 /*----------------------------------------------------------------------------
    122 ; DEFINES
    123 ; Include all pre-processor statements here. Include conditional
    124 ; compile variables also.
    125 ----------------------------------------------------------------------------*/
    126 
    127 /*----------------------------------------------------------------------------
    128 ; LOCAL FUNCTION DEFINITIONS
    129 ; Function Prototype declaration
    130 ----------------------------------------------------------------------------*/
    131 
    132 /*----------------------------------------------------------------------------
    133 ; LOCAL STORE/BUFFER/POINTER DEFINITIONS
    134 ; Variable declaration - defined here and used outside this module
    135 ----------------------------------------------------------------------------*/
    136 
    137 /*----------------------------------------------------------------------------
    138 ; EXTERNAL FUNCTION REFERENCES
    139 ; Declare functions defined elsewhere and referenced in this module
    140 ----------------------------------------------------------------------------*/
    141 
    142 /*----------------------------------------------------------------------------
    143 ; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
    144 ; Declare variables used in this module but defined elsewhere
    145 ----------------------------------------------------------------------------*/
    146 
    147 /*----------------------------------------------------------------------------
    148 ; FUNCTION CODE
    149 ----------------------------------------------------------------------------*/
    150 int cal_dc_scaler(
    151     int QP,
    152     int type)
    153 {
    154 
    155     /*----------------------------------------------------------------------------
    156     ; Define all local variables
    157     ----------------------------------------------------------------------------*/
    158     int dc_scaler;
    159 
    160     /*----------------------------------------------------------------------------
    161     ; Function body here
    162     ----------------------------------------------------------------------------*/
    163     if (type == LUMINANCE_DC_TYPE)
    164     {
    165         if (QP > 0 && QP < 5) dc_scaler = 8;
    166         else if (QP > 4 && QP < 9) dc_scaler = 2 * QP;
    167         else if (QP > 8 && QP < 25) dc_scaler = QP + 8;
    168         else dc_scaler = 2 * QP - 16;
    169     }
    170     else /* if (type == CHROMINANCE_DC_TYPE), there is no other types.  */
    171     {
    172         if (QP > 0 && QP < 5) dc_scaler = 8;
    173         else if (QP > 4 && QP < 25) dc_scaler = (QP + 13) >> 1;
    174         else dc_scaler = QP - 6;
    175     }
    176 
    177     /*----------------------------------------------------------------------------
    178     ; Return nothing or data or data pointer
    179     ----------------------------------------------------------------------------*/
    180     return dc_scaler;
    181 }
    182 
    183