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

📄 sfapi.c

📁 此为在MTK手机平台上添加软解码MP4要修改的源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
		//	keyValue |= SFKS_DOWN;
		//	keyValue |= SFKS_LEFT;
		//}	
	}
	else
	{
#if 0 /*wdp replace begin for game key  @2007.7.20*/
		if(!(DRV_Reg32(REGISTER_PUB_1)&(~KEY_PUB_1)))
		{
			keyValue |= SFKS_UP;
			keyValue |= SFKS_LEFT;
		}
		if(!(DRV_Reg32(REGISTER_PUB_2)&(~KEY_PUB_2)))
		{
			keyValue |= SFKS_UP;
		}
		if(!(DRV_Reg32(REGISTER_PUB_3)&(~KEY_PUB_3)))
		{
			keyValue |= SFKS_UP;
			keyValue |= SFKS_RIGHT;
		}
		if(!(DRV_Reg32(REGISTER_PUB_4)&(~KEY_PUB_4)))
		{
			keyValue |= SFKS_LEFT;
		}
		if(!(DRV_Reg32(REGISTER_PUB_6)&(~KEY_PUB_6)))
		{
			keyValue |= SFKS_RIGHT;
		}
		if(!(DRV_Reg32(REGISTER_PUB_7)&(~KEY_PUB_7)))
		{
			keyValue |= SFKS_DOWN;
			keyValue |= SFKS_LEFT;
		}
		if(!(DRV_Reg32(REGISTER_PUB_8)&(~KEY_PUB_8)))
		{
			keyValue |= SFKS_DOWN;
		}
		if(!(DRV_Reg32(REGISTER_PUB_9)&(~KEY_PUB_9)))
		{
			keyValue |= SFKS_DOWN;
			keyValue |= SFKS_RIGHT;
		}
		
		if(!(DRV_Reg32(REGISTER_PUB_7)&(~KEY_PUB_7)))
		{
			keyValue |= SFKS_NUM7;
		}
		if(!(DRV_Reg32(REGISTER_PUB_POUND)&(~KEY_PUB_POUND)))
		{
			keyValue |= SFKS_NUM8;
		}		
#else/*replace by follow*/
		#if !defined(__MMI_GAME_SIMU_ONLY_SUPPORT_ROTATE_LCD__)
			if(!(DRV_Reg32(REGISTER_PUB_UP)&(~KEY_PUB_UP)))
				keyValue |= SFKS_UP;
			if(!(DRV_Reg32(REGISTER_PUB_DOWN)&(~KEY_PUB_DOWN)))
				keyValue |= SFKS_DOWN;
			if(!(DRV_Reg32(REGISTER_PUB_LEFT)&(~KEY_PUB_LEFT)))
				keyValue |= SFKS_LEFT;
			if(!(DRV_Reg32(REGISTER_PUB_RIGHT)&(~KEY_PUB_RIGHT)))
				keyValue |= SFKS_RIGHT;	
		#else
			if(!(DRV_Reg32(REGISTER_PUB_0)&(~KEY_PUB_0)))//SELECT
			keyValue |= SFKS_NUM0;			
		#endif

#endif/*replace end*/
	}

	if(!(DRV_Reg32(REGISTER_PUB_7)&(~KEY_PUB_7)))//暂停/开始
		keyValue |= SFKS_NUM7;
	if(!(DRV_Reg32(REGISTER_PUB_8)&(~KEY_PUB_8)))//?
		keyValue |= SFKS_NUM8;
	if(!(DRV_Reg32(REGISTER_PUB_FUNC2)&(~KEY_PUB_FUNC2)))//跳起
		keyValue |= SFKS_NUM1;	
	if(!(DRV_Reg32(REGISTER_PUB_FUNC1)&(~KEY_PUB_FUNC1)))//开枪
		keyValue |= SFKS_NUM2;			
	//if(!(DRV_Reg32(REGISTER_PUB_VOLDOWN)&(~KEY_PUB_VOLDOWN)))
	//	keyValue |= SFKS_NUM1;	
	//if(!(DRV_Reg32(REGISTER_PUB_VOLUP)&(~KEY_PUB_VOLUP)))
	//	keyValue |= SFKS_NUM2;	
		
	//if(!(DRV_Reg32(REGISTER_PUB_LEFT)&(~KEY_PUB_LEFT)))//旋转屏幕
	//	keyValue |= SFKS_NUM0;
	if(!(DRV_Reg32(REGISTER_PUB_9)&(~KEY_PUB_9)))//打开/关闭游戏音效
		keyValue |= SFKS_NUM9;		

	return keyValue;
	
}

void SFPCMDevice_GetCurrentPosition(SFPCMDevice* self,SFUint32*
pPlayCursor,SFUint32* pWriteCursor)
{
	PARAM_UNUSED(self);
	if(pPlayCursor)
	{
		*pPlayCursor=(uint32)(pu8_g_sound_out_ptr-pu8_g_sound_bufstart);
	}
	
	if(pWriteCursor)
	{
		*pWriteCursor=(uint32)(pu8_g_sound_in_ptr-pu8_g_sound_bufstart);
	}	
}

void SFPCMDevice_LockBuffer(SFPCMDevice* self,SFUint32 offset,SFUint32
size,SFAny** pBuf0,SFUint32* pBufSize0,SFAny** pBuf1,SFUint32* pBufSize1)
{
	if((MMI_PROFILE_SILENT == gactivatedprofile)
		|| (MMI_PROFILE_MEETING == gactivatedprofile))
	{
		*pBuf0 = NULL;
		*pBuf1 = NULL;
		*pBufSize0 = 0;
		*pBufSize1 = 0;
		return;
	}

	if(offset==0xFFFFFFFF)
	{
		SFPCMDevice_GetCurrentPosition(self,SFNull,&offset);
	}
	
	if(offset+size>SF_SOUND_BUFFER_SIZE)
	{
		*pBuf0=pu8_g_sound_bufstart+offset;
		*pBufSize0=SF_SOUND_BUFFER_SIZE-offset;

		*pBuf1=pu8_g_sound_bufstart;
		*pBufSize1=offset+size-SF_SOUND_BUFFER_SIZE;
	}
	else
	{
		*pBuf0=pu8_g_sound_bufstart+offset;
		*pBufSize0=size;

		*pBuf1=SFNull;
		*pBufSize1=0;
	}
}

void SFPCMDevice_UnlockBuffer(SFPCMDevice* self,SFAny* aBuf0,SFUint32
aBufSize0,SFAny* aBuf1,SFUint32 aBufSize1)
{
	//提交音频数据
	if(aBuf1 && aBufSize1)
	{
		pu8_g_sound_in_ptr=(SFUint8*)aBuf1+aBufSize1;
	}
	else
	{
		pu8_g_sound_in_ptr=(SFUint8*)aBuf0+aBufSize0;
	}

//提交_pSndCommitBegin到_pSndCommitEnd的数据,提交完毕让_pSndCommitBegin= _pSndCommitEnd

}

#if 0
const U8	*u8_g_game_dir=(U8 *)L"D:\\game\\";

S32 mmi_gamesimu_create_file_dir(S8 *filepath)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    S8 buf_createpath[128];
    S8 buf_filepath[FMGR_PATH_BUFFER_SIZE];
    S32 fs_ret;
    S32 str_len;
    S32 cmp_ret;
    S32 i;
    FS_HANDLE file_handle;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    fs_ret = 0;

    file_handle = FS_Open((kal_uint16*) filepath, FS_OPEN_DIR | FS_READ_ONLY);

    /* path already exist */
    if (file_handle >= 0)
    {
        FS_Close(file_handle);
        return 0;   /* already exist, 0 means successful in file system */
    }

    /* create directory if it is not there */
    pfnUnicodeStrcpy((PS8) buf_filepath, (PS8) filepath);

    str_len = pfnUnicodeStrlen((PS8) buf_filepath);
    str_len *= ENCODING_LENGTH;

    /* skip drive. "C:\" */
    for (i = 3 * ENCODING_LENGTH; i < str_len; i += 2)
    {
        cmp_ret = pfnUnicodeStrncmp((PS8) & buf_filepath[i], (PS8) L"\\", 1);
        if (cmp_ret == 0)
        {
            /* create dir */

            pfnUnicodeStrncpy((PS8) buf_createpath, (PS8) buf_filepath, i / ENCODING_LENGTH);
            buf_createpath[i] = '\0';
            buf_createpath[i + 1] = '\0';

            fs_ret = FS_CreateDir((PU16) buf_createpath);

            if (fs_ret < 0)
            {
                return fs_ret;
            }
        }
    }

    return fs_ret;
}

void mmi_gamesimu_exit_from_fmgr(void *filename, int is_short)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    //DeleteUptoScrID(SCREENID_GAMESIMU_LIST);
    DeleteNHistory(1);
    GoBackHistory();
}

void EntryRomList(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    S8 buf_filepath[FMGR_PATH_BUFFER_SIZE];
    FS_HANDLE file_handle;
    FMGR_FILTER filter;
    S32 create_result;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
   memset(buf_filepath,0x00,FMGR_PATH_BUFFER_SIZE);
   pfnUnicodeStrcpy((S8 *)buf_filepath,(const S8 *)u8_g_game_dir);

    #ifndef NAND_SUPPORT
    if(fmgr_is_msdc_present() == FALSE)
    {
          DisplayPopup((PU8)GetString(STR_GLOBAL_NO_CARD), IMG_GLOBAL_EMPTY,0, 1000, EMPTY_LIST_TONE);
          return;
    }
    #endif

//    EntryNewScreen(SCREENID_GAMESIMU_LIST, NULL, EntryRomList, NULL);

    create_result = mmi_gamesimu_create_file_dir(buf_filepath);

    /* check if it is valid path */
    file_handle = FS_Open((PU16) buf_filepath, FS_OPEN_DIR | FS_READ_ONLY);

    if (file_handle >= 0)
    {
        FS_Close(file_handle);

        FMGR_FILTER_INIT(&filter);
	
	FMGR_FILTER_SET(&filter,FMGR_TYPE_NES);

        mmi_fmgr_select_path_and_enter(
            //APP_GAME_SIMU,
            APP_DSM,
            FMGR_SELECT_BROWSE,
            filter,
            buf_filepath,
            (PsExtFuncPtr) mmi_gamesimu_exit_from_fmgr);

        /* check if device is busy or not */
        if (FS_GetDevStatus(buf_filepath[0], FS_FEATURE_STATE_ENUM) == FS_DEVICE_BUSY)
        {
            /*  mmi_fmgr_select_path_and_enter will also add screen to histry */
//            DeleteUptoScrID(SCREENID_GAMESIMU_LIST);

            /* Delete up to previous screen */
            DeleteNHistory(1);
        }
    }
    else
    {
        {
            /* storage is card */

            /* photo's path is not exist, and card is write protected, cant create photo folder */
            if (create_result == FS_WRITE_PROTECTION)
            {
                DisplayPopup(
                    (PU8) GetString(FMGR_FS_WRITE_PROTECTION_TEXT),
                    IMG_GLOBAL_WARNING,
                    1,
                    ST_NOTIFYDURATION,
                    WARNING_TONE);
            }
            else if (create_result == FS_DISK_FULL)
            {
                DisplayPopup(
                    (PU8) GetString(FMGR_FS_DISK_FULL_TEXT),
                    IMG_GLOBAL_WARNING,
                    1,
                    ST_NOTIFYDURATION,
                    WARNING_TONE);
            }
            else if (create_result == FS_ROOT_DIR_FULL)
            {
                DisplayPopup(
                    (PU8) GetString(FMGR_FS_ROOT_DIR_FULL_TEXT),
                    IMG_GLOBAL_WARNING,
                    1,
                    ST_NOTIFYDURATION,
                    WARNING_TONE);
            }
            else
            {
        /*        DisplayPopup(
                    (PU8) GetString(STR_GLOBAL_NOTIFY_NO_MEMORY_CARD),
                    IMG_GLOBAL_WARNING,
                    1,
                    ST_NOTIFYDURATION,
                    WARNING_TONE);*/
            }

            DeleteUptoScrID(SCREENID_GAMESIMU);
            return;

        }
    }
}
#endif
#endif

void* sf_system_malloc(unsigned int size)
{
	//return SnowFishMemPool;//med_alloc_ext_mem(size);
	return med_alloc_ext_mem(size);
}

void* sf_system_malloc_fast(unsigned int size)
{
	void* ptr;

	ptr = med_alloc_int_mem(size);
	return ptr;
}

void sf_system_free(void*ptr)
{
	med_free_ext_mem(&ptr);
}

void sf_system_free_fast(void*ptr)
{
	med_free_int_mem(&ptr);
}



#if defined(__SF_MP4_SUPPORT__)

#include "med_global.h" 
#include "med_utility.h" 
#include "mdi_video.h" 

static void LCDDisplay_adrs (const lcd_frame_update_struct *lcd_param, void* adrs, U8 layer)
{
	kal_uint16 w, h;
	lcd_frame_update_struct lcd_data = {0};

	lcd_power_up();

	w = lcd_param->lcm_end_x - lcd_param->lcm_start_x + 1;
	h = lcd_param->lcm_end_y - lcd_param->lcm_start_y + 1;

	if (layer == 0)
	{
		SET_LCD_LAYER0_WINDOW_SIZE(w,h);
		SET_LCD_LAYER0_WINDOW_OFFSET(0,0);
		SET_LCD_LAYER0_ROTATE(lcd_param->rotate_value);
		lcd_data.update_layer=LCD_LAYER0_ENABLE;

		REG_LCD_LAYER0_BUFF_ADDR = (kal_uint32) adrs;
	}
	else if (layer == 1)
	{
		SET_LCD_LAYER1_WINDOW_SIZE(w,h);
		SET_LCD_LAYER1_WINDOW_OFFSET(0,0);
		SET_LCD_LAYER1_ROTATE(lcd_param->rotate_value);
		lcd_data.update_layer=LCD_LAYER1_ENABLE;

		REG_LCD_LAYER1_BUFF_ADDR = (kal_uint32) adrs;
	}
	else if (layer == 2)
	{
		SET_LCD_LAYER2_WINDOW_SIZE(w,h);
		SET_LCD_LAYER2_WINDOW_OFFSET(0,0);
		SET_LCD_LAYER2_ROTATE(lcd_param->rotate_value);
		lcd_data.update_layer=LCD_LAYER2_ENABLE;

		REG_LCD_LAYER2_BUFF_ADDR = (kal_uint32) adrs;
	}
	else if (layer == 3)
	{
		SET_LCD_LAYER3_WINDOW_SIZE(w,h);
		SET_LCD_LAYER3_WINDOW_OFFSET(0,0);
		SET_LCD_LAYER3_ROTATE(lcd_param->rotate_value);
		lcd_data.update_layer=LCD_LAYER3_ENABLE;

		REG_LCD_LAYER3_BUFF_ADDR = (kal_uint32) adrs;
	}
	else
	{
		MMI_ASSERT(0);
	}


	if (lcd_param->rotate_value == MDI_VIDEO_LCD_ROTATE_0)
	{
		lcd_data.roi_offset_x = 0;
		lcd_data.roi_offset_y = 0;
	}
	else
	{
		lcd_data.roi_offset_x = lcd_param->roi_offset_x;
		lcd_data.roi_offset_y = lcd_param->roi_offset_y;
	}

	lcd_data.lcm_start_x = lcd_param->lcm_start_x;
	lcd_data.lcm_start_y = lcd_param->lcm_start_y;
	lcd_data.lcm_end_x = lcd_param->lcm_end_x;
	lcd_data.lcm_end_y = lcd_param->lcm_end_y;
	lcd_data.rotate_value = lcd_param->rotate_value;
	lcd_data.update_layer = lcd_param->update_layer;
	lcd_data.hw_update_layer = lcd_param->hw_update_layer;

	lcd_data.module_id = LCD_UPDATE_MODULE_JPEG_VIDEO;
	lcd_data.lcd_id = MAIN_LCD;
	lcd_data.fb_update_mode = LCD_SW_TRIGGER_MODE;
	lcd_data.memory_output  = KAL_FALSE;
	lcd_data.block_mode_flag = KAL_TRUE;
	lcd_data.lcd_block_mode_cb = NULL;

	lcd_fb_update(&lcd_data);
}

extern void vdo_get_active_buffer(U8** ptr);

void SF_vdo_screen_update(const lcd_frame_update_struct *lcd_param)
{
	U8 *buf_ptr;
	U8  layer_pos;

	if ((lcd_param->hw_update_layer & LCD_LAYER0_ENABLE) != 0)
		layer_pos = 0;
	else if ((lcd_param->hw_update_layer & LCD_LAYER1_ENABLE) != 0)
		layer_pos = 1;
	else if ((lcd_param->hw_update_layer & LCD_LAYER2_ENABLE) != 0)
		layer_pos = 2;
	else if ((lcd_param->hw_update_layer & LCD_LAYER3_ENABLE) != 0)
		layer_pos = 3;
	else
		MMI_ASSERT(0);

	vdo_get_active_buffer(&buf_ptr);

	if (lcd_param->rotate_value == MDI_VIDEO_LCD_ROTATE_270)
	{
		//{{方案一
		//START_LCD_TRANSFER;
		//}}方案一
		
		//{{方案二
		gdi_layer_blt_previous(lcd_param->lcm_start_y, lcd_param->lcm_start_x, lcd_param->lcm_end_y, lcd_param->lcm_end_x);
		//}}方案二
	}
	else
	{
		LCDDisplay_adrs(lcd_param, buf_ptr, layer_pos);
	}
}

SFBool SFSystem_IsTouchSupported(void)
{
	return SFTrue;
}
#endif

⌨️ 快捷键说明

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