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

📄 testapi.c

📁 中芯微camera 图像处理芯片演示
💻 C
📖 第 1 页 / 共 3 页
字号:
				DisplayHeight =MAINFRAME_WIDTH_DEFAULT+30-4;
			}
			VIM_HAPI_SetLCDMirror(DisplayRotation,4);
			User_DrawLCDBlack(4,4,MAINFRAME_WIDTH_DEFAULT-8,MAINFRAME_WIDTH_DEFAULT+30-4);
			if(g_file)
				VIM_HAPI_Display_Jpeg(VIM_HAPI_ROM_SAVE, g_file,0xffffffff, 4, 4, Displaywidth, DisplayHeight);
			JpegOffsetX=JpegOffsetY=0;
			break;
		case VIDEO_FILE:
			break;
		default:
			break;
	}
			
}
void User_MediaPlayerKeyUp(void)
{
	UINT16 result;
	switch (MediaPlayerFileType)
	{
		case JPEG_FILE:
			if(PanHeightIndex>0)
				PanHeightIndex-=1;
			if (PictureHeight>(DisplayHeight+6))
			{
				JpegOffsetY=PanHeightIndex*(PictureHeight-DisplayHeight)/6;
				User_MediaPlayerDisplayPan();
			}

			/*if(PanHeightIndex>0)
				PanHeightIndex-=1;
			User_MediaPlayerDisplayPan();*/

			break;
		case VIDEO_FILE:
			break;
		default:
			break;
	}
	
}
void User_MediaPlayerKeyDown(void)
{
	switch (MediaPlayerFileType)
	{
		case JPEG_FILE:
			
			if(PanHeightIndex<6)
				PanHeightIndex+=1;
			if (PictureHeight>(DisplayHeight+6))
			{
				JpegOffsetY=PanHeightIndex*(PictureHeight-DisplayHeight)/6;
				if(PanHeightIndex==6)
					JpegOffsetY=PictureHeight-DisplayHeight;
				User_MediaPlayerDisplayPan();
			}

			/*if(PanHeightIndex<6)
				PanHeightIndex+=1;
			User_MediaPlayerDisplayPan();*/
			
			
			break;
		case VIDEO_FILE:
			break;
		default:
			break;
	}
	
}
void User_MediaPlayerKeyLeft(void)
{
	switch (MediaPlayerFileType)
	{
		case JPEG_FILE:
			if(PanWidthIndex>0)
				PanWidthIndex-=1;
			if (Picturewidth>(Displaywidth+6))
			{
	    			JpegOffsetX=PanWidthIndex*(Picturewidth-Displaywidth)/6;
				User_MediaPlayerDisplayPan();
			}
			break;
		case VIDEO_FILE:
#if VIM_USER_SUPPORT_REALTIME_ROTATION	
			VIM_HAPI_SetLCDMirror(VIM_HAPI_ROTATE_90,VIM_HAPI_A_LAYER);
			VIM_HAPI_ChangeVideoSize(0,0,176,144);
			MMI_SetUpdateB0Area(0,0,0,0);
			MMI_SetUpdateArea(0,0,0,0);
#endif
			
			break;
		default:
			break;
	}
}
void User_MediaPlayerKeyRight(void)
{
	switch (MediaPlayerFileType)
	{
		case JPEG_FILE:
			if(PanWidthIndex<6)
				PanWidthIndex+=1;
			if (Picturewidth>(Displaywidth+6))
			{
	    			JpegOffsetX=PanWidthIndex*(Picturewidth-Displaywidth)/6;
	    			if(PanWidthIndex==6)
					JpegOffsetX=Picturewidth-Displaywidth;
				User_MediaPlayerDisplayPan();
			}
			break;
		case VIDEO_FILE:
#if VIM_USER_SUPPORT_REALTIME_ROTATION
			VIM_HAPI_SetLCDMirror(VIM_HAPI_ROTATE_270,VIM_HAPI_A_LAYER);
			VIM_HAPI_ChangeVideoSize(0,0,320,240);
			MMI_SetUpdateB0Area(0,0,0,0);
			MMI_SetUpdateArea(0,0,0,0);	
#endif	
			
			break;
		default:
			break;
	}
}

//////////////////////////camera/////////////////////////////////////////////////////////////
void Menu_SavePicture(UINT iMsg, WPARAM wParam, LPARAM lParam);

void PrintCamjpegReg(void)
{
}

#define CAMERA_ITEM	2
#define VIDEO_ITEM		4 	
extern int mainSelectedItem; 	

UINT8 gbEncode = 0;
UINT8 gbPlayingRecode = 0; 
UINT8 gbVideoGUIClose = 0; 

int User_InitCamera(void)
{
	UINT16 w,h,result;
	VIM_HAPI_CPTURE_QUALITY quality;
	
	
	SpecialEffec=0;
	switch(MMI_VideoSetting[0].Value)
	{
	case 2:
		w=1280;
		h=960;
		break;
	case 1:
		w=640;
		h=480;
		break;
	case 0:
		w=320;
		h=240;
		break;
	}
	
	switch( MMI_VideoSetting[1].Value)
	{
	case 0:
		quality=VIM_HAPI_CPTURE_QUALITY_HIGH;
		break;
	case 1:
		quality=VIM_HAPI_CPTURE_QUALITY_MID;
		break;
	case 2:
		quality=VIM_HAPI_CPTURE_QUALITY_LOW;
		break;
	}
	switch (mainSelectedItem)
	{
		case CAMERA_ITEM:

			VIM_HAPI_SetWorkMode(VIM_HAPI_MODE_CAMERAON);
			VIM_HAPI_SetEffect(0);
			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);

			VIM_HAPI_SetLCDMirror(VIM_HAPI_ROTATE_0, VIM_HAPI_A_LAYER);
			
			VIM_HAPI_SetLCDWorkMode(VIM_HAPI_LCDMODE_OVERLAY,0xffff);
			VIM_HAPI_SetLCDColordep(VIM_HAPI_COLORDEP_16BIT);
			
			VIM_HAPI_DrawLCDPureColor(VIM_HAPI_B0_LAYER,4,4,MAINFRAME_WIDTH_DEFAULT-8,32+4,0xffff);
			VIM_HAPI_SetCaptureParameter(w,h);
			//VIM_HAPI_SetPreviewParameter(4,4,MAINFRAME_WIDTH_DEFAULT-8,MAINFRAME_WIDTH_DEFAULT+30-4);
			//VIM_HAPI_SetPreviewParameter(4,(MAINFRAME_WIDTH_DEFAULT+30-4-200)/2,240-8,200);
			if(w==1280)
				
				VIM_HAPI_SetPreviewParameter(30,60,176,176);
			else
				VIM_HAPI_SetPreviewParameter(12,40,240-24,188);

			VIM_HAPI_SetCaptureQuality(quality);
			Uart_Printf("VIM_HAPI_SetCaptureQuality =%d \r\n",quality);
#ifdef FASET_PREVIEW
			if(g_outindex==0)
				FastPreview=1;
			else
				FastPreview=0;
			result=VIM_HAPI_SetPreviewMode(VIM_HAPI_PREVIEW_ON);
#else
			result=VIM_HAPI_SetPreviewMode(VIM_HAPI_PREVIEW_ON);
#endif
			Uart_Printf("\n VIM_HAPI_SetPreviewMode return : %d  ",result);

			MMI_SetUpdateB0Area(4,4,MAINFRAME_WIDTH_DEFAULT-8,32);
			MMI_SetUpdateArea(0,MAINFRAME_WIDTH_DEFAULT+30,MAINFRAME_WIDTH_DEFAULT,
				MAINFRAME_HEIGHT_DEFAULT-MAINFRAME_WIDTH_DEFAULT-30);
			BypassUpdate=2;
		break;
		case VIDEO_ITEM:
			MMI_SetCameraInfo(NULL,NULL,"RECORD",NULL);
			if(w==1280)
			{
				w=640;
				h=480;
			}
			VIM_HAPI_SetWorkMode(VIM_HAPI_MODE_CAMERAON);
			VIM_HAPI_SetEffect(0);
			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_B0_LAYER,0,0,0,0);
			//VIM_HAPI_SetLCDSize(VIM_HAPI_B1_LAYER,0,0,0,0);
			VIM_HAPI_SetLCDSize(VIM_HAPI_B1_LAYER,0,MAINFRAME_WIDTH_DEFAULT+30,MAINFRAME_WIDTH_DEFAULT,
				MAINFRAME_HEIGHT_DEFAULT-MAINFRAME_WIDTH_DEFAULT-30);
			VIM_HAPI_SetLCDMirror(VIM_HAPI_ROTATE_0, VIM_HAPI_A_LAYER);
			
			VIM_HAPI_SetLCDWorkMode(VIM_HAPI_LCDMODE_OVERLAY,0xffff);
			VIM_HAPI_SetLCDColordep(VIM_HAPI_COLORDEP_16BIT);
			VIM_HAPI_DrawLCDPureColor(VIM_HAPI_B0_LAYER,4,4,MAINFRAME_WIDTH_DEFAULT-8,32+4,0xffff);
			VIM_HAPI_SetCaptureQuality(VIM_HAPI_CPTURE_QUALITY_MID);
			VIM_HAPI_SetCaptureParameter(w,h);
			//VIM_HAPI_SetPreviewParameter(4,4,MAINFRAME_WIDTH_DEFAULT-8,MAINFRAME_WIDTH_DEFAULT+30-4);
			VIM_HAPI_SetPreviewParameter(12,40,240-24,184);
			//VIM_HAPI_SetPreviewParameter(12,40,216,184);
#ifdef FASET_PREVIEW
			if(g_outindex==0)
				FastPreview=1;
			else
				FastPreview=0;
			result=VIM_HAPI_SetPreviewMode(VIM_HAPI_PREVIEW_ON);
#else
			result=VIM_HAPI_SetPreviewMode(VIM_HAPI_PREVIEW_ON);
#endif

			MMI_SetUpdateB0Area(4,4,MAINFRAME_WIDTH_DEFAULT-8,32);
			MMI_SetUpdateArea(0,MAINFRAME_WIDTH_DEFAULT+30,MAINFRAME_WIDTH_DEFAULT,
				MAINFRAME_HEIGHT_DEFAULT-MAINFRAME_WIDTH_DEFAULT-30);
			BypassUpdate=0;
		break;
		default:
			break;
	}
	return 1;
}

int USER_ExitInitCamera()
{
	
	return 1;	
}

int USER_closeCamera()
{
	Uart_Printf("USER_closeCamera \r\n");		
	switch (mainSelectedItem)
	{
		case CAMERA_ITEM:
		case VIDEO_ITEM:
		default:
			VIM_HAPI_SetWorkMode(VIM_HAPI_MODE_BYPASS);//through mode power on lcd
			BypassUpdate=1;
			MMI_SetUpdateB0Area(0,0,0,0);
			MMI_SetUpdateArea(0,0,MAINFRAME_WIDTH_DEFAULT,MAINFRAME_HEIGHT_DEFAULT);
			break;
	}
	return 1;	
}

void Menu_Camera(UINT iMsg, WPARAM wParam, LPARAM lParam)
{
	VIM_HAPI_SetWorkMode(VIM_HAPI_MODE_BYPASS);//through mode power on lcd
	BypassUpdate=1;
	SetCameraStart(User_InitCamera,USER_ExitInitCamera,USER_closeCamera);
	MCameraMain(NULL,NULL,NULL,SW_SHOW);
}
/***************************** use up and down key do preview zoom change ******************************
   up 	zoom step->
   down 	zoom step->
****************************************************************************************************/
int User_CameraUp()
{
	UINT16 result;
	result=VIM_HAPI_SetPreviewZoom(VIM_HAPI_CHANGE_ADD,1);
	Uart_Printf("\n VIM_HAPI_SetPreviewZoom return : %d  ",result);
	Uart_Printf("\n FastPreview : %d  ",FastPreview);
	return 1;
}
int User_CameraDown()
{
   	UINT16 result;
	result=VIM_HAPI_SetPreviewZoom(VIM_HAPI_CHANGE_DEC,1);
	Uart_Printf("\n VIM_HAPI_SetPreviewZoom return : %d  ",result);
	Uart_Printf("\n FastPreview : %d  ",FastPreview);

	return 1;
}
/************************************use left and right key capture size chang ************************************
   left 	capture size up	->
   right 	capture size down	->
****************************************************************************************************/

int User_CameraLeft()
{
	UINT16 result;
	if(g_outindex)
		g_outindex--;
#ifdef FASET_PREVIEW
	if(g_outindex==0)
		FastPreview=1;
	else
		FastPreview=0;

	result=VIM_HAPI_SetPreviewMode(VIM_HAPI_PREVIEW_ON);
#else
	result=VIM_HAPI_SetPreviewMode(VIM_HAPI_PREVIEW_ON);
#endif
	Uart_Printf("\n VIM_HAPI_SetPreviewMode return : %d  ",result);
	Uart_Printf("\n FastPreview : %d  ",FastPreview);
}
/*
	if((g_outindex==VIM_HAPI_HALFPIXEL)&&(MMI_VideoSetting[0].Value==2))
		VIM_HAPI_SetCaptureParameter(1280,960);
*/
int User_CameraRight()
{
UINT16 result;
	if(g_outindex==0)
		g_outindex++;
#ifdef FASET_PREVIEW
	if(g_outindex==0)
		FastPreview=1;
	else
		FastPreview=0;
	result=VIM_HAPI_SetPreviewMode(VIM_HAPI_PREVIEW_ON);
#else

	result=VIM_HAPI_SetPreviewMode(VIM_HAPI_PREVIEW_ON);
#endif
	Uart_Printf("\n VIM_HAPI_SetPreviewMode return : %d  ",result);

}

/***********************************************************************************************************
user middle key do preview with frame(need creat new nemu do finish this function)
****************************************************************************************************/
int User_CameraMiddle()
{
	SpecialEffec++;
	if (SpecialEffec>4)
		SpecialEffec=0;
	VIM_HAPI_SetEffect(SpecialEffec);
	return 1;
}

static unsigned int gCaptureSize = 0;
/***********************************************************************************************************
  do capture 
****************************************************************************************************/
char g_namestr[20];
int User_CameraOK()
{
UINT16 result,num=0;
AviInfo info;
F_SPACE space;
	UINT16 w,h;
	F_FIND find;
	switch(MMI_VideoSetting[0].Value)
	{
	case 2:
	case 1:
		info.wFrameRate=4;
		w=640;
		h=480;
		break;
	case 0:
		info.wFrameRate=8;
		w=320;
		h=240;
		break;
	}
	switch (mainSelectedItem)
	{
		case CAMERA_ITEM:
			sprintf(g_namestr,"vim%d.jpg",num);
			while(1)
			{
				if(f_findfirst(g_namestr, &find))//have not  the same name
					break;
				num++;
				sprintf(g_namestr,"vim%d.jpg",num);
			}
			fn_getfreespace(&space);
			Uart_Printf("\n space.free=%d ",space.free);
			if(space.free<0x160000)
				{
					Uart_Printf("\n can not capture");
				return;
				}
			g_file=f_open(g_namestr,"w+");
			
			result=VIM_HAPI_CaptureStill(VIM_HAPI_ROM_SAVE,g_file,0x160000,0);
			Uart_Printf("\n VIM_HAPI_CaptureStill return : %d  ",result);
			result=f_close(g_file);
			Uart_Printf("\n f_close return : %d  ",result);
			gCaptureSize=VIM_HAPI_GetCaptureLength();
			Uart_Printf("\n capture file size : %d  ",gCaptureSize);
			Beep(0x1);
			NU_Sleep(10);
			Beep(0x0);
			Menu_SavePicture(0,0,0);
		break;
		case VIDEO_ITEM:
			g_file=f_open("video.avi","w+");
			Uart_Printf("\n open file ok! ");
			MMI_SetCameraInfo("   ","   ","   ","STOP");
			fn_getfreespace(&space);
			info.wCaptureWidth=w;
			info.wCaptureHeight=h;
			Uart_Printf("\n space.free=%d ",space.free);
			info.dFileMaxSize=space.free-0x8000;//space.free/2;		//qiguai
			//info.dFileMaxSize=space.free-0x400000;//space.free/2;		//qiguai
			//info.wFrameRate=4;
			framecounter=0;
			CAPTUREEND=0;
			Avi_LoadInfo(&info,ROMSAVE,User_CaptureAviCallback);
			Avi_StartCapture(g_file);
			//Menu_SavePicture(0,0,0);
			break;
		default:
		break;
	}
	return 1;
}
/////////////////////////savePicture.c/////////////////////////////////////
extern int mainSelectedItem; 
void User_CaptureAviCallback(UINT8 Status, UINT32 Byte_Length)
{
UINT8 error;
	switch (Status)
	{
	case VIM_HAPI_ONEFRAME_END:
		framecounter++;
		g_withframe++;
		//Uart_Printf("\n record frame: %d",framecounter);
		break; 
	case VIM_HAPI_CAPTURE_END:
		Beep(1);
		Delay(50);
		Beep(0);
		CAPTUREEND=1;
		g_withframe=0; 
		if (mainSelectedItem==VIDEO_ITEM)
			 Avi_StopCapture();
		if(g_file)
		{
				f_close(g_file);
				Uart_Printf("\n close file ok! ");
		}
		Uart_Printf("\n578 ISR_MarbEncDone!CapFileLength=%x",Byte_Length);
		break;
	case VIM_HAPI_BUF_ERROR:
		CAPTUREEND=1;
		Uart_Printf("\n578 ISR_Buf error,ID%d",Byte_Length);
		break;
	}
}
void User_CaptureOneFrame(UNSIGNED val)
{
	UINT16 result;
	VIM_HAPI_Timer();
}
int User_InitSavePicture(void)
{
	Displaywidth =MAINFRAME_WIDTH_DEFAULT-8;
	DisplayHeight =MAINFRAME_WIDTH_DEFAULT+30-4;
	JpegOffsetX=JpegOffsetY=0;	
	DisplayRotation=PanHeightIndex=PanWidthIndex=0;
	SpecialEffec=0;
	switch (mainSelectedItem)
	{
		case CAMERA_ITEM:
			MMI_SetSavePictureInfo(" ←PAN   →","↑ PAN ↓"," SPACIAL ","CANLE");
			break;
		case VIDEO_ITEM:
	              MMI_SetSavePictureInfo("←OUT INDEX→","↑ ZOOM ↓","PAUSE","STOP");
			break;
	}
	return 1;
}

int USER_ExitInitSavePicture()
{
	
	UINT16 result;
	AviInfo info;
	UINT32 TIME;
	switch (mainSelectedItem)
	{
		case CAMERA_ITEM:
			MediaPlayerFileType=JPEG_FILE;
			g_file=f_open(g_namestr,"r+");
			User_DrawLCDBlack(4,4,MAINFRAME_WIDTH_DEFAULT-8,320-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);
			result=VIM_HAPI_SetLCDWorkMode(VIM_HAPI_LCDMODE_AFIRST,0);
			Uart_Printf("\n VIM_HAPI_SetLCDWorkMode return : %d  ",result);
			if(g_file)
				result=VIM_HAPI_Display_Jpeg(VIM_HAPI_ROM_SAVE, g_file,gCaptureSize, 4,4,MAINFRAME_WIDTH_DEFAULT-8,MAINFRAME_WIDTH_DEFAULT+30-4);
				Uart_Printf("\n VIM_HAPI_Display_Jpeg return : %d  ",result);
			Delay(100);
			User_GetPictureSize();
			MMI_SetUpdateB0Area(0,0,0,0);
			VIM_HAPI_SetLCDWorkMode(VIM_HAPI_LCDMODE_BLONLY,0);
		break;
		case VIDEO_ITEM:
		/*	g_file=f_open("video.avi","w+");
			Uart_Printf("\n open file ok! ");

⌨️ 快捷键说明

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