Home | History | Annotate | Download | only in aacdec
      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  Filename: sbr_find_start_andstop_band.c
     21 
     22 ------------------------------------------------------------------------------
     23  REVISION HISTORY
     24 
     25 
     26  Who:                                   Date: MM/DD/YYYY
     27  Description:
     28 
     29 ------------------------------------------------------------------------------
     30  INPUT AND OUTPUT DEFINITIONS
     31 
     32 
     33 
     34 ------------------------------------------------------------------------------
     35  FUNCTION DESCRIPTION
     36 
     37 
     38 ------------------------------------------------------------------------------
     39  REQUIREMENTS
     40 
     41 
     42 ------------------------------------------------------------------------------
     43  REFERENCES
     44 
     45 SC 29 Software Copyright Licencing Disclaimer:
     46 
     47 This software module was originally developed by
     48   Coding Technologies
     49 
     50 and edited by
     51   -
     52 
     53 in the course of development of the ISO/IEC 13818-7 and ISO/IEC 14496-3
     54 standards for reference purposes and its performance may not have been
     55 optimized. This software module is an implementation of one or more tools as
     56 specified by the ISO/IEC 13818-7 and ISO/IEC 14496-3 standards.
     57 ISO/IEC gives users free license to this software module or modifications
     58 thereof for use in products claiming conformance to audiovisual and
     59 image-coding related ITU Recommendations and/or ISO/IEC International
     60 Standards. ISO/IEC gives users the same free license to this software module or
     61 modifications thereof for research purposes and further ISO/IEC standardisation.
     62 Those intending to use this software module in products are advised that its
     63 use may infringe existing patents. ISO/IEC have no liability for use of this
     64 software module or modifications thereof. Copyright is not released for
     65 products that do not conform to audiovisual and image-coding related ITU
     66 Recommendations and/or ISO/IEC International Standards.
     67 The original developer retains full right to modify and use the code for its
     68 own purpose, assign or donate the code to a third party and to inhibit third
     69 parties from using the code for products that do not conform to audiovisual and
     70 image-coding related ITU Recommendations and/or ISO/IEC International Standards.
     71 This copyright notice must be included in all copies or derivative works.
     72 Copyright (c) ISO/IEC 2002.
     73 
     74 ------------------------------------------------------------------------------
     75  PSEUDO-CODE
     76 
     77 ------------------------------------------------------------------------------
     78 */
     79 
     80 
     81 /*----------------------------------------------------------------------------
     82 ; INCLUDES
     83 ----------------------------------------------------------------------------*/
     84 
     85 #ifdef AAC_PLUS
     86 
     87 
     88 #include    "sbr_find_start_andstop_band.h"
     89 #include    "get_sbr_startfreq.h"
     90 #include    "get_sbr_stopfreq.h"
     91 
     92 /*----------------------------------------------------------------------------
     93 ; MACROS
     94 ; Define module specific macros here
     95 ----------------------------------------------------------------------------*/
     96 
     97 
     98 /*----------------------------------------------------------------------------
     99 ; DEFINES
    100 ; Include all pre-processor statements here. Include conditional
    101 ; compile variables also.
    102 ----------------------------------------------------------------------------*/
    103 
    104 /*----------------------------------------------------------------------------
    105 ; LOCAL FUNCTION DEFINITIONS
    106 ; Function Prototype declaration
    107 ----------------------------------------------------------------------------*/
    108 
    109 /*----------------------------------------------------------------------------
    110 ; LOCAL STORE/BUFFER/POINTER DEFINITIONS
    111 ; Variable declaration - defined here and used outside this module
    112 ----------------------------------------------------------------------------*/
    113 
    114 /*----------------------------------------------------------------------------
    115 ; EXTERNAL FUNCTION REFERENCES
    116 ; Declare functions defined elsewhere and referenced in this module
    117 ----------------------------------------------------------------------------*/
    118 
    119 /*----------------------------------------------------------------------------
    120 ; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
    121 ; Declare variables used in this module but defined elsewhere
    122 ----------------------------------------------------------------------------*/
    123 
    124 /*----------------------------------------------------------------------------
    125 ; FUNCTION CODE
    126 ----------------------------------------------------------------------------*/
    127 
    128 SBR_ERROR sbr_find_start_andstop_band(const Int32 samplingFreq,
    129                                       const Int32 startFreq,
    130                                       const Int32 stopFreq,
    131                                       Int   *lsbM,
    132                                       Int   *usb)
    133 {
    134     /* Update startFreq struct */
    135     *lsbM = get_sbr_startfreq(samplingFreq, startFreq);
    136 
    137     if (*lsbM == 0)
    138     {
    139         return(SBRDEC_ILLEGAL_SCFACTORS);
    140     }
    141 
    142     /*Update stopFreq struct */
    143     if (stopFreq < 13)
    144     {
    145         *usb = get_sbr_stopfreq(samplingFreq, stopFreq);
    146     }
    147     else if (stopFreq == 13)
    148     {
    149         *usb = 64;
    150     }
    151     else if (stopFreq == 14)
    152     {
    153         *usb = (*lsbM) << 1;
    154     }
    155     else
    156     {
    157         *usb = 3 * *lsbM;
    158     }
    159 
    160     /* limit to Nyqvist */
    161     if (*usb > 64)
    162     {
    163         *usb = 64;
    164     }
    165 
    166     /* test for invalid lsb, usb combinations */
    167     if ((*usb - *lsbM) > 48)
    168     {
    169         /*
    170          *  invalid SBR bitstream ?
    171          */
    172         return(SBRDEC_INVALID_BITSTREAM);
    173     }
    174 
    175     if ((samplingFreq == 44100) && ((*usb - *lsbM) > 35))
    176     {
    177         /*
    178          *  invalid SBR bitstream ?
    179          */
    180         return(SBRDEC_INVALID_BITSTREAM);
    181     }
    182 
    183     if ((samplingFreq >= 48000) && ((*usb - *lsbM) > 32))
    184     {
    185         /*
    186          *  invalid SBR bitstream ?
    187          */
    188         return(SBRDEC_INVALID_BITSTREAM);
    189     }
    190 
    191     return(SBRDEC_OK);
    192 
    193 }
    194 
    195 #endif
    196 
    197 
    198 
    199