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