📄 mpadecoder.h
字号:
/******************************************************************************
* Filename : MPADecoder.h *
* Start date : 2002.12.24 *
* By : Lee Kyung Tae *
* Contact : kyungtae.lee@samsung.com *
* Description : *
* $Log:$ *
******************************************************************************
*/
#ifndef _MPA_DECODER_H_
#define _MPA_DECODER_H_
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#define VERSION "Revision 1.0 build 2002.10.16, ADM"
#define CALMSHINE_VERSION "1.41 Dec-20-2002"
#define MPEG_AUDIO_DECODER_VERSION "MPEG Audio Multichannel Decoder v1.0"
/* MPEG version information */
#define MPEG_1 0 /* mpeg audio stereo decoder */
#define MPEG_2 1 /* mpeg audio 5.1-ch decoder */
#define MPEG_2a 2 /* mpeg audio 7.1-ch decoder */
#define LAYER_I 1
#define LAYER_II 2
#define LAYER_III 3
/* Dynamic range control option: stream dependent */
#define DRC_OPT 0
/* Extension stream option */
#define EXT_PRESENT 1
#define EXT_NONE 0
#define MAX_CHANNELS 10 /* 7.1-ch + downmix */
#define SYNTH_CHANNELS 7 /* 7-ch */
#define WINDOW_SIZE 1024
#define FRAME_SIZE_I 384
#define FRAME_SIZE_II 1152
#define MAX_MPG_FRAME_SIZE 1728 /* max for layer II */
#define MAX_EXT_FRAME_SIZE 2047 /* max for layer II */
//#define BS_MPG_PTR ((unsigned char *) 0x240000)
//#define BS_EXT_PTR ((unsigned char *) 0x240800)
//#define BS_MC_PTR ((unsigned char *) 0x241000)
#define BS_MC_PTR ((unsigned char *) 0x212000)
#define PCM_BUF_PTR ((signed short *) 0x280000)
#define BUF_UNIT_SIZE 0x1000
typedef signed short PCM[1152][10];
typedef signed short SYN[7][1024];
typedef enum {
/* decoding message */
DECODE_OK = 0,
MPG_SYNC_NOT_FOUND,
EXT_SYNC_NOT_FOUND,
BASE_CRC_ERROR,
MC_CRC_ERROR,
EXT_CRC_ERROR,
CRC_CHECK_YES,
CRC_RECOVERED,
ILLEGAL_LAYER,
ILLEGAL_DOWNMIX_MODE,
ILLEGAL_MATRIX_MODE,
MC_PRED_MODE,
/* stream information */
NO_MAIN_AUDIO_DATA,
NO_EXT_AUDIO_DATA,
END_OF_BITSTREAM,
END_OF_FILE,
/* decoder status information */
MPEG_DECODE_READY,
MPEG_DECODE_SUSPEND,
MPEG_DECODE_STARTED,
MPEG_DECODE_END,
/* system flags */
FAIL_MEM_ALLOC,
UNKNOWN_ERROR = -1
} ErrCode;
union _mpg_header {
unsigned long data; /* 4 bytes header */
struct {
unsigned syncword :12;
unsigned version : 1;
unsigned layer : 2;
unsigned protection_bit : 1;
unsigned bitrate_index : 4;
unsigned sampling_freq : 2;
unsigned padding_bit : 1;
unsigned private_bit : 1;
unsigned mode : 2;
unsigned mode_extension : 2;
unsigned copyright : 1;
unsigned original : 1;
unsigned emphasis : 2;
} syntax;
};
union _ext_header {
unsigned long data; /* 5 bytes header */
struct {
unsigned ext_syncword :12;
unsigned ext_crc_check : 4;
unsigned ext_crc_check1 :12;
unsigned ext_length : 4;
unsigned ext_length1 : 7;
unsigned ext_ID : 1;
} syntax;
};
union _DRC_info {
unsigned int data; /* 16 bits DRC information */
struct {
unsigned DRC_GainX : 3;
unsigned DRC_GainY : 5;
unsigned DRC_flag : 1;
unsigned reserved : 7;
} syntax;
};
struct _header_info {
/* MPEG Audio header information */
unsigned short syncword;
unsigned short version;
unsigned short layer;
unsigned short protection_bit;
unsigned short bitrate_index;
unsigned short sampling_frequency;
unsigned short padding_bit;
unsigned short private_bit;
unsigned short mode;
unsigned short mode_extension;
unsigned short copyright;
unsigned short original;
unsigned short emphasis;
unsigned short crc_val;
unsigned short ext_stream_present;
unsigned short n_ad_bytes;
unsigned short center;
unsigned short surround;
unsigned short lfe;
unsigned short audio_mix;
unsigned short dematrix_procedure;
unsigned short no_of_multi_lingual_ch;
unsigned short multi_lingual_fs;
unsigned short multi_lingual_layer;
unsigned short copyright_ident_bit;
unsigned short copyright_ident_start;
unsigned short mc_crc_val;
unsigned short ext_syncword;
unsigned short ext_crc_val;
unsigned short ext_length;
unsigned short ext_ID;
unsigned short aug_crc_val;
};
struct _layer_info {
/* MPEG Audio layer information */
unsigned short frameNo;
unsigned short frame_size;
unsigned short ext_frameNo;
unsigned short stereo; /* 1 for mono, 2 for stereo */
unsigned short sblimit; /* total number of sub bands */
unsigned short jsbound; /* first band of joint stereo coding */
unsigned short tbl_num; /* allocation table number 0..3 */
unsigned short mc_sblimit; /* total number of MC subbands */
unsigned short mc_channel;
unsigned short mc_prediction_on;
unsigned short tc_sbgr_select;
unsigned short tc_allocation;
unsigned short tc_alloc_bits; /* to read the right length of tc_alloc field */
unsigned short dyn_cross_on;
unsigned short dyn_cross_LR;
unsigned short dyn_cross_bits; /* to read the right length of dyn_cross field */
unsigned short lfe_allocation;
unsigned short lfe_scalefactor;
unsigned short aug_mtx_proc;
unsigned short aug_dyn_cross_on;
unsigned short aug_future_ext;
unsigned short aug_channel;
unsigned short layer_I_frames;
unsigned short layer_I_parts;
unsigned short alloc_tbl_ptr;
unsigned short error_count;
unsigned short mandatory_crc_check;
unsigned short mpeg_version;
unsigned short channel_config;
unsigned short base_last_pos;
unsigned short drc_gainX;
unsigned short drc_gainY;
};
unsigned int MPA_GetNumberOfSamples ( void );
unsigned long MPA_GetSamplingRate ( void );
unsigned long MPA_GetBitRate ( void );
void Audio_stop(void);
void Audio_restart(void);
void Audio_Mute(BOOL enable);
void Audio_True_Mute(BOOL enable);
void MPA_SetPLL(ULONG newfreq);
void MPA_PLL_setclock(ULONG sample_rate);
/* Defined in mpa.h */
extern unsigned int header_info;
extern unsigned int layer_info;
extern unsigned int syn_buffer;
#endif /* _MPA_DECODER_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -