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

📄 sampmp3.h

📁 Linux下的intel的ipp库使用
💻 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 + -