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