mirror of
https://github.com/smallmain/cocos-enhance-kit.git
synced 2025-01-15 07:21:07 +00:00
260 lines
8.6 KiB
C
260 lines
8.6 KiB
C
|
/* ------------------------------------------------------------------
|
||
|
* 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.
|
||
|
* -------------------------------------------------------------------
|
||
|
*/
|
||
|
/*
|
||
|
------------------------------------------------------------------------------
|
||
|
PacketVideo Corp.
|
||
|
MP3 Decoder Library
|
||
|
|
||
|
Filename: pvmp3decoder_api.h
|
||
|
|
||
|
Date: 09/21/2007
|
||
|
|
||
|
------------------------------------------------------------------------------
|
||
|
REVISION HISTORY
|
||
|
|
||
|
Description:
|
||
|
|
||
|
------------------------------------------------------------------------------
|
||
|
INCLUDE DESCRIPTION
|
||
|
|
||
|
This include file defines the structure tPVMP3DecoderExternal
|
||
|
|
||
|
------------------------------------------------------------------------------
|
||
|
*/
|
||
|
|
||
|
/*----------------------------------------------------------------------------
|
||
|
; CONTINUE ONLY IF NOT ALREADY DEFINED
|
||
|
----------------------------------------------------------------------------*/
|
||
|
#ifndef PVMP3DECODER_API_H
|
||
|
#define PVMP3DECODER_API_H
|
||
|
|
||
|
/*----------------------------------------------------------------------------
|
||
|
; INCLUDES
|
||
|
----------------------------------------------------------------------------*/
|
||
|
|
||
|
#include "pvmp3_audio_type_defs.h"
|
||
|
#include "pvmp3_dec_defs.h"
|
||
|
|
||
|
/*----------------------------------------------------------------------------
|
||
|
; MACROS
|
||
|
; Define module specific macros here
|
||
|
----------------------------------------------------------------------------*/
|
||
|
#ifdef __cplusplus
|
||
|
extern "C"
|
||
|
{
|
||
|
#endif
|
||
|
|
||
|
/*----------------------------------------------------------------------------
|
||
|
; DEFINES
|
||
|
; Include all pre-processor statements here.
|
||
|
----------------------------------------------------------------------------*/
|
||
|
|
||
|
/*----------------------------------------------------------------------------
|
||
|
; EXTERNAL VARIABLES REFERENCES
|
||
|
; Declare variables used in this module but defined elsewhere
|
||
|
----------------------------------------------------------------------------*/
|
||
|
|
||
|
/*----------------------------------------------------------------------------
|
||
|
; SIMPLE TYPEDEF'S
|
||
|
----------------------------------------------------------------------------*/
|
||
|
|
||
|
/*----------------------------------------------------------------------------
|
||
|
; ENUMERATED TYPEDEF'S
|
||
|
----------------------------------------------------------------------------*/
|
||
|
typedef enum
|
||
|
{
|
||
|
flat = 0,
|
||
|
bass_boost = 1,
|
||
|
rock = 2,
|
||
|
pop = 3,
|
||
|
jazz = 4,
|
||
|
classical = 5,
|
||
|
talk = 6,
|
||
|
flat_ = 7
|
||
|
|
||
|
} e_equalization;
|
||
|
|
||
|
|
||
|
|
||
|
typedef enum ERROR_CODE
|
||
|
{
|
||
|
NO_DECODING_ERROR = 0,
|
||
|
UNSUPPORTED_LAYER = 1,
|
||
|
UNSUPPORTED_FREE_BITRATE = 2,
|
||
|
FILE_OPEN_ERROR = 3, /* error opening file */
|
||
|
CHANNEL_CONFIG_ERROR = 4, /* error in channel configuration */
|
||
|
SYNTHESIS_WINDOW_ERROR = 5, /* error in synthesis window table */
|
||
|
READ_FILE_ERROR = 6, /* error reading input file */
|
||
|
SIDE_INFO_ERROR = 7, /* error in side info */
|
||
|
HUFFMAN_TABLE_ERROR = 8, /* error in Huffman table */
|
||
|
COMMAND_LINE_ERROR = 9, /* error in command line */
|
||
|
MEMORY_ALLOCATION_ERROR = 10, /* error allocating memory */
|
||
|
NO_ENOUGH_MAIN_DATA_ERROR = 11,
|
||
|
SYNCH_LOST_ERROR = 12,
|
||
|
OUTPUT_BUFFER_TOO_SMALL = 13 /* output buffer can't hold output */
|
||
|
} ERROR_CODE;
|
||
|
|
||
|
/*----------------------------------------------------------------------------
|
||
|
; STRUCTURES TYPEDEF'S
|
||
|
----------------------------------------------------------------------------*/
|
||
|
|
||
|
typedef struct
|
||
|
#ifdef __cplusplus
|
||
|
tPVMP3DecoderExternal
|
||
|
#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.
|
||
|
*/
|
||
|
uint8 *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 MP3 library.
|
||
|
*/
|
||
|
int32 inputBufferCurrentLength;
|
||
|
|
||
|
/*
|
||
|
* INPUT/OUTPUT:
|
||
|
* Number of elements used by the library, initially set to zero by
|
||
|
* the function pvmp3_resetDecoder(), and modified by each
|
||
|
* call to pvmp3_framedecoder().
|
||
|
*/
|
||
|
int32 inputBufferUsedLength;
|
||
|
|
||
|
/*
|
||
|
* OUTPUT:
|
||
|
* holds the predicted frame size. It used on the test console, for parsing
|
||
|
* purposes.
|
||
|
*/
|
||
|
uint32 CurrentFrameLength;
|
||
|
|
||
|
/*
|
||
|
* INPUT:
|
||
|
* This variable holds the type of equalization used
|
||
|
*
|
||
|
*
|
||
|
*/
|
||
|
e_equalization equalizerType;
|
||
|
|
||
|
|
||
|
/*
|
||
|
* 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.
|
||
|
*/
|
||
|
int32 inputBufferMaxLength;
|
||
|
|
||
|
/*
|
||
|
* OUTPUT:
|
||
|
* The number of channels decoded from the bitstream.
|
||
|
*/
|
||
|
int16 num_channels;
|
||
|
|
||
|
/*
|
||
|
* OUTPUT:
|
||
|
* The number of channels decoded from the bitstream.
|
||
|
*/
|
||
|
int16 version;
|
||
|
|
||
|
/*
|
||
|
* OUTPUT:
|
||
|
* The sampling rate decoded from the bitstream, in units of
|
||
|
* samples/second.
|
||
|
*/
|
||
|
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;
|
||
|
|
||
|
/*
|
||
|
* INPUT/OUTPUT:
|
||
|
* In: Inform decoder how much more room is available in the output buffer in int16 samples
|
||
|
* Out: Size of the output frame in 16-bit words, This value depends on the mp3 version
|
||
|
*/
|
||
|
int32 outputFrameSize;
|
||
|
|
||
|
/*
|
||
|
* INPUT:
|
||
|
* Flag to enable/disable crc error checking
|
||
|
*/
|
||
|
int32 crcEnabled;
|
||
|
|
||
|
/*
|
||
|
* OUTPUT:
|
||
|
* This value is used to accumulate bit processed and compute an estimate of the
|
||
|
* bitrate. For debugging purposes only, as it will overflow for very long clips
|
||
|
*/
|
||
|
uint32 totalNumberOfBitsUsed;
|
||
|
|
||
|
|
||
|
/*
|
||
|
* 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.
|
||
|
*/
|
||
|
|
||
|
int16 *pOutputBuffer;
|
||
|
|
||
|
} tPVMP3DecoderExternal;
|
||
|
|
||
|
uint32 pvmp3_decoderMemRequirements(void);
|
||
|
|
||
|
void pvmp3_InitDecoder(tPVMP3DecoderExternal *pExt,
|
||
|
void *pMem);
|
||
|
|
||
|
void pvmp3_resetDecoder(void *pMem);
|
||
|
|
||
|
ERROR_CODE pvmp3_framedecoder(tPVMP3DecoderExternal *pExt,
|
||
|
void *pMem);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
/*----------------------------------------------------------------------------
|
||
|
; END
|
||
|
----------------------------------------------------------------------------*/
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|