⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 libmp3enc.h

📁 mp3编码库
💻 H
字号:
/*
   CopyRight (C) Sigma Designs, Inc.
   2003 - 2004
   All Right Reserved.

   Purpose:		MPEG-1 Layer III audio encoder, supports LFS encoding.
   Description: LIBHEADER File
   Date:		Jan.30, 2004   

   Note:		This code is based on ISO reference DIST 10, and heavily 
				modified and optimized by David for running it on embedded processor
				without floating point co-processor.
				total complexity: 65 MIPS (estimated on Jasper II)
*/

#ifndef _LIBMP3ENC_H_
#define _LIBMP3ENC_H_

#define u8  unsigned char
#define i8  char
#define u32 unsigned int
#define i32 int
#define i16 short int

#ifdef WIN32
#define i64 __int64
#define u64 unsigned __int64
#else
#define i64 long long
#define u64 unsigned long long
#endif

#define         SBLIMIT                 32
#define         HAN_SIZE                512

/* MPEG Header Definitions - Mode Values */

#define         MPG_MD_STEREO           0
#define         MPG_MD_JOINT_STEREO     1
#define         MPG_MD_DUAL_CHANNEL     2
#define         MPG_MD_MONO             3


#ifndef			FALSE
#define         FALSE                   0
#endif

#ifndef			TRUE
#define         TRUE                    1
#endif


/* General Definitions */

#define         NULL_CHAR               '\0'

#define         MAX_U_32_NUM            0xFFFFFFFF

#ifndef			PI
#define         PI                      3.14159265358979
#endif

#define         PI4                     PI/4
#define         PI64                    PI/64
#define         LN_TO_LOG10             0.2302585093

#define         VOL_REF_NUM             0
#define         MPEG_AUDIO_ID           1
#define			MPEG_PHASE2_LSF			0	/* 1995-07-11 SHN */
#define         MAC_WINDOW_SIZE         24

#define         MONO                    1
#define         STEREO                  2
#define         BITS_IN_A_BYTE          8
//#define         SBLIMIT                 32
#define         SSLIMIT                 18
#define         FFT_SIZE                1024
//#define         HAN_SIZE                512
#define         SCALE_BLOCK             12
#define         SCALE_RANGE             64
#define         SCALE                   32768
#define         CRC16_POLYNOMIAL        0x8005



/* Mode Extention */

#define         MPG_MD_LR_LR             0
#define         MPG_MD_LR_I              1
#define         MPG_MD_MS_LR             2
#define         MPG_MD_MS_I              3


/***********************************************************************
*
*  Global Type Definitions
*
***********************************************************************/

typedef struct
{
	i32 pos;
	u32 reg;

	u32 * buf;
	u32 * ptr;
}BitWriter;

/* Header Information Structure */

typedef struct {
    i32 version;
    i32 lay;
    i32 error_protection;
    i32 bitrate_index;
    i32 sampling_frequency;
    i32 padding;
    i32 extension;
    i32 mode;
    i32 mode_ext;
    i32 copyright;
    i32 original;
    i32 emphasis;
} layer, *the_layer;

/* Parent Structure Interpreting some Frame Parameters in Header */

typedef struct {
    layer       header;        /* raw header information */
    i32         actual_mode;    /* when writing IS, may forget if 0 chs */
    i32         stereo;         /* 1 for mono, 2 for stereo */
    i32         jsbound;        /* first band of joint stereo coding */
    i32         sblimit;        /* total number of sub bands */
} frame_params;

typedef struct {
	u32 part2_3_length;
	u32 big_values;
	u32 count1;
 	u32 global_gain;
	u32 scalefac_compress;
	u32 window_switching_flag;
	u32 block_type;
	u32 mixed_block_flag;
	u32 table_select[3];
	i32 subblock_gain[3];
	u32 region0_count;
	u32 region1_count;
	u32 preflag;
	u32 scalefac_scale;
	u32 count1table_select;

	u32 part2_length;
	u32 sfb_lmax;
	u32 sfb_smax;
	u32 address1;
	u32 address2;
	u32 address3;
	i32 quantizerStepSize;
	/* added for LSF */
	u32 *sfb_partition_table;
	u32 slen[4];
	u32 StepSize;
} gr_info;

typedef struct {
	i32 main_data_begin; /* u32 -> i32 */
	u32 private_bits;
	i32 resvDrain;
	// use them for quantization
	i32 prevQuant[2];	// for two channels
	i32 prevStep[2];	// for two channels

	u32 scfsi[2][4];
	i32 xrmax[2][2];
	struct {
		struct gr_info_s {
			gr_info tt;
			} ch[2];
		} gr[2];
} III_side_info_t;

/* Layer III scale factors. */

typedef struct {
	i32 l[2][2][22];            /* [cb] */
	i32 s[2][2][13][3];         /* [window][cb] */
	} III_scalefac_t;  /* [gr][ch] */


typedef struct{
	i32 samplesPerFrame;
	i32 whole_SpF;
	i32 frac_SpF;
	i32 slot_lag;

	i16 buffer[2][1152];
	i32 l3_sb_sample[2][3][18][SBLIMIT];
	i32 xr[2][2][576];	
	i32 l3_enc[2][2][576];
	i32 x[2][HAN_SIZE];
	i32 y[64];

	i32 en_tot[2][2]; /* ch,gr */
	i32 en[2][2][21];
	i32 xm[2][2][21];
	i32 f[32];
	i32 off[2];

    frame_params fr_ps;    
	III_side_info_t l3_side;
	III_scalefac_t  scalefac;

	BitWriter bw;
	
}MP3CODEC;

/* Implementations */
i32 init_MP3codec(MP3CODEC *mp3codec, layer *input);
i32 MP3_encoding(u8 *f_buf, MP3CODEC *mp3codec);
i32 deinit_MP3codec(MP3CODEC *mp3codec, u8 *buf);
i32 SmpFrqIndex(i32 sRate, i32  *version);  /* convert samp frq in Hz to index */
i32 getBitRateIndex(i32 kay, i32 brate, i32 version);
i8 * getVersionName(i32 version);

i8 * getLayerName(i32 lay);

i8 * getModeName(i32 mode);

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -