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----------------------------------------------------------------------------*/ 150int 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