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

📄 mp3einit.c

📁 Intel提供的在Sitsang等嵌入式开发平台上使用Linux操作系统
💻 C
字号:
/******************************************************************************//               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://    encoder_init_alloc_mp3()//    encoder_free_mp3()******************************************************************************/#include "sampmp3.h"/******************************************************************************// Name:			 encoder_init_alloc_mp3// Description:		 Initialize for MP3 encoder.// Input Arguments : enc_state  - pointer to encoder state structure.// Output Arguments: sound      - pointer to sound structure.//					 stream_buf - pointer to stream structure.//					 enc_state  - pointer to updated encoder state structure.// Returns:			 //          SAMPLE_STATUS_BADARG_ERR    - Bad argument//          SAMPLE_STATUS_NOERR         - Initialize successfully******************************************************************************/sample_status encoder_init_alloc_mp3(sample_sound *sound,                                      sample_bitstream *stream_buf,                                      mp3_enc_state *enc_state){		int headsideInfo_length;	int bit_rate;    int sampling_freq;	IppMP3FrameHeader *frame_header;	IppMP3EncPsychoAcousticModel2State *psy_state;	IppMP3PsychoacousticModelTwoAnalysis *psy_info;    int i,j,k;    int buf_size;    int align;    /* Bad argument check */	if(!(sound && stream_buf && enc_state)) {		return SAMPLE_STATUS_BADARG_ERR;	}    /* Allocate buffer for input PCM */    buf_size = (enc_state->channel_num == 1)?2304: 4608;    align = 2;    if (alloc_align_mem_mp3((void*)&sound->snd_frame, buf_size, align)        != SAMPLE_STATUS_NOERR) {        return SAMPLE_STATUS_NOMEM_ERR;    }    /* Initialize sound structure */	sound->snd_len = (enc_state->channel_num == 1)?2304:4608;	sound->snd_channel_num = enc_state->channel_num;	sound->snd_sample_rate = mpeg1_samplerate_table[enc_state->sample_rate];    /* Allocate buffer for input PCM */    buf_size = 1024*8 + 1;    align = 1;    if (alloc_align_mem_mp3((void*)&stream_buf->bs_buffer, buf_size, align)        != SAMPLE_STATUS_NOERR) {        return SAMPLE_STATUS_NOMEM_ERR;    }    /* Initialize output bit stream structure */	stream_buf->bs_bytelen = MP3_STREAMBUF_SIZE;	stream_buf->bs_cur_byte = stream_buf->bs_buffer;	stream_buf->bs_cur_bitoffset = 0;	/* Initialize encode state structure */	headsideInfo_length = 4 + ((enc_state->channel_num == 2)?32:17);	enc_state->hdsi_len = headsideInfo_length;	enc_state->bytes_per_frame = mpeg1_slot_table[enc_state->sample_rate]\        [enc_state->bitrate_index];	enc_state->bits_per_frame = ((enc_state->bytes_per_frame) <<3);	enc_state->meanbits_num = enc_state->bits_per_frame - ((enc_state->hdsi_len)<<3);    /* enc_state->frame_byte_dif is used to detemine whether     //or not to use padding */	bit_rate = mpeg1_bitrate_table[enc_state->bitrate_index];	sampling_freq = mpeg1_samplerate_table[enc_state->sample_rate];	enc_state->frame_byte_dif = 144 * bit_rate - \        ( enc_state->bytes_per_frame) * sampling_freq;    /* Initialize the header and side info buffer */	enc_state->hdsi_buf_ptr = enc_state->hdsi_buf;	for(i=0; i<MP3_HEADERSIDEINFOBUF_SIZE; i++) {		enc_state->hdsi_buf_ptr[i] = 0;	}    /* Initialize the main data buffer */	enc_state->cur_maindata_buf = enc_state->maindata_buf;	for(i=0; i<MP3_MAINDATABUF_SIZE; i++) {		enc_state->cur_maindata_buf[i] = 0;	}    /* Initialize the scalefactor buffer */	for(i = 0; i < IPP_MP3_SF_BUF_LEN*MP3_MAXGRANNULE_NUM*MP3_MAXCHANNEL_NUM; i ++) {		enc_state->scale_factor[i] = 0;	}    /* Initialize the scalefactor selection info */	for(i = 0; i < MP3_SCFBANDGROUP_NUM*IPP_MP3_CHANNEL_NUM; i ++) {		enc_state->scfsi[i] = 0;	}	for(i=0; i<6; i++) {		enc_state->is_sfb_bound[i] = 0;	}	for(i = 0; i < MP3_FRAME_LEN; i ++) {		enc_state->overlap_buf[i] = 0;	}    /* Initialize the input PCM buffer */ 	for(i = 0; i < MP3_INPUTPCMBUF_SIZE; i ++) {		enc_state->pcm_state_buf[i] = 0;	}	buffer_set_audio(0, enc_state->work_buf, MP3_WORKBUF_SIZE);		enc_state->rest = 0;	/*Initialize the psycho-acoustic model status */	for(i = 0; i < MP3_MAXGRANPERFRAME_NUM; i ++) {		psy_state = &(enc_state->psy_state[i]);		for(j = 0; j < 2; j ++) {			for(k = 0; k < IPP_MP3_PSY_BAND_LONG_NUM; k ++) {				psy_state->pPrevMaskedThresholdLong[j][k] = (Ipp64s)0;			}			for(k = 0; k < FIRST_6_CW; k ++) {				psy_state->pPrevFFT[j][k].re = 0;				psy_state->pPrevFFT[j][k].im = 0;				psy_state->pPrevFFTMag[j][k] = 0;			}		}		for(j = 0; j < IPP_MP3_PSY_BAND_SHORT_NUM; j ++) {			psy_state->pPrevMaskedThresholdShort[j] = 0;		}		psy_state->nextPerceptualEntropy = 0;		psy_state->nextBlockType = 0;		for(j = 0; j < IPP_MP3_SF_BUF_LEN; j ++) {			psy_state->pNextMSRLong[j] = 0;			psy_state->pNextMSRShort[j] = 0;		}	}	/* Initialize the psycho-acoustic model output info */	for(i=0;i<MP3_MAXGRANPERFRAME_NUM;i++) {		psy_info = &(enc_state->psy_info[i]);		for(j=0; j< 36; j++) {			psy_info->pPsyMSR[j] = 0;		}		psy_info->PE = 0;	}	/* Initialize the output buffer control information */	buffer_set_audio(0, &(enc_state->bufferedframe_num), 1);	buffer_set_audio(0, &(enc_state->bufferedframe_index),1);	buffer_set_audio(0, enc_state->mdframe_buf_len, MP3_MAXBUFFEREDFRAME_NUM);	buffer_set_audio(0, enc_state->frame_len, MP3_MAXBUFFEREDFRAME_NUM);	for(i =0; i<MP3_MAXBUFFEREDFRAME_NUM; i++) {		enc_state->mdframe_buf_ptr[i] = NULL;		}	/* Initialize frame header */	frame_header = &enc_state->frame_header;	frame_header->samplingFreq = enc_state->sample_rate;	frame_header->bitRate = enc_state->bitrate_index;	frame_header->id = 1;	if(enc_state->channel_num == 2) {		frame_header->mode = 1;				frame_header->modeExt = 2;		} else {		frame_header->mode = 3;		frame_header->modeExt = 0;	}	frame_header->layer = 1;	frame_header->protectionBit = 1;	frame_header->paddingBit = 1;	frame_header->privateBit = 0;	frame_header->copyright = 0;	frame_header->originalCopy = 0;	frame_header->emphasis = 0;	frame_header->CRCWord = 0;	/* Intialize the bit reservoir */	ippsBitReservoirInit_MP3(&(enc_state->bit_resv), frame_header);	return SAMPLE_STATUS_NOERR;} sample_status encoder_free_mp3(sample_sound *sound,                                 sample_bitstream *stream_buf){    /* Free buffer for input PCM */    free_align_mem_mp3((void*)&sound->snd_frame);    /* Free buffer for output bit stream */    free_align_mem_mp3((void*)&stream_buf->bs_buffer);    return SAMPLE_STATUS_NOERR;}

⌨️ 快捷键说明

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