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

📄 mp3eutil.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_parse_cmdline_mp3()//    buffer_copy_audio()//    buffer_set_audio()//    encoder_flushbitstream_mp3()******************************************************************************/#include <malloc.h>#include <memory.h>#include "sampmp3.h"/******************************************************************************// Name:             buffer_copy_audio// Description:      copy content of one buffer to another buffer// Input Arguments : src    - pointer to input buffer.//                   len    - length for copy.// Output Arguments: dst    - pointer to output buffer.// Returns:          N/A******************************************************************************/void  buffer_copy_audio(const Ipp32s * src, Ipp32s * dst, int len){    int  i;    for (i = 0; i < len; i++)	{        dst[i] = src[i];	}    return;}/******************************************************************************// Name:             buffer_set_audio// Description:      set the content of buffer to be a const.// Input Arguments : val    - value to set the buffer.//                   len    - buffer length for set.// Output Arguments: dst    - pointer to output buffer.// Returns:	         N/A******************************************************************************/void buffer_set_audio(Ipp32s val, Ipp32s * dst, int len){    int  i;    for ( i = 0; i < len; i ++ ) {        dst[i] = val;	}    return;}/******************************************************************************// Name:                free_align_mem_mp3// Description:         Free aligned memory blocks//// Input Arguments://      buf_addr_ptr    Pointer to the void pointer to the allocated space//                      with alignment off_set.//// Output Arguments://      buf_addr_ptr    Pointer to a NULL void pointer//// Returns://     SAMPLE_STATUS_NOERR  If succeeds******************************************************************************/sample_status   free_align_mem_mp3(void **buf_addr_ptr) {    Ipp8u   off_set = 0;    Ipp8u   *addr = NULL;    addr  = (Ipp8u*)(*buf_addr_ptr);    off_set = *(addr - 1);    addr -= off_set;    free((void*)addr);    *buf_addr_ptr = NULL;    return SAMPLE_STATUS_NOERR;}/******************************************************************************// Name:                alloc_align_mem_mp3// Description:         Allocate aligned memory blocks//// Input Arguments://      buf_addr_ptr    Pointer to the void pointer to the allocated space//      size            Number of bytes to be allocated//      alignstatus     Number of bytes to be aligned, e.g., 2 for half//                      word aligned, 4 for word aligned, 8 for double word//                      aligned//// Output Arguments://      buf_addr_ptr    Pointer to the void pointer to the allocated space//// Returns://     SAMPLE_STATUS_NOERR      If succeeds//     SAMPLE_STATUS_NOMEM_ERR  If memory allocation fails******************************************************************************/sample_status alloc_align_mem_mp3(void **buf_addr_ptr,                                    int  size,                                    int  alignstatus){    Ipp8u *addr = NULL;    Ipp8u tmp = 0;        size  += alignstatus;    addr  = malloc(size);    if (!addr) {        *buf_addr_ptr = NULL;        return SAMPLE_STATUS_NOMEM_ERR;    }    tmp = (Ipp8u)((Ipp32u)(addr) & (alignstatus - 1));    tmp = (Ipp8u)(alignstatus - tmp);    addr += tmp;    *(addr - 1) = tmp;    *buf_addr_ptr = (void*)addr;    return SAMPLE_STATUS_NOERR;}/******************************************************************************// Name:             encoder_flushbitstream_mp3// Description:      flush the encoded data into output buffer.// Input Arguments : enc_state  - pointer to encode state structure.// Output Arguments: stream_buf - pointer to output structure.// Returns:	         N/A******************************************************************************/void encoder_flushbitstream_mp3(mp3_enc_state *enc_state,                                 sample_bitstream *stream_buf) {	int i,j;	int bytes_per_frame;	int maindataindex;	int bytesbuffered;	int bufferedframeindex;	int bufferedmaindataindex;	int bufferedframe_num;	/*Check if the bits are enough to flush*/	maindataindex = enc_state->bufferedframe_index - \        enc_state->bufferedframe_num;	bufferedframe_num = enc_state->bufferedframe_num;	if(maindataindex < 0) {		maindataindex +=9;	}	bytesbuffered = enc_state->hdsi_len; 	for ( i = maindataindex; i < maindataindex + bufferedframe_num; i ++ ) {		j = i;		if (i>=9) {			j-=9;		}		bytesbuffered += enc_state->mdframe_buf_len[j];	}	bufferedframeindex =  maindataindex;	bufferedmaindataindex = bufferedframeindex;	bytes_per_frame = enc_state->frame_len[bufferedframeindex];	if ( bytesbuffered > bytes_per_frame ) { 		int len1, len2;        /* Flush header information and side infomation */		for ( i = 0; i < enc_state->hdsi_len; i ++ ) {			*stream_buf->bs_cur_byte ++ = enc_state->hdsi_buf\                [bufferedframeindex*enc_state->hdsi_len+i];		}		len1 = bytes_per_frame - enc_state->hdsi_len;        /* Flush main data */		while ( len1 > 0 && bufferedframe_num > 0 ) {			len2 = IPP_MIN(len1, enc_state->mdframe_buf_len\                [bufferedmaindataindex]); 			j = 0;			for (j = 0; j < len2; i ++, j ++ ) {				*stream_buf->bs_cur_byte ++ = enc_state->mdframe_buf_ptr\                    [bufferedmaindataindex][j];			}			len1 -= len2;			enc_state->mdframe_buf_len[bufferedmaindataindex] -= len2;			enc_state->mdframe_buf_ptr[bufferedmaindataindex] += len2;			bufferedmaindataindex ++;			if(bufferedmaindataindex == 9) {				bufferedmaindataindex =0;			}		}				bufferedframe_num --;	}	enc_state->bufferedframe_num = bufferedframe_num;	return;}

⌨️ 快捷键说明

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