| /* ------------------------------------------------------------------ |
| * Copyright (C) 1998-2009 PacketVideo |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either |
| * express or implied. |
| * See the License for the specific language governing permissions |
| * and limitations under the License. |
| * ------------------------------------------------------------------- |
| */ |
| /* |
| |
| Name: PVMP4AudioDecoder_API.h |
| |
| ------------------------------------------------------------------------------ |
| REVISION HISTORY |
| |
| Description: Change buffer type to UChar |
| |
| Description: Update comments |
| |
| Description: Updated a comment that MT did not get around to |
| before the end of his contract. |
| |
| Description: add a new API to decode audioSpecificConfig separately, the same |
| change has been made on 32-bits version (element \main\2) |
| |
| Description: add a new API to reset history buffer, the same change has been |
| made on a 32-bits version(element \nd.e0352.wjin\1) |
| |
| Who: Date: |
| Description: |
| |
| ------------------------------------------------------------------------------ |
| INCLUDE DESCRIPTION |
| |
| Main header file for the Packet Video MP4/AAC audio decoder library. The |
| constants, structures, and functions defined within this file, along with |
| a basic data types header file, is all that is needed to use and communicate |
| with the library. The internal data structures within the library are |
| purposely hidden. |
| |
| ---* Need description of the input buffering. *------- |
| |
| ---* Need an example of calling the library here *---- |
| |
| ------------------------------------------------------------------------------ |
| REFERENCES |
| |
| (Normally header files do not have a reference section) |
| |
| ISO/EIC 14496-3:(1999) Document titled |
| ------------------------------------------------------------------------------ |
| */ |
| |
| /*---------------------------------------------------------------------------- |
| ; CONTINUE ONLY IF NOT ALREADY DEFINED |
| ----------------------------------------------------------------------------*/ |
| #ifndef PVMP4AUDIODECODER_API_H |
| #define PVMP4AUDIODECODER_API_H |
| |
| #include "pv_audio_type_defs.h" /* Basic data types used within the lib */ |
| |
| #include "e_tmp4audioobjecttype.h" |
| |
| /*---------------------------------------------------------------------------- |
| ; INCLUDES |
| ----------------------------------------------------------------------------*/ |
| #ifdef __cplusplus |
| extern "C" |
| { |
| #endif |
| |
| /*---------------------------------------------------------------------------- |
| ; MACROS |
| ; Define module specific macros here |
| ----------------------------------------------------------------------------*/ |
| |
| /*---------------------------------------------------------------------------- |
| ; DEFINES |
| ; Include all pre-processor statements here. |
| ----------------------------------------------------------------------------*/ |
| |
| /* |
| * This constant is the guaranteed-to-work buffer size, specified in bytes, |
| * for the input buffer for 2 audio channels to decode one frame of data, |
| * as specified by the MPEG-2 or MPEG-4 standard. |
| * The standard, and this constant, do not take into account that lower |
| * bitrates will use less data per frame. Note that the number of bits |
| * used per frame is variable, and only that the average value will be the |
| * bit rate specified during encoding. The standard does not specify |
| * over how many frames the average must be maintained. |
| * |
| * The constant value is 6144 * 2 channels / 8 bits per byte |
| */ |
| |
| |
| #define PVMP4AUDIODECODER_INBUFSIZE 1536 |
| |
| /*---------------------------------------------------------------------------- |
| ; EXTERNAL VARIABLES REFERENCES |
| ; Declare variables used in this module but defined elsewhere |
| ----------------------------------------------------------------------------*/ |
| |
| /*---------------------------------------------------------------------------- |
| ; SIMPLE TYPEDEF'S |
| ----------------------------------------------------------------------------*/ |
| |
| /*---------------------------------------------------------------------------- |
| ; ENUMERATED TYPEDEF'S |
| ----------------------------------------------------------------------------*/ |
| /* |
| * This enumeration is used for the structure element outputFormat. It |
| * specifies how the output data is to be formatted. Presently only 16-bit |
| * PCM data is supported, and this enum informs how the single output |
| * buffer should be for two-channel stereo data. |
| * Grouped format stores all the left channel values, then right: |
| * "LLLL...LLRRRR...RR" |
| * Interleave format store left, then right audio samples: |
| * "LRLRLRLR...." |
| */ |
| typedef enum ePVMP4AudioDecoderOutputFormat |
| { |
| OUTPUTFORMAT_16PCM_GROUPED = 0, |
| OUTPUTFORMAT_16PCM_INTERLEAVED = 1 |
| |
| } tPVMP4AudioDecoderOutputFormat; |
| |
| /* |
| * This enumeration holds the possible return values for the main decoder |
| * function, PVMP4AudioDecodeFrame. The plan was to easily distinguish |
| * whether an error was recoverable (streaming mode) or not. Presently no |
| * errors are recoverable, which is a result of not supporting ADTS in |
| * this release. |
| */ |
| typedef enum ePVMP4AudioDecoderErrorCode |
| { |
| MP4AUDEC_SUCCESS = 0, |
| MP4AUDEC_INVALID_FRAME = 10, |
| MP4AUDEC_INCOMPLETE_FRAME = 20, |
| MP4AUDEC_LOST_FRAME_SYNC = 30 /* Cannot happen since no ADTS */ |
| } tPVMP4AudioDecoderErrorCode; |
| |
| |
| /* |
| * This enumeration holds the possible return values for stream type |
| * being decoded |
| */ |
| typedef enum |
| { |
| AAC = 0, |
| AACPLUS, |
| ENH_AACPLUS |
| } STREAMTYPE; |
| |
| /*---------------------------------------------------------------------------- |
| ; STRUCTURES TYPEDEF'S |
| ----------------------------------------------------------------------------*/ |
| /* |
| * This structure is used to communicate information in to and out of the |
| * AAC decoder. |
| */ |
| |
| typedef struct |
| #ifdef __cplusplus |
| tPVMP4AudioDecoderExternal // To allow forward declaration of this struct in C++ |
| #endif |
| { |
| /* |
| * INPUT: |
| * Pointer to the input buffer that contains the encoded bistream data. |
| * The data is filled in such that the first bit transmitted is |
| * the most-significant bit (MSB) of the first array element. |
| * The buffer is accessed in a linear fashion for speed, and the number of |
| * bytes consumed varies frame to frame. |
| * The calling environment can change what is pointed to between calls to |
| * the decode function, library, as long as the inputBufferCurrentLength, |
| * and inputBufferUsedLength are updated too. Also, any remaining bits in |
| * the old buffer must be put at the beginning of the new buffer. |
| */ |
| UChar *pInputBuffer; |
| |
| /* |
| * INPUT: |
| * Number of valid bytes in the input buffer, set by the calling |
| * function. After decoding the bitstream the library checks to |
| * see if it when past this value; it would be to prohibitive to |
| * check after every read operation. This value is not modified by |
| * the AAC library. |
| */ |
| Int inputBufferCurrentLength; |
| |
| /* |
| * INPUT: |
| * The actual size of the buffer. |
| * This variable is not used by the library, but is used by the |
| * console test application. This parameter could be deleted |
| * if this value was passed into these function. The helper functions are |
| * not part of the library and are not used by the Common Audio Decoder |
| * Interface. |
| */ |
| Int inputBufferMaxLength; |
| |
| /* |
| * INPUT: |
| * Enumerated value the output is to be interleaved left-right-left-right. |
| * For further information look at the comments for the enumeration. |
| */ |
| tPVMP4AudioDecoderOutputFormat outputFormat; |
| |
| /* |
| * INPUT: (but what is pointed to is an output) |
| * Pointer to the output buffer to hold the 16-bit PCM audio samples. |
| * If the output is stereo, both left and right channels will be stored |
| * in this one buffer. Presently it must be of length of 2048 points. |
| * The format of the buffer is set by the parameter outputFormat. |
| */ |
| Int16 *pOutputBuffer; |
| |
| /* |
| * INPUT: (but what is pointed to is an output) |
| * Pointer to the output buffer to hold the 16-bit PCM AAC-plus audio samples. |
| * If the output is stereo, both left and right channels will be stored |
| * in this one buffer. Presently it must be of length of 2048 points. |
| * The format of the buffer is set by the parameter outputFormat. |
| */ |
| Int16 *pOutputBuffer_plus; /* Used in AAC+ and enhanced AAC+ */ |
| |
| /* |
| * INPUT: |
| * AAC Plus Upsampling Factor. Normally set to 2 when Spectrum Band |
| * Replication (SBR) is used |
| */ |
| Int32 aacPlusUpsamplingFactor; /* Used in AAC+ and enhanced AAC+ */ |
| |
| /* |
| * INPUT: |
| * AAC Plus enabler. Deafaults to be ON, unless run time conditions |
| * require the SBR and PS tools disabled |
| */ |
| bool aacPlusEnabled; |
| /* |
| * INPUT: |
| * (Currently not being used inside the AAC library.) |
| * This flag is set to TRUE when the playback position has been changed, |
| * for example, rewind or fast forward. This informs the AAC library to |
| * take an appropriate action, which has yet to be determined. |
| */ |
| Bool repositionFlag; |
| |
| /* |
| * INPUT: |
| * Number of requested output audio channels. This relieves the calling |
| * environment from having to perform stereo-to-mono or mono-to-stereo |
| * conversions. |
| */ |
| Int desiredChannels; |
| |
| /* |
| * INPUT/OUTPUT: |
| * Number of elements used by the library, initially set to zero by |
| * the function PVMP4AudioDecoderInitLibrary, and modified by each |
| * call to PVMP4AudioDecodeFrame. |
| */ |
| Int inputBufferUsedLength; |
| |
| /* |
| * INPUT/OUTPUT: |
| * Number of bits left over in the next buffer element, |
| * This value will always be zero, unless support for ADTS is added. |
| */ |
| Int32 remainderBits; |
| |
| /* |
| * OUTPUT: |
| * The sampling rate decoded from the bitstream, in units of |
| * samples/second. For this release of the library this value does |
| * not change from frame to frame, but future versions will. |
| */ |
| Int32 samplingRate; |
| |
| /* |
| * OUTPUT: |
| * This value is the bitrate in units of bits/second. IT |
| * is calculated using the number of bits consumed for the current frame, |
| * and then multiplying by the sampling_rate, divided by points in a frame. |
| * This value can changes frame to frame. |
| */ |
| Int32 bitRate; |
| |
| /* |
| * OUTPUT: |
| * The number of channels decoded from the bitstream. The output data |
| * will have be the amount specified in the variable desiredChannels, |
| * this output is informative only, and can be ignored. |
| */ |
| Int encodedChannels; |
| |
| /* |
| * OUTPUT: |
| * This value is the number of output PCM samples per channel. |
| * It is presently hard-coded to 1024, but may change in the future. |
| * It will not change frame to frame, and would take on |
| * one of these four values: 1024, 960, 512, or 480. If an error occurs |
| * do not rely on this value. |
| */ |
| Int frameLength; |
| |
| /* |
| * This value is audio object type as defined in struct tMP4AudioObjectType |
| * in file e_tMP4AudioObjectType.h |
| */ |
| Int audioObjectType; |
| |
| /* |
| * This value is extended audio object type as defined in struct tMP4AudioObjectType |
| * in file e_tMP4AudioObjectType.h. It carries the output Audio Object Type |
| */ |
| Int extendedAudioObjectType; |
| |
| |
| } tPVMP4AudioDecoderExternal; |
| |
| /*---------------------------------------------------------------------------- |
| ; GLOBAL FUNCTION DEFINITIONS |
| ; Function Prototype declaration |
| ----------------------------------------------------------------------------*/ |
| |
| OSCL_IMPORT_REF UInt32 PVMP4AudioDecoderGetMemRequirements(void); |
| |
| OSCL_IMPORT_REF Int PVMP4AudioDecoderInitLibrary( |
| tPVMP4AudioDecoderExternal *pExt, |
| void *pMem); |
| |
| OSCL_IMPORT_REF Int PVMP4AudioDecodeFrame( |
| tPVMP4AudioDecoderExternal *pExt, |
| void *pMem); |
| |
| OSCL_IMPORT_REF Int PVMP4AudioDecoderConfig( |
| tPVMP4AudioDecoderExternal *pExt, |
| void *pMem); |
| |
| OSCL_IMPORT_REF void PVMP4AudioDecoderResetBuffer( |
| void *pMem); |
| |
| OSCL_IMPORT_REF void PVMP4AudioDecoderDisableAacPlus( |
| tPVMP4AudioDecoderExternal *pExt, |
| void *pMem); |
| |
| Int PVMP4SetAudioConfig( |
| tPVMP4AudioDecoderExternal *pExt, |
| void *pMem, |
| Int upsamplingFactor, |
| Int samp_rate, |
| int num_ch, |
| tMP4AudioObjectType audioObjectType); |
| |
| /*---------------------------------------------------------------------------- |
| ; END |
| ----------------------------------------------------------------------------*/ |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| |
| #endif /* PVMP4AUDIODECODER_API_H */ |
| |
| |