1dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/* ------------------------------------------------------------------ 2dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Copyright (C) 1998-2009 PacketVideo 3dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 4dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * you may not use this file except in compliance with the License. 6dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * You may obtain a copy of the License at 7dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 8dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 10dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Unless required by applicable law or agreed to in writing, software 11dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * express or implied. 14dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * See the License for the specific language governing permissions 15dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * and limitations under the License. 16dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * ------------------------------------------------------------------- 17dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 18dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/* 19dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 20dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Name: PVMP4AudioDecoder_API.h 21dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 22dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 23dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REVISION HISTORY 24dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 25dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Change buffer type to UChar 26dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 27dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Update comments 28dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 29dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: Updated a comment that MT did not get around to 30dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber before the end of his contract. 31dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 32dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: add a new API to decode audioSpecificConfig separately, the same 33dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber change has been made on 32-bits version (element \main\2) 34dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 35dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: add a new API to reset history buffer, the same change has been 36dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber made on a 32-bits version(element \nd.e0352.wjin\1) 37dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 38dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Who: Date: 39dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: 40dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 41dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 42dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber INCLUDE DESCRIPTION 43dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 44dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Main header file for the Packet Video MP4/AAC audio decoder library. The 45dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber constants, structures, and functions defined within this file, along with 46dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber a basic data types header file, is all that is needed to use and communicate 47dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber with the library. The internal data structures within the library are 48dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber purposely hidden. 49dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 50dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ---* Need description of the input buffering. *------- 51dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 52dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ---* Need an example of calling the library here *---- 53dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 54dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 55dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REFERENCES 56dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 57dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber (Normally header files do not have a reference section) 58dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 59dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ISO/EIC 14496-3:(1999) Document titled 60dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 61dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber*/ 62dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 63dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 64dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; CONTINUE ONLY IF NOT ALREADY DEFINED 65dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 66dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifndef PVMP4AUDIODECODER_API_H 67dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#define PVMP4AUDIODECODER_API_H 68dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 69dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "pv_audio_type_defs.h" /* Basic data types used within the lib */ 70dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 71dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "e_tmp4audioobjecttype.h" 72dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 73dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*---------------------------------------------------------------------------- 74dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber; INCLUDES 75dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber----------------------------------------------------------------------------*/ 76dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef __cplusplus 77dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huberextern "C" 78dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber{ 79dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif 80dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 81dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /*---------------------------------------------------------------------------- 82dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ; MACROS 83dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ; Define module specific macros here 84dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ----------------------------------------------------------------------------*/ 85dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 86dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /*---------------------------------------------------------------------------- 87dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ; DEFINES 88dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ; Include all pre-processor statements here. 89dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ----------------------------------------------------------------------------*/ 90dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 91dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 92dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * This constant is the guaranteed-to-work buffer size, specified in bytes, 93dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * for the input buffer for 2 audio channels to decode one frame of data, 94dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * as specified by the MPEG-2 or MPEG-4 standard. 95dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * The standard, and this constant, do not take into account that lower 96dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * bitrates will use less data per frame. Note that the number of bits 97dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * used per frame is variable, and only that the average value will be the 98dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * bit rate specified during encoding. The standard does not specify 99dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * over how many frames the average must be maintained. 100dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 101dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * The constant value is 6144 * 2 channels / 8 bits per byte 102dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 103dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 104dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 105dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#define PVMP4AUDIODECODER_INBUFSIZE 1536 106dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 107dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /*---------------------------------------------------------------------------- 108dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ; EXTERNAL VARIABLES REFERENCES 109dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ; Declare variables used in this module but defined elsewhere 110dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ----------------------------------------------------------------------------*/ 111dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 112dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /*---------------------------------------------------------------------------- 113dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ; SIMPLE TYPEDEF'S 114dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ----------------------------------------------------------------------------*/ 115dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 116dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /*---------------------------------------------------------------------------- 117dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ; ENUMERATED TYPEDEF'S 118dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ----------------------------------------------------------------------------*/ 119dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 120dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * This enumeration is used for the structure element outputFormat. It 121dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * specifies how the output data is to be formatted. Presently only 16-bit 122dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * PCM data is supported, and this enum informs how the single output 123dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * buffer should be for two-channel stereo data. 124dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Grouped format stores all the left channel values, then right: 125dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * "LLLL...LLRRRR...RR" 126dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Interleave format store left, then right audio samples: 127dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * "LRLRLRLR...." 128dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 129dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber typedef enum ePVMP4AudioDecoderOutputFormat 130dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 131dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber OUTPUTFORMAT_16PCM_GROUPED = 0, 132dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber OUTPUTFORMAT_16PCM_INTERLEAVED = 1 133dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 134dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } tPVMP4AudioDecoderOutputFormat; 135dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 136dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 137dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * This enumeration holds the possible return values for the main decoder 138dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * function, PVMP4AudioDecodeFrame. The plan was to easily distinguish 139dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * whether an error was recoverable (streaming mode) or not. Presently no 140dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * errors are recoverable, which is a result of not supporting ADTS in 141dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * this release. 142dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 143dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber typedef enum ePVMP4AudioDecoderErrorCode 144dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 145dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MP4AUDEC_SUCCESS = 0, 146dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MP4AUDEC_INVALID_FRAME = 10, 147dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MP4AUDEC_INCOMPLETE_FRAME = 20, 148dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber MP4AUDEC_LOST_FRAME_SYNC = 30 /* Cannot happen since no ADTS */ 149dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } tPVMP4AudioDecoderErrorCode; 150dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 151dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 152dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 153dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * This enumeration holds the possible return values for stream type 154dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * being decoded 155dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 156dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber typedef enum 157dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 158dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber AAC = 0, 159dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber AACPLUS, 160dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ENH_AACPLUS 161dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } STREAMTYPE; 162dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 163dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /*---------------------------------------------------------------------------- 164dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ; STRUCTURES TYPEDEF'S 165dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ----------------------------------------------------------------------------*/ 166dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 167dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * This structure is used to communicate information in to and out of the 168dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * AAC decoder. 169dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 170dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 171dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber typedef struct 172dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef __cplusplus 173dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tPVMP4AudioDecoderExternal // To allow forward declaration of this struct in C++ 174dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif 175dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 176dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 177dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * INPUT: 178dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Pointer to the input buffer that contains the encoded bistream data. 179dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * The data is filled in such that the first bit transmitted is 180dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * the most-significant bit (MSB) of the first array element. 181dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * The buffer is accessed in a linear fashion for speed, and the number of 182dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * bytes consumed varies frame to frame. 183dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * The calling environment can change what is pointed to between calls to 184dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * the decode function, library, as long as the inputBufferCurrentLength, 185dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * and inputBufferUsedLength are updated too. Also, any remaining bits in 186dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * the old buffer must be put at the beginning of the new buffer. 187dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 188dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber UChar *pInputBuffer; 189dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 190dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 191dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * INPUT: 192dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Number of valid bytes in the input buffer, set by the calling 193dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * function. After decoding the bitstream the library checks to 194dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * see if it when past this value; it would be to prohibitive to 195dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * check after every read operation. This value is not modified by 196dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * the AAC library. 197dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 198dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int inputBufferCurrentLength; 199dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 200dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 201dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * INPUT: 202dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * The actual size of the buffer. 203dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * This variable is not used by the library, but is used by the 204dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * console test application. This parameter could be deleted 205dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * if this value was passed into these function. The helper functions are 206dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * not part of the library and are not used by the Common Audio Decoder 207dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Interface. 208dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 209dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int inputBufferMaxLength; 210dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 211dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 212dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * INPUT: 213dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Enumerated value the output is to be interleaved left-right-left-right. 214dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * For further information look at the comments for the enumeration. 215dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 216dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tPVMP4AudioDecoderOutputFormat outputFormat; 217dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 218dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 219dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * INPUT: (but what is pointed to is an output) 220dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Pointer to the output buffer to hold the 16-bit PCM audio samples. 221dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * If the output is stereo, both left and right channels will be stored 222dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * in this one buffer. Presently it must be of length of 2048 points. 223dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * The format of the buffer is set by the parameter outputFormat. 224dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 225dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int16 *pOutputBuffer; 226dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 227dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 228dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * INPUT: (but what is pointed to is an output) 229dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Pointer to the output buffer to hold the 16-bit PCM AAC-plus audio samples. 230dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * If the output is stereo, both left and right channels will be stored 231dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * in this one buffer. Presently it must be of length of 2048 points. 232dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * The format of the buffer is set by the parameter outputFormat. 233dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 234dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int16 *pOutputBuffer_plus; /* Used in AAC+ and enhanced AAC+ */ 235dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 236dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 237dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * INPUT: 238dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * AAC Plus Upsampling Factor. Normally set to 2 when Spectrum Band 239dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Replication (SBR) is used 240dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 241dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 aacPlusUpsamplingFactor; /* Used in AAC+ and enhanced AAC+ */ 242dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 243dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 244dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * INPUT: 245dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * AAC Plus enabler. Deafaults to be ON, unless run time conditions 246dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * require the SBR and PS tools disabled 247dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 248dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber bool aacPlusEnabled; 249dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 250dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * INPUT: 251dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * (Currently not being used inside the AAC library.) 252dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * This flag is set to TRUE when the playback position has been changed, 253dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * for example, rewind or fast forward. This informs the AAC library to 254dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * take an appropriate action, which has yet to be determined. 255dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 256dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Bool repositionFlag; 257dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 258dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 259dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * INPUT: 260dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Number of requested output audio channels. This relieves the calling 261dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * environment from having to perform stereo-to-mono or mono-to-stereo 262dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * conversions. 263dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 264dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int desiredChannels; 265dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 266dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 267dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * INPUT/OUTPUT: 268dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Number of elements used by the library, initially set to zero by 269dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * the function PVMP4AudioDecoderInitLibrary, and modified by each 270dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * call to PVMP4AudioDecodeFrame. 271dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 272dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int inputBufferUsedLength; 273dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 274dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 275dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * INPUT/OUTPUT: 276dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Number of bits left over in the next buffer element, 277dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * This value will always be zero, unless support for ADTS is added. 278dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 279dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 remainderBits; 280dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 281dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 282dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * OUTPUT: 283dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * The sampling rate decoded from the bitstream, in units of 284dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * samples/second. For this release of the library this value does 285dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * not change from frame to frame, but future versions will. 286dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 287dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 samplingRate; 288dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 289dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 290dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * OUTPUT: 291dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * This value is the bitrate in units of bits/second. IT 292dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * is calculated using the number of bits consumed for the current frame, 293dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * and then multiplying by the sampling_rate, divided by points in a frame. 294dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * This value can changes frame to frame. 295dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 296dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 bitRate; 297dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 298dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 299dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * OUTPUT: 300dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * The number of channels decoded from the bitstream. The output data 301dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * will have be the amount specified in the variable desiredChannels, 302dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * this output is informative only, and can be ignored. 303dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 304dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int encodedChannels; 305dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 306dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 307dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * OUTPUT: 308dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * This value is the number of output PCM samples per channel. 309dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * It is presently hard-coded to 1024, but may change in the future. 310dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * It will not change frame to frame, and would take on 311dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * one of these four values: 1024, 960, 512, or 480. If an error occurs 312dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * do not rely on this value. 313dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 314dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int frameLength; 315dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 316dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 317dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * This value is audio object type as defined in struct tMP4AudioObjectType 318dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * in file e_tMP4AudioObjectType.h 319dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 320dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int audioObjectType; 321dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 322dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /* 323dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * This value is extended audio object type as defined in struct tMP4AudioObjectType 324dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * in file e_tMP4AudioObjectType.h. It carries the output Audio Object Type 325dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 326dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int extendedAudioObjectType; 327dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 328dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 329dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } tPVMP4AudioDecoderExternal; 330dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 331dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /*---------------------------------------------------------------------------- 332dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ; GLOBAL FUNCTION DEFINITIONS 333dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ; Function Prototype declaration 334dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ----------------------------------------------------------------------------*/ 335dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 336dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber OSCL_IMPORT_REF UInt32 PVMP4AudioDecoderGetMemRequirements(void); 337dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 338dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber OSCL_IMPORT_REF Int PVMP4AudioDecoderInitLibrary( 339dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tPVMP4AudioDecoderExternal *pExt, 340dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber void *pMem); 341dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 342dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber OSCL_IMPORT_REF Int PVMP4AudioDecodeFrame( 343dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tPVMP4AudioDecoderExternal *pExt, 344dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber void *pMem); 345dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 346dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber OSCL_IMPORT_REF Int PVMP4AudioDecoderConfig( 347dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tPVMP4AudioDecoderExternal *pExt, 348dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber void *pMem); 349dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 350dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber OSCL_IMPORT_REF void PVMP4AudioDecoderResetBuffer( 351dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber void *pMem); 352dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 353dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber OSCL_IMPORT_REF void PVMP4AudioDecoderDisableAacPlus( 354dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tPVMP4AudioDecoderExternal *pExt, 355dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber void *pMem); 356dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 357dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int PVMP4SetAudioConfig( 358dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tPVMP4AudioDecoderExternal *pExt, 359dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber void *pMem, 360dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int upsamplingFactor, 361dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int samp_rate, 362dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber int num_ch, 363dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber tMP4AudioObjectType audioObjectType); 364dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 365dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber /*---------------------------------------------------------------------------- 366dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ; END 367dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber ----------------------------------------------------------------------------*/ 368dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 369dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef __cplusplus 370dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber} 371dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif 372dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 373dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 374dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif /* PVMP4AUDIODECODER_API_H */ 375dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 376dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 377