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

📄 sfapi.c

📁 此为在MTK手机平台上添加软解码MP4要修改的源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
	kal_get_time(&pDataTime->nMill);
}

/**
* @brief 开始播放一个声音
* @param pSndBuffer - 声音缓冲
* @param uBufferSize - 声音缓冲大小
* @param format - 声音数据格式
* @param nLoopCount - 0表示循环播放,其他表示播放次数
* @return 播放ID
*/
SFSND_ID SFSnd_Play(void*pSndBuffer,unsigned int uBufferSize,SFSND_FORMAT format,int nLoopCount)
{
	if(!g_bBgMusicOn
		|| (MMI_PROFILE_SILENT == gactivatedprofile)
		|| (MMI_PROFILE_MEETING == gactivatedprofile))
	{
		return 0;
	}
	
//Output audio only through the earphone when earphone plugged
	if(isEarphonePlugged)
	{
		if(format==SNDFORMAT_MIDI)
		{
			if(g_kernal.bMidiPlaying)
				mdi_audio_stop_string();
			//PlayAudioMidiStream((U8*)pSndBuffer,(U16)uBufferSize,0);
			mdi_audio_play_string_with_vol_path(pSndBuffer,uBufferSize,MDI_FORMAT_SMF,nLoopCount==1?DEVICE_AUDIO_PLAY_ONCE:DEVICE_AUDIO_PLAY_INFINITE,SFNull,SFNull,255,MDI_DEVICE_SPEAKER2);
			g_kernal.bMidiPlaying=SFTrue;
			return 1;
		}
		else if(format==SNDFORMAT_WAVE)
		{
			if(g_kernal.bWavPlaying)
				mdi_audio_stop_string();
			//PlayAudioWavStream((U8*)pSndBuffer,(U16)uBufferSize,0);
			mdi_audio_play_string_with_vol_path(pSndBuffer,uBufferSize,MDI_FORMAT_WAV,nLoopCount==1?DEVICE_AUDIO_PLAY_ONCE:DEVICE_AUDIO_PLAY_INFINITE,SFNull,SFNull,255,MDI_DEVICE_SPEAKER2);
			g_kernal.bWavPlaying=SFTrue;
			return 2;
		}
	}
	else
     {
	if(format==SNDFORMAT_MIDI)
	{
		if(g_kernal.bMidiPlaying)
			mdi_audio_stop_string();
		mdi_audio_play_string_with_vol_path(pSndBuffer,uBufferSize,MDI_FORMAT_SMF,nLoopCount==1?DEVICE_AUDIO_PLAY_ONCE:DEVICE_AUDIO_PLAY_INFINITE,SFNull,SFNull,255,MDI_DEVICE_SPEAKER_BOTH);
		g_kernal.bMidiPlaying=SFTrue;
		return 1;
	}
	else if(format==SNDFORMAT_WAVE)
	{
		if(g_kernal.bWavPlaying)
			mdi_audio_stop_string();
		mdi_audio_play_string_with_vol_path(pSndBuffer,uBufferSize,MDI_FORMAT_WAV,nLoopCount==1?DEVICE_AUDIO_PLAY_ONCE:DEVICE_AUDIO_PLAY_INFINITE,SFNull,SFNull,255,MDI_DEVICE_SPEAKER_BOTH);
		g_kernal.bWavPlaying=SFTrue;
		return 2;
	}
     }
     return 0;
}
/**
* @brief 结束并关闭声音的播放
* @param idSnd - 播放声音ID
*/
void SFSnd_Stop(SFSND_ID idSnd)
{
	if(idSnd==1)
	{
		mdi_audio_stop_string();
	}
	else if(idSnd==2)
	{
		mdi_audio_stop_string();
	}
    }


SFFS_HANDLE SFFS_Open(UString path,SFUint flags)
{
#ifdef WIN32
	g_kernal.fpFile=_wfopen(path,(flags&SFFSF_READ)?L"rb":L"wb");
	if(!g_kernal.fpFile)
		return 0;
	return 1;
#else
	//暂时关闭存档功能
	g_kernal.hFile=FS_Open(path,(flags&SFFSF_READ)?FS_READ_ONLY:(FS_READ_WRITE|FS_CREATE));
	if(g_kernal.hFile<0)//???
		return 0;
	return 1;
#endif
	
}

SFSize_T SFFS_Read(SFFS_HANDLE hFile,SFAnyPtr buf,SFSize_T sz)
{
#ifdef WIN32
	if(!g_kernal.fpFile)
		return (SFSize_T)0;
	return (SFSize_T)fread(buf,1,sz,g_kernal.fpFile);
#else
	UINT len=0;
	FS_Read(g_kernal.hFile,buf,(UINT)sz,&len);
	return (SFSize_T)len;
#endif
}

SFSize_T SFFS_Write(SFFS_HANDLE hFile,const SFAny* buf,SFSize_T sz)
{
#ifdef WIN32
	if(!g_kernal.fpFile)
		return (SFSize_T)0;
	return (SFSize_T)fwrite(buf,1,sz,g_kernal.fpFile);
#else
	UINT len=0;
	FS_Write(g_kernal.hFile,(void*)buf,(UINT)sz,&len);
	return (SFSize_T)len;
#endif
}

void SFFS_Close(SFFS_HANDLE hHandle)
{
#ifdef WIN32
	if(!g_kernal.fpFile)
		return;
	fclose(g_kernal.fpFile);
#else
	FS_Close(g_kernal.hFile);
#endif
}

SFBool SFFS_GetSize(SFFS_HANDLE hHandle,SFSize_T*pSz)
{
#ifdef WIN32
	long fsz=_filelength(g_kernal.fpFile->_file);
	if(fsz>=0)
	{
		*pSz=fsz;
		return SFTrue;
	}
	return SFFalse;
#else
	UINT sz=0;
	FS_GetFileSize(g_kernal.hFile,&sz);
	*pSz=sz;
	return  SFTrue;
#endif
}

void SFScreen_DrawTextN(UString str,SFInt length,SFInt x,SFInt y,SFUint32 cr)
{
	S32 str_w, str_h,str_size;
	SFInt i;
	SFInt cursor_x =x;
	color text_color;
	U8 buf[4]={0,0,0,0};
	

	text_color.alpha=((cr & 0xff00000)>>24) & 0xff;
	text_color.r=((cr & 0x00ff0000)>>16) & 0xff;
	text_color.g=((cr & 0x0000ff00)>>8) & 0xff;
	text_color.b=((cr & 0x000000ff)) & 0xff;
	
      gui_set_text_color(text_color);

	for(i=0;i<length;i++){
		gui_move_text_cursor(cursor_x,y);
		buf[0]=((str[i]) &  0xff);
		buf[1]=((str[i]>>8) & 0xff);
		gui_print_text((UI_string_type)buf);
		cursor_x+=SFFont_GetCharWidth(str[i]);
	}
}

extern void SFSms_Callback(unsigned char status);
SFSMS_ID SFSms_Send(const UChar*pNumber,const UChar *pContent)
{
#if 0
	int i;
	char buf[64];
	for(i=0;i<63;i++)
	{
		if(pNumber[i])
			buf[i]=(char)pNumber[i];
		else
			break;
	}
	buf[i]='\0';
	mmi_send_short_message(buf,(unsigned char*)pContent,1,SFSms_Callback);
	return 1;
#endif
}

SFBool SFSystem_HasSim(void)
{
	if(mmi_bootup_is_sim_valid())
	{
		return SFTrue;
	}
	else
	{
		return SFFalse;
	}
}


//Data_Account Interface
extern void DataAccountReadyCheck(FuncPtr ready_callback);
extern void GPRSAppDTCNTSelect( FuncPtrShort callback, U16 AppMenuID);
extern kal_uint8 custom_get_csd_profile_num();
void game_select_account(void) 
{ 

#if 0 
#ifdef  __MMI_GPRS_FEATURES__     
       GPRSAppDTCNTSelect(mmi_game_prof_data_acct_callback, MENU_ID_SNOWFISH_APP); 
#else
       AppDTCNTSelect(mmi_game_prof_data_acct_callback,MENU_ID_SNOWFISH_APP);
#endif
#endif/*remove end*/
} 

void mmi_game_prof_data_acct_callback(U16 index) 
{ 
#ifdef  __MMI_GPRS_FEATURES__     
	g_mtk_nwk_account_id = (S32)(index+custom_get_csd_profile_num()); 
#else
	g_mtk_nwk_account_id = (S32)index; 
#endif
	mmi_game_prof_save_data_acct();
#ifdef MMI_ON_HARDWARE_P
       kal_prompt_trace(MOD_MMI,"mmi_game_prof_data_acct_callback get account is %d",g_mtk_nwk_account_id);
#endif

} 

/**
 * @brief 浏览并选择一个文件以供之后打开
 * @param aBuffer - 接受文件名的缓冲
 * @param aMaxSize - 缓冲以字符为单位的大小,含0结尾
 * @param abOpenFile - 是否是打开文件还是保存文件
 * @param aFilter - 过滤字符串,格式为"*.aaa;*.bbb",如果为SFNull表示"*.*"
 * @param aReason - 异步调用的通知结果的存放地址,调用后应当设为SF_REASON_BUSY,然后在系统处理完后设置实际的处理结果,成功的话设为SF_REASON_OK
 * @remarks 这是一个异步调用,调用后将在之后控制权交还系统时离开本应用进入系统的打开界面,之后回到应用再设置结果。
 */
void SFSystem_SelectFile(UChar* aBuffer,SFSize_T aMaxSize,SFBool bOpenFile,const UChar* aFilter,SFReason* aReason)
{
	if(bOpenFile)
	{
		AnsiiToUnicodeString((S8 *)aBuffer,(S8 *)"d:\\demo.nes");
		* aReason = SF_REASON_OK;
	}
}

#define 	SF_SOUND_BUFFER_SIZE 		0x8000
kal_uint8	u8_g_sound_buffer[SF_SOUND_BUFFER_SIZE];

#if defined(__MTK_TARGET__)
#pragma arm section code = "AUDIOAPICODE",rwdata = "AUDIOAPIRW", zidata = "AUDIOAPIZI"
#endif
kal_uint8	u8_g_sound_playflag=0;		// 声音播放标志
kal_uint8	*pu8_g_sound_bufstart;		// 声音数据缓冲区首地址
kal_uint32	u32_g_sound_bufsize;		// 声音缓冲区大小
kal_uint8	*pu8_g_sound_out_ptr;		// 声音播出指针
kal_uint8	*pu8_g_sound_in_ptr;		// 声音写入指针


/**
* @brief 创建一个PCM播放设备
* @param aFormat - 必须为0
* @param aSamplesPerSec - 每秒的采样数
* @param aBit - 采样精度8/16
* @param aChannel - 声道
* @return 创建的声音设备
*/
SFPCMDevice device;
SFPCMDevice* SFPCMDevice_Create(SFInt aFormat,SFInt aSamplesPerSec,SFInt
aBit,SFInt aChannel)
{
	PARAM_UNUSED(aFormat);
	PARAM_UNUSED(aSamplesPerSec);
	PARAM_UNUSED(aChannel);
	return &device;
}

/**
* @brief 开始播放指定的设备
* @param aDevice - 播放的设备
*/
void SFPCMDevice_Start(SFPCMDevice* aDevice)
{
	PARAM_UNUSED(aDevice);

	if((MMI_PROFILE_SILENT == gactivatedprofile)
		|| (MMI_PROFILE_MEETING == gactivatedprofile))
	{
		return;
	}
	
	u8_g_sound_playflag = 1;
	pu8_g_sound_bufstart = (U8 *)u8_g_sound_buffer;
	u32_g_sound_bufsize = SF_SOUND_BUFFER_SIZE;
	pu8_g_sound_in_ptr = pu8_g_sound_out_ptr = pu8_g_sound_bufstart;

	memset(pu8_g_sound_bufstart,0x0,u32_g_sound_bufsize);
	
	mdi_audio_play_string(pu8_g_sound_bufstart, u32_g_sound_bufsize, 
		MDI_FORMAT_PCM_8K, DEVICE_AUDIO_PLAY_INFINITE, NULL, NULL);
}

/**
* @brief 停止声音播放
* @param aDevice - 播放的设备
*/
void SFPCMDevice_Stop(SFPCMDevice* aDevice)
{
	PARAM_UNUSED(aDevice);

	if((MMI_PROFILE_SILENT == gactivatedprofile)
		|| (MMI_PROFILE_MEETING == gactivatedprofile))
	{
		return;
	}
	
	u8_g_sound_playflag = 0;
	mdi_audio_stop_string();
}

/**
* @brief 关闭设备
* @param aDevice - 创建的声音设备
*/
void SFPCMDevice_Close(SFPCMDevice* aDevice)
{
	PARAM_UNUSED(aDevice);
	if(u8_g_sound_playflag == 1)
	{
		u8_g_sound_playflag = 0;
		mdi_audio_stop_string();
	}
	return;
}

#if defined(__MTK_TARGET__)
#pragma arm section code rwdata zidata
#endif

/**
* @brief 设置设备的音量
* @param aDevice - 创建的声音设备
* @param aVolume - 设置的音量
*/
void SFPCMDevice_SetVolume(SFPCMDevice* aDevice,SFInt aVolume)
{
	PARAM_UNUSED(aDevice);
	PARAM_UNUSED(aVolume);
}

/**
* @brief 获取设备的音量
* @param aDevice - 创建的声音设备
* @return 音量
*/
SFInt SFPCMDevice_GetVolume(SFPCMDevice* aDevice)
{
	PARAM_UNUSED(aDevice);
	return 0;
}

void mmi_game_prof_save_data_acct(void)
{
#if 0 
	DeleteUptoScrID(SCR_ID_SNOWFISH_APP);
	GoBackHistory();
#endif/*remove end*/
}

SFSize_T SFApp_GetCommandLine(UChar* aBuffer,SFSize_T aSize)
{	
	SFSize_T realSize;
	
	realSize = pfnUnicodeStrlen((S8 *)u16_g_game_file_name);

	if(realSize >= aSize)
	{
		realSize = aSize - 1;
	}

	if(realSize > 0)
	{
		pfnUnicodeStrncpy((PS8)aBuffer, (PS8)u16_g_game_file_name,realSize);
		aBuffer[realSize + 1] = 0x0;		
	}

	return realSize;
}

#define		KEY_REGISTER_TIME		0x80200230
#define		KEY_REGISTER_LOW		0x80110004
#define		KEY_REGISTER_MID		0x80110008
#define		KEY_REGISTER_HIG		0x8011000c

#define		KEY_PUB_LSK				0xfeff//KP_LOW_KEY
#define		KEY_PUB_RSK				0xfbff//KP_LOW_KEY
#define		KEY_PUB_LEFT				0xffdf//KP_MID_KEY
#define		KEY_PUB_RIGHT			0xefff//KP_MID_KEY
#define		KEY_PUB_UP				0xff7f//KP_LOW_KEY
#define		KEY_PUB_DOWN			0xbfff//KP_LOW_KEY
#define		KEY_PUB_OK				0x3f7 //KP_HIG_KEY
#define		KEY_PUB_CALL			0xfdff//KP_LOW_KEY
#define		KEY_PUB_POUND			0x2bf //KP_HIG_KEY
#define		KEY_PUB_0				0x3df //KP_HIG_KEY
#define		KEY_PUB_1				0x7fff//KP_LOW_KEY
#define		KEY_PUB_4				0xffbf//KP_MID_KEY
#define		KEY_PUB_5				0xff7f//KP_MID_KEY
#define		KEY_PUB_6				0xfeff//KP_MID_KEY
#define		KEY_PUB_7				0xdfff//KP_MID_KEY
#define		KEY_PUB_8				0xbfff//KP_MID_KEY
#define		KEY_PUB_STAR			0x3ef //KP_HIG_KEY
#define		KEY_PUB_9				0x7fff//KP_MID_KEY
#define		KEY_PUB_2				0xfffe//KP_MID_KEY
#define		KEY_PUB_3				0xfffd//KP_MID_KEY
#define		KEY_PUB_ESC				0xffbf //KP_LOW_KEY
#define		KEY_PUB_VOLUP				0xfffb //KP_MID_KEY
#define		KEY_PUB_VOLDOWN			0xf7ff //KP_LOW_KEY
#define             KEY_PUB_FUNC1			0xfffd//KP_LOW_KEY
#define             KEY_PUB_FUNC2			0xfffb//KP_LOW_KEY

#define		REGISTER_PUB_LSK		KEY_REGISTER_LOW
#define		REGISTER_PUB_RSK		KEY_REGISTER_LOW
#define		REGISTER_PUB_LEFT		KEY_REGISTER_MID
#define		REGISTER_PUB_RIGHT		KEY_REGISTER_MID
#define		REGISTER_PUB_UP			KEY_REGISTER_LOW
#define		REGISTER_PUB_DOWN		KEY_REGISTER_LOW
#define		REGISTER_PUB_OK			KEY_REGISTER_HIG
#define		REGISTER_PUB_CALL		KEY_REGISTER_LOW
#define		REGISTER_PUB_POUND		KEY_REGISTER_HIG
#define		REGISTER_PUB_0			KEY_REGISTER_HIG
#define		REGISTER_PUB_1			KEY_REGISTER_LOW
#define		REGISTER_PUB_4			KEY_REGISTER_MID
#define		REGISTER_PUB_5			KEY_REGISTER_MID
#define		REGISTER_PUB_6			KEY_REGISTER_MID
#define		REGISTER_PUB_7			KEY_REGISTER_MID
#define		REGISTER_PUB_8			KEY_REGISTER_MID
#define		REGISTER_PUB_STAR		KEY_REGISTER_HIG
#define		REGISTER_PUB_9			KEY_REGISTER_MID
#define		REGISTER_PUB_2			KEY_REGISTER_MID
#define		REGISTER_PUB_3			KEY_REGISTER_MID
#define		REGISTER_PUB_ESC		KEY_REGISTER_LOW
#define		REGISTER_PUB_VOLUP		KEY_REGISTER_MID
#define		REGISTER_PUB_VOLDOWN		KEY_REGISTER_LOW
#define             REGISTER_PUB_FUNC1		KEY_REGISTER_LOW
#define             REGISTER_PUB_FUNC2		KEY_REGISTER_LOW


SFUint32 SFSystem_GetKeyState(void)
{
	SFUint32 keyValue = 0;
			
	if(g_bRotate90
	    #if defined(__IMT_LCD_ROTATE_MMI__)
	    && !gMMILcdRotateState
	    #endif
	    )
	{
		//if(!(DRV_Reg32(REGISTER_PUB_1)&(~KEY_PUB_1)))
		//{
		//	keyValue |= SFKS_UP;
		//	keyValue |= SFKS_RIGHT;
		//}
		if(!(DRV_Reg32(REGISTER_PUB_UP)&(~KEY_PUB_UP)))
		{
			keyValue |= SFKS_RIGHT;
		}
		//if(!(DRV_Reg32(REGISTER_PUB_3)&(~KEY_PUB_3)))
		//{
		//	keyValue |= SFKS_DOWN;
		//	keyValue |= SFKS_RIGHT;
		//}
		if(!(DRV_Reg32(REGISTER_PUB_LEFT)&(~KEY_PUB_LEFT)))
		{
			keyValue |= SFKS_UP;
		}
		if(!(DRV_Reg32(REGISTER_PUB_RIGHT)&(~KEY_PUB_RIGHT)))
		{
			keyValue |= SFKS_DOWN;
		}
		//if(!(DRV_Reg32(REGISTER_PUB_7)&(~KEY_PUB_7)))
		//{
		//	keyValue |= SFKS_UP;
		//	keyValue |= SFKS_LEFT;
		//}
		if(!(DRV_Reg32(REGISTER_PUB_DOWN)&(~KEY_PUB_DOWN)))
		{
			keyValue |= SFKS_LEFT;
		}
		//if(!(DRV_Reg32(REGISTER_PUB_9)&(~KEY_PUB_9)))
		//{

⌨️ 快捷键说明

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