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

📄 testapi.c

📁 中芯微camera 图像处理芯片演示
💻 C
📖 第 1 页 / 共 3 页
字号:
/*-------------------------------------------------------------------------------
// testApi.c
// 我的文档的主程序
// Create by jsguo 2005.9.19
--------------------------------------------------------------------------------*/

#include "../inc/nucleus.h"
#include "../inc/winconfig.h"
#include "MMI.h"
#include "../inc/windows.h"
#include "demoTest.h"
#include "../inc/high_api.h"
#include "../inc/44b.h"
#include "../inc/44blib.h"
#include "Extern.h"

#include "..\..\vc0528rdk\vim_high_api.h"
#include "..\..\vc0528rdk\VIM_AVI_Recorder.h"
#include "frame.h"

#include "..\inc\thin_usr.h"//"..\..\FS_library\fat_thin\thin_usr.h"
#include "..\inc\fat_thin.h"//"..\..\FS_library\fat_thin\fat_thin.h"

#include "../inc/nucleus.h"
#include "../inc/nu_sd.h"

#define VIM_USER_SUPPORT_REALTIME_ROTATION 1


extern NU_SERIAL_PORT  port;             
F_FILE *g_file;
/*=*=*=*=*=*=*=*=*=*=*=*=*=*=*angela start *=*=*=*=*=*=*=*=*=*=*=*=*/
extern char BypassUpdate;
UINT8 g_outindex=1;
UINT8 g_withframe=0;
UINT8 SpecialEffec = 0;
UINT8 CAPTUREEND;
UINT8 FastPreview;
#define FASET_PREVIEW
UINT8 BmpBuf[176*220*2];		//guoying 1/17/2008 add

void User_CaptureAviCallback(UINT8 Status, UINT32 Byte_Length);

/*=*=*=*=*=*=*=*=*=*=*=*=*=*=* angela end *=*=*=*=*=*=*=*=*=*=*=*=*/
SETTING_ITEM MMI_VideoSetting[]=
{
		{"拍照尺寸:",3,0},
		{"拍照质量:",3,0},	
		{"照片尺寸:",3,0},
};
SETTING_ITEM MMI_AudioSetting[]=
{
		{"SP",100,50},
		{"HP",100,50},	
		{"DAC",100,50},
		{"WAV",100,50},	
		{"MID",100,50},			
};
SETTING_ITEM MMI_SysSetting[]=
{
		{"LCD",100,50},			
};
char Cam_Resolution[][10]=
{
	"320x240",
	"640x480",
	"1280x960"
};
char Cam_Quality[][38]=
{
		"Fine",	
		"Normal",
		"Basic",	
};

/*=*=*=*=*=*=*=*=*=*=*=*=*MAINMENU*=*=*=*=*=*=*=*=*=*=*=*=*/
int User_initMain(void)
{
	return 1;
}
void MainMenu_MainList(UINT iMsg, WPARAM wParam, LPARAM lParam)
{
	VIM_HAPI_SetWorkMode(VIM_HAPI_MODE_BYPASS);//through mode power on lcd
	BypassUpdate=1;
	SetMainList(User_initMain);
	MWinMainForm(NULL,NULL,NULL,SW_SHOW);
}
/*=*=*=*=*=*=*=*=*=*=*=*=*Document*=*=*=*=*=*=*=*=*=*=*=*=*/
Menu DocumentMenu[] = {
	{ "HOST",	Menu_SDFileList},
};
Form FormDocumentList= { DocumentMenu,1,0};

int User_initDocument(void)
{
	return 1;
}
void Menu_DocumentList(UINT iMsg, WPARAM wParam, LPARAM lParam)
{
	SetDocumentList(User_initDocument,User_closeDocument,FormDocumentList);
	VMDocumentMain(NULL,NULL,NULL,SW_SHOW);
}
int User_closeDocument()
{
	return 1;
}
/*=*=*=*=*=*=*=*=*=*=*=*=*=*appFileList*=*=*=*=*=*=*=*=*=*=*=*=*/
#define MAX_FILE_ITEM 100
Menu FileListMenu[100] = {};
Form gMyFormFileListList = { FileListMenu,  100, 0};
int MMI_FileList_AddItem(char* str,int attr)
{
	char test[50];
	if(gMyFormFileListList.CurrentMenuItem>=100) 
		return 0; 
	strcpy(gMyFormFileListList.MenuList[gMyFormFileListList.CurrentMenuItem].MenuName, str);
	Uart_Printf("NAME1 is %s\n",str);
	Uart_Printf("NAME2 is %s\n",gMyFormFileListList.MenuList[gMyFormFileListList.CurrentMenuItem].MenuName);
	if (attr&F_ATTR_DIR)
	    	 gMyFormFileListList.MenuList[gMyFormFileListList.CurrentMenuItem].event=NULL;	    	 
	else
	    	 gMyFormFileListList.MenuList[gMyFormFileListList.CurrentMenuItem].event=Menu_MediaPlayer;
	gMyFormFileListList.CurrentMenuItem++;
	return 1;
}

extern int gnFileListselectItem;

int AppInit_FileList(const char *Dir)
{
	F_FIND FindFile;
	int filenum=0;
	Uart_Printf("\n %s",Dir);
	f_chdir(Dir);
	if (!f_findfirst("*.*",&FindFile)) 
	{
	do {
		Uart_Printf ("filename:%s",FindFile.filename);
		if (FindFile.attr&F_ATTR_DIR) 
			Uart_Printf ("directory\n");
		else 
			Uart_Printf ("size %d\n",FindFile.filesize);
		MMI_FileList_AddItem(FindFile.filename,FindFile.attr);
		filenum++;
		} while (!f_findnext(&FindFile));
	}	
	return filenum;
}

int User_InitFileList(void)
{
	f_initvolume();
	AppInit_FileList(".");
	return 1;

}
int USER_FileList_Delete(char* FileName)
{
	//f_delete(FileName);
	//MMD_FILE_Mount(0);
	/*if(MMD_FILE_Delete((unsigned char *)FileName))
		return 0;
	return 1;*/
}
int User_closeFileList()
{
	memset(&FileListMenu,0,sizeof(FileListMenu));
	return 1;	
}
void Menu_SDFileList(UINT iMsg, WPARAM wParam, LPARAM lParam)
{
	gMyFormFileListList.CurrentMenuItem=0;	
	SetFileList(User_InitFileList,User_closeFileList);
	VMFileListMain(NULL,NULL,NULL,SW_SHOW);
	SetFocus(GetActiveWindow());
}

/*=*=*=*=*=*=*=*=*=*=*=*=*=*DISPLAY*=*=*=*=*=*=*=*=*=*=*=*=*=*/
int gCalculagraphInParam=0;
int gSliderVolumeInParam=0;
int gSliderInParam=0;

void expiration_MediaPlayer(UNSIGNED id)
{	
	gSliderInParam+=3;
	gSliderVolumeInParam+=2;
	gCalculagraphInParam++;

	MMI_SetSliderValue(gSliderInParam);
	MMI_SetVolumeValue(gSliderVolumeInParam);
	MMI_SetCalculagraphValue(gCalculagraphInParam);	
}
//=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
#define JPEG_FILE	0
#define VIDEO_FILE	1 

UINT16 Displaywidth =176;//MAINFRAME_WIDTH_DEFAULT-8;
UINT16 DisplayHeight =220;//MAINFRAME_WIDTH_DEFAULT+30-4;
UINT16 Picturewidth=128;		//display pan source picture size
UINT16 PictureHeight=128;
UINT16 JpegOffsetX=0;		//display pan for up/down key
UINT16 JpegOffsetY=0;
UINT8   PanWidthIndex = 0;	//display pan class index (MAX=5)
UINT8   PanHeightIndex = 0;	//display pan class index (MAX=5)
UINT8   DisplayRotation = 0;	//display rotation index

UINT8   MediaPlayerFileEnd=0;	//=0 means file is not playing end, =1 means file playing finish
UINT8   MediaPlayerStatus=1;		//=1 means doing playing, =0 means not playing
UINT8   MediaPlayerFileType=0;	//=0 means file is picture, =1 means file is video
UINT8   g_UAudioStop = 1;
UINT32 framecounter=0;		//use for testing
UINT8 ZoomStep=0;			//use for display zoom testing, guoying 2/25/2008
/***************************************************************************************************
****************************************************************************************************/
void User_DisplayVideoCallback(UINT8 Status, UINT32 Parameter)
{
char result;
	switch (Status)
	{
	case VIM_HAPI_ONEFRAME_END:
		framecounter++;
		//Uart_Printf("\n display frame: %d",framecounter);
		break;
	case VIM_HAPI_CAPTURE_END:
		Beep(1);
		Delay(50);
		Beep(0);
		if(g_file)
		{
			
			result=f_close(g_file);
			Uart_Printf("\n close file ok!result=%d ",result);
		}
		MediaPlayerFileEnd=1;
		break;
	}
}
int User_GetPictureSize(void)
{
	UINT16 result;
	result=VIM_HAPI_GetPictureSize(&Picturewidth,&PictureHeight);
	Uart_Printf("\n VIM_HAPI_GetPictureSize return : %d  ",result);
	Uart_Printf("\n Picture source width : %d  ",Picturewidth);
	Uart_Printf("\n Picture source height : %d  ",PictureHeight);
	return 1;
}
int User_InitMediaPlayer(void)
{
	char *filename;
	Displaywidth =MAINFRAME_WIDTH_DEFAULT-8;
	DisplayHeight =MAINFRAME_WIDTH_DEFAULT+30-4;
	JpegOffsetX=JpegOffsetY=0;	
	PanHeightIndex=PanWidthIndex=0;
	DisplayRotation=SpecialEffec =0;
	MediaPlayerFileEnd=0;
	filename= MMI_GetFileListSelectItem_Name();
	if(strstr(filename,".JPG") || strstr(filename,".jpg"))
	{  
		MMI_SetMediaPlayerInfo("↑  PAN   ↓ ","←  PAN   →","ROTATION","CANCEL");
		MediaPlayerFileType=JPEG_FILE;
	}
	else if(strstr(filename,".MJPG") || strstr(filename,".mjpg")
	         ||strstr(filename,".AVI") || strstr(filename,".avi") )
	{   
		MMI_SetMediaPlayerInfo(NULL,NULL,"PAUSE/PLAY","CANCEL");
		MediaPlayerFileType=VIDEO_FILE;
	}
	else
		MediaPlayerFileType=0xff;
	

	return 1;
}
extern void User_DrawLCDBlack(UINT16 xStart,UINT16 yStart,UINT16 width,UINT16 height);

int USER_ExitInitMediaPlayer()
{
	char *filename;
	char result;
	filename= MMI_GetFileListSelectItem_Name();
	g_file=f_open(filename,"r");
	if(!g_file)
	{
		Uart_Printf("\n open file: %s error!",filename);
		return;
	}
	switch (MediaPlayerFileType)
	{
		case JPEG_FILE:
			BypassUpdate=0;
			VIM_HAPI_SetWorkMode(VIM_HAPI_MODE_PHOTOPROCESS);
			VIM_HAPI_SetEffect(VIM_HAPI_SPECIAL_NORMAL);
			VIM_HAPI_SetLCDMirror(VIM_HAPI_ROTATE_0,VIM_HAPI_A_LAYER);

			User_DrawLCDBlack(2,4,MAINFRAME_WIDTH_DEFAULT-4,MAINFRAME_WIDTH_DEFAULT+30);

			VIM_HAPI_SetLCDSize(VIM_HAPI_B0_LAYER,0,0,MAINFRAME_WIDTH_DEFAULT,32+4);
			VIM_HAPI_SetLCDSize(VIM_HAPI_B1_LAYER,0,MAINFRAME_WIDTH_DEFAULT+30,MAINFRAME_WIDTH_DEFAULT,
				MAINFRAME_HEIGHT_DEFAULT-MAINFRAME_WIDTH_DEFAULT-30);
			MMI_SetUpdateB0Area(4,4,MAINFRAME_WIDTH_DEFAULT-8,20);
			MMI_SetUpdateArea(0,MAINFRAME_WIDTH_DEFAULT+30,MAINFRAME_WIDTH_DEFAULT,
			MAINFRAME_HEIGHT_DEFAULT-MAINFRAME_WIDTH_DEFAULT-30);
			
			VIM_HAPI_SetLCDWorkMode(VIM_HAPI_LCDMODE_AFIRST,0);

			VIM_HAPI_SetLCDSize(VIM_HAPI_B0_LAYER,0,0,0,0);
			VIM_HAPI_SetLCDSize(VIM_HAPI_B1_LAYER,0,0,0,0);

			VIM_HAPI_Display_Jpeg(VIM_HAPI_ROM_SAVE, g_file,0xffffffff, 4, 4, MAINFRAME_WIDTH_DEFAULT-8, 264);
			//VIM_HAPI_Display_Jpeg(VIM_HAPI_ROM_SAVE, g_file,0xffffffff, 4, 4, 128, 160);

			//***************
#if 0	//guoying 2/14/2008 testing		
			VIM_HAPI_SetLCDMirror(VIM_HAPI_ROTATE_0,VIM_HAPI_ALL_LAYER);
			VIM_HAPI_SetLCDSize(VIM_HAPI_B1_LAYER,0,0,0,0);	
			VIM_HAPI_SetLCDSize(VIM_HAPI_B0_LAYER,0,0,128,160);
			//VIM_HAPI_SetLCDColordep(VIM_HAPI_COLORDEP_16BIT);
			//VIM_HAPI_Decode_Jpeg(VIM_HAPI_ROM_SAVE, g_file,0x7fffffff, x, y, w, h);
			//VIM_HAPI_Decode_Jpeg(VIM_HAPI_RAM_SAVE,VIM_DECODE_RESIZE_TO_RGB,JPEG_128x160_422,BmpBuf,3072, 128*160*2,128,160);

			VIM_HAPI_Decode_Jpeg(VIM_HAPI_ROM_SAVE,VIM_DECODE_RESIZE_TO_RGB,g_file,BmpBuf,0x7fffffff, 128*160*2,128,160);

			VIM_HAPI_SetLCDWorkMode(VIM_HAPI_LCDMODE_BLONLY,0);
			VIM_HAPI_DrawLCDPureColor(VIM_HAPI_B0_LAYER,0,0,128,160,0);
			VIM_HAPI_UpdateLCD(VIM_HAPI_B0_LAYER,0,0,128,160);
			Delay(100);
			VIM_HAPI_DrawLCDRctngl(VIM_HAPI_B0_LAYER,0,0,128,160,BmpBuf);	
			VIM_HAPI_UpdateLCD(VIM_HAPI_B0_LAYER,0,0,128,160);
				
			//***************
#endif			
			Delay(50);

			VIM_HAPI_SetLCDSize(VIM_HAPI_B0_LAYER,0,0,MAINFRAME_WIDTH_DEFAULT,32+4);
			VIM_HAPI_SetLCDSize(VIM_HAPI_B1_LAYER,0,MAINFRAME_WIDTH_DEFAULT+30,MAINFRAME_WIDTH_DEFAULT,
				MAINFRAME_HEIGHT_DEFAULT-MAINFRAME_WIDTH_DEFAULT-30);
	
			User_GetPictureSize();
			VIM_HAPI_SetLCDWorkMode(VIM_HAPI_LCDMODE_BLONLY,0);
			MediaPlayerFileEnd=1;
			break;
		case VIDEO_FILE:
			framecounter=0;
			BypassUpdate=2;
			VIM_HAPI_SetWorkMode(VIM_HAPI_MODE_PHOTOPROCESS);
			VIM_HAPI_SetEffect(0);
			VIM_HAPI_SetLCDMirror(VIM_HAPI_ROTATE_0,VIM_HAPI_A_LAYER);
			User_DrawLCDBlack(0,0,240,160);
			User_DrawLCDBlack(0,160,240,160);
			//User_DrawLCDBlack(4,4,MAINFRAME_WIDTH_DEFAULT-8,MAINFRAME_WIDTH_DEFAULT+30-4);
			//VIM_HAPI_SetLCDSize(VIM_HAPI_B0_LAYER,0,0,MAINFRAME_WIDTH_DEFAULT,32+4);
			//VIM_HAPI_SetLCDSize(VIM_HAPI_B1_LAYER,0,MAINFRAME_WIDTH_DEFAULT+30,MAINFRAME_WIDTH_DEFAULT,
			//	MAINFRAME_HEIGHT_DEFAULT-MAINFRAME_WIDTH_DEFAULT-30);
			MMI_SetUpdateB0Area(4,4,MAINFRAME_WIDTH_DEFAULT-8,20);
			MMI_SetUpdateArea(0,MAINFRAME_WIDTH_DEFAULT+30,MAINFRAME_WIDTH_DEFAULT,
			MAINFRAME_HEIGHT_DEFAULT-MAINFRAME_WIDTH_DEFAULT-30);
//(12,40,240-24,188)
			VIM_HAPI_SetLCDWorkMode(VIM_HAPI_LCDMODE_AFIRST,0);
			VIM_HAPI_ReadyToDisplay(VIM_HAPI_ROM_SAVE, g_file,0xffffffff, 12, 40, 240-24, 188);
			User_GetPictureSize();
			if(Picturewidth==320)
				VIM_HAPI_StartDisplayVideo(User_DisplayVideoCallback,6);
			else
				VIM_HAPI_StartDisplayVideo(User_DisplayVideoCallback,4);
			
			MediaPlayerStatus=1;
			break;
		default:
			f_close(g_file);
			break;
	}
	
	return 1;
}
int USER_closeMediaPlayer()
{
char result;
	if(!MediaPlayerFileEnd)							
		VIM_HAPI_StopDisplayVideo();
	if(g_file)
	{
		result=f_close(g_file);
		Uart_Printf("\n close file ok!result=%d ",result);
	}
	BypassUpdate=1;
	VIM_HAPI_SetWorkMode(VIM_HAPI_MODE_BYPASS);
	MMI_SetUpdateArea(0,0,MAINFRAME_WIDTH_DEFAULT,MAINFRAME_HEIGHT_DEFAULT);
	return 1;	
}
/***************************************************************************************************
****************************************************************************************************/
void Menu_MediaPlayer(UINT iMsg, WPARAM wParam, LPARAM lParam)
{
	SetMediaPlayer(User_InitMediaPlayer,USER_ExitInitMediaPlayer,USER_closeMediaPlayer);
	MMediaPlayerForm(NULL,NULL,NULL,SW_SHOW);
}
extern NU_TIMER video_timer;
void User_MediaPlayerKeyOk(void)
{
int w,h,x,y;
	


	switch (MediaPlayerFileType)
	{
		case JPEG_FILE:
			User_DrawLCDBlack(0,0,240,320);
			SpecialEffec++;
			if (SpecialEffec>VIM_HAPI_ROTATE_270)
				SpecialEffec=0;
			
			if(SpecialEffec%2)
			{
					w=320-8;
					h=240-8;
					x=4;
					y=4;
					//w=220;
					//h=176;
					//x=60;
					//y=(240-176)/2;
			}
			else
			{
					w=240-8;
					h=320-8;
					x=4;
					y=4;
					//w=176;
					//h=220;		
					//y=(320-220)/2;
					//x=(240-176)/2;
			}

			//VIM_HAPI_Preview_Effect(SpecialEffec);
			VIM_HAPI_SetLCDMirror(SpecialEffec,VIM_HAPI_A_LAYER);
			VIM_HAPI_SetLCDSize(VIM_HAPI_B0_LAYER,0,0,0,0);
			VIM_HAPI_SetLCDSize(VIM_HAPI_B1_LAYER,0,0,0,0);
			if(g_file)
				VIM_HAPI_Display_Jpeg(VIM_HAPI_ROM_SAVE, g_file,0x7fffffff, x, y, w, h);
			Delay(100);

			VIM_HAPI_SetLCDSize(VIM_HAPI_B0_LAYER,0,0,MAINFRAME_WIDTH_DEFAULT,32+4);
			VIM_HAPI_SetLCDSize(VIM_HAPI_B1_LAYER,0,MAINFRAME_WIDTH_DEFAULT+30,MAINFRAME_WIDTH_DEFAULT,
				MAINFRAME_HEIGHT_DEFAULT-MAINFRAME_WIDTH_DEFAULT-30);
			break;
		case VIDEO_FILE:
			if(!MediaPlayerFileEnd)
			{
				if(MediaPlayerStatus)
				{
					VIM_USER_StopTimer();
					MediaPlayerStatus=0;
					Uart_Printf("VIM_USER_StopTimer");
				}
				else
				{
					VIM_USER_StartTimer();
					MediaPlayerStatus=1;
					Uart_Printf("VIM_USER_StartTimer");
				}
			}
			break;
		default:
			break;
	}
	
}


void User_MediaPlayer_Play(UINT iMsg, WPARAM wParam, LPARAM lParam)
{	
	User_MediaPlayerKeyOk();
}
void User_MediaPlayer_Pause(UINT iMsg, WPARAM wParam, LPARAM lParam)
{
}
void User_MediaPlayer_Stop(UINT iMsg, WPARAM wParam, LPARAM lParam)
{
}

void User_MediaPlayer_Record(UINT iMsg, WPARAM wParam, LPARAM lParam)
{
}

void User_MediaPlayerVolumeUp(void)
{
}
void User_MediaPlayerVolumeDown(void)
{
}
void User_KeyValueEvent(UINT iKeyValue)
{
}
/************************************use  Middle key do rotation ************************************
DisplayRotation   0-----1----------2-----------3-----------4-------5---------6----------7----------0
   Middle 	Rotate_0->Rotate_90->Rotate_180->Rotate_270->Mirror_0->Mirror_90->Mirror_180->Mirror_270->Rotate_0
****************************************************************************************************/
void User_DrawLCDBlack(UINT16 xStart,UINT16 yStart,UINT16 width,UINT16 height)
{
	UINT16 result;
	VIM_HAPI_SetLCDWorkMode(VIM_HAPI_LCDMODE_BLONLY,0);
	VIM_HAPI_SetLCDSize(VIM_HAPI_B1_LAYER,xStart,yStart,width,height);
	VIM_HAPI_DrawLCDPureColor(VIM_HAPI_B1_LAYER,xStart,yStart,width,height,0);
	VIM_HAPI_UpdateLCD(VIM_HAPI_B1_LAYER,xStart,yStart,width,height);
	Delay(50);
	VIM_HAPI_SetLCDSize(VIM_HAPI_B1_LAYER,4,4,0,0);
}
void User_MediaPlayerDisplayPan(void)
{
	UINT16 result;
	
	if ((PictureHeight<DisplayHeight)||(Picturewidth<Displaywidth))
	{
		User_DrawLCDBlack(4,4,MAINFRAME_WIDTH_DEFAULT-8,MAINFRAME_WIDTH_DEFAULT+30-4);
		VIM_HAPI_SetLCDWorkMode(VIM_HAPI_LCDMODE_AFIRST,0);
	}
	if(g_file)
	{
		VIM_HAPI_DisplayPan(4, 4, JpegOffsetX, JpegOffsetY,Displaywidth, DisplayHeight);
	 	//VIM_HAPI_DisplayZoom(3, 3, PanHeightIndex);		//only test the function of display zoom
		
		
	}
}
void User_MediaPlayerKeyMiddle(void)
{
	switch (MediaPlayerFileType)
	{
		case JPEG_FILE:
			DisplayRotation++;
			DisplayRotation&=7;
			if (DisplayRotation % 2)
			{
				DisplayHeight =MAINFRAME_WIDTH_DEFAULT-8;
				Displaywidth =MAINFRAME_WIDTH_DEFAULT+30-4;
			}
			else
			{
				Displaywidth =MAINFRAME_WIDTH_DEFAULT-8;

⌨️ 快捷键说明

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