📄 sampmp3.h
字号:
/******************************************************************************
// INTEL CORPORATION PROPRIETARY INFORMATION
// This software is supplied under the terms of a license agreement or
// nondisclosure agreement with Intel Corporation and may not be copied
// or disclosed except in accordance with the terms of that agreement.
// Copyright (C) 2003 Intel Corporation. All Rights Reserved.
//
// Description:
// Intel(R) Integrated Performance Primitives Sample Code MP3 Encoder
//
// Function List:
// MP3 Encoder Definitions
******************************************************************************/
#ifndef _SAMPMP3_H_
#define _SAMPMP3_H_
#include "sampdefs.h" /* General sample code header file*/
#include "ippAC.h" /* Audio Codec IPP external header file*/
#ifdef __cplusplus
extern "C" {
#endif
#define MP3_MPEG1_ID 1 /* id =1, MPEG1 */
#define MP3_MPEG2_ID 0 /* id =0, MPEG2 */
#define BITSPERBYTE_NUM 8 /* 8 bits per byte */
#define MP3_MAXGRANNULE_NUM 2 /* Maximum number of
// granule_num per channel */
#define MP3_MAXCHANNEL_NUM 2 /* Maximum number of channel_num */
#define MP3_SCFBANDGROUP_NUM 4 /* Number of scale_factor bands
// group per channel */
#define MP3_MAINDATABUF_SIZE 4096 /* Size of buffer used to
// store main data */
#define MP3_SAMPLERATE_NUM 3 /* Sample rate index (0 to 2) */
#define MP3_BITRATE_NUM 15 /* Bit rate index (0 to 14) */
#define MP3_STREAMBUF_SIZE 1024*8 /* Size of output bitstream
// buffer */
#define MP3_MAXGRANPERFRAME_NUM 4 /* Maximum number of granule_num
// in one frame */
#define MP3_HEADERSIDEINFOBUF_SIZE 324 /* Size of header and side
// information buffer */
#define MP3_MAXBUFFEREDFRAME_NUM 9 /* Maximum number of frame
// for buffer */
#define MP3_FRAME_LEN 1152 /* One channel PCM frame
// length for MPEG1 */
#define MP3_PQMFDELAY_LEN 1111 /* PQMF delay length = 576+55+480 */
#define MP3_WORKBUF_SIZE 6300 /* Work buffer length */
#define MP3_PQMFPSYDELAY_LEN 311 /* Delay between PQMF and Psy */
#define MP3_SUBBAND_NUM 32 /* Number of subband_num */
#define MP3_INPUTPCMBUF_SIZE ((MP3_PQMFDELAY_LEN+MP3_FRAME_LEN)\
*MP3_MAXCHANNEL_NUM)
/* Size of input PCM buffer */
/************************
// Status structure
*************************/
typedef struct _mp3_enc_state{
int channel_num; /* channel number (1:mono, 2:stereo) */
int sample_rate; /* sample rate index (0 to 14) */
int bitrate_index; /* bit rate index (0 to 2) */
int meanbits_num; /* average Main Data bits for one frame */
IppMP3SideInfo side_info[MP3_MAXGRANNULE_NUM][MP3_MAXCHANNEL_NUM];
/* buffer for side information */
IppMP3EncPsychoAcousticModel2State psy_state[MP3_MAXGRANPERFRAME_NUM];
/* buffer for Psychoacoustic
// state information */
IppMP3PsychoacousticModelTwoAnalysis psy_info[MP3_MAXGRANPERFRAME_NUM];
/* buffer for Psychoacoustic
// output information */
IppMP3FrameHeader frame_header; /* MP3 frame header */
Ipp8s scale_factor[IPP_MP3_SF_BUF_LEN*MP3_MAXGRANNULE_NUM*MP3_MAXCHANNEL_NUM];
/* Table of scalefactors */
int scfsi[MP3_SCFBANDGROUP_NUM * MP3_MAXCHANNEL_NUM];
/* Scalefactor select information */
int is_sfb_bound[3*MP3_MAXGRANNULE_NUM];
/* Is boundary */
IppMP3BitReservoir bit_resv; /* Bit reservoir information */
Ipp32s overlap_buf[MP3_FRAME_LEN];
/* overlap buffer used in MDCT */
Ipp16s pcm_state_buf[MP3_INPUTPCMBUF_SIZE];
/* buffer to store input PCM */
Ipp32s work_buf[MP3_WORKBUF_SIZE];
/* work buffer */
int rest; /* rest bits record when decide padding
// bits for current frame */
int frame_byte_dif; /* different bytes for one frame, a const
// when sample rate, bit rate are const */
int bytes_per_frame; /* bytes every frame used */
int bits_per_frame; /* bits every frame used */
Ipp8u maindata_buf[MP3_MAINDATABUF_SIZE];
/* buffer for main data */
Ipp8u *cur_maindata_buf; /* pointer to current main data */
Ipp8u hdsi_buf[MP3_HEADERSIDEINFOBUF_SIZE];
/* buffer for header and side info */
Ipp8u *hdsi_buf_ptr; /* pointer to current header
// and side info*/
int hdsi_len; /* length of header and side info */
int bufferedframe_index; /* index of next frame to be buffered */
int bufferedframe_num; /* number of frame should be buffered */
Ipp8u *mdframe_buf_ptr[MP3_MAXBUFFEREDFRAME_NUM];
/* pointer to every frame's main data */
int mdframe_buf_len[MP3_MAXBUFFEREDFRAME_NUM];
/* buffer for main data length
// of every frame */
int frame_len[MP3_MAXBUFFEREDFRAME_NUM];
/* real length for data between
// two syc words */
} mp3_enc_state;
/* Tables */
extern const int mpeg1_bitrate_table[MP3_BITRATE_NUM];
extern const int mpeg1_samplerate_table[MP3_SAMPLERATE_NUM];
extern const int mpeg1_slot_table[MP3_SAMPLERATE_NUM][MP3_BITRATE_NUM];
extern const int mpeg1_bitrate_table[MP3_BITRATE_NUM];
extern const int mpeg1_samplerate_table[MP3_SAMPLERATE_NUM];
/* Funcitons */
extern sample_status encoder_init_alloc_mp3(sample_sound *sound,
sample_bitstream *stream_buf,
mp3_enc_state *enc_state);
extern sample_status encode_mp3(sample_sound *sound,
sample_bitstream *stream_buf,
mp3_enc_state *enc_state);
extern sample_status encoder_free_mp3(sample_sound *sound,
sample_bitstream *stream_buf);
extern sample_status alloc_align_mem_mp3(void **buf_addr_ptr,
int size, int alignstatus);
extern sample_status free_align_mem_mp3(void **buf_addr_ptr);
extern void buffer_set_audio(Ipp32s val, Ipp32s * dst, int len);
extern void buffer_copy_audio(const Ipp32s * src, Ipp32s * dst, int len);
extern void encoder_flushbitstream_mp3(mp3_enc_state *enc_state,
sample_bitstream *stream_buf);
#ifdef __cplusplus
}
#endif
#endif /* #ifndef _SAMPMP3_H_ */
/* EOF */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -