亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? camif.c

?? 2440開發板測試程序(含LCD、攝像頭演示等)
?? C
?? 第 1 頁 / 共 2 頁
字號:
				tmp=(hSize/4)%8;
				switch(tmp) {
				case 0:
					*mainBurstSize=8;
					*remainedBurstSize=8;
					break;
				case 4:
					*mainBurstSize=8;
					*remainedBurstSize=4;
				default:
					*mainBurstSize=4;
					tmp=(hSize/4)%4;
					*remainedBurstSize= (tmp) ? tmp: 4;
					break;
				}
				break;
			}		    	    		
		}
		
		
		
		/********************************************************
		CalculatePrescalerRatioShift - none
		
			Description:	
			- none
			
		*/
		void CalculatePrescalerRatioShift(U32 SrcSize, U32 DstSize, U32 *ratio,U32 *shift)
		{
			if(SrcSize>=64*DstSize) {
				Uart_Printf("ERROR: out of the prescaler range: SrcSize/DstSize = %d(< 64)\n",SrcSize/DstSize);
				while(1);
			}
			else if(SrcSize>=32*DstSize) {
				*ratio=32;
				*shift=5;
			}
			else if(SrcSize>=16*DstSize) {
				*ratio=16;
				*shift=4;
			}
			else if(SrcSize>=8*DstSize) {
				*ratio=8;
				*shift=3;
			}
			else if(SrcSize>=4*DstSize) {
				*ratio=4;
				*shift=2;
			}
			else if(SrcSize>=2*DstSize) {
				*ratio=2;
				*shift=1;
			}
			else {
				*ratio=1;
				*shift=0;
			}    	
		}
		
		
		/********************************************************
		CamCaptureStart - Start camera capture operation.
		
			Description:	
			- mode= CAM_CODEC_CAPTURE_ENABLE_BIT or CAM_PVIEW_CAPTURE_ENABLE_BIT or both
			
		*/
		void CamCaptureStart(U32 mode)
		{ 
			
			if(mode&CAM_CODEC_SCALER_CAPTURE_ENABLE_BIT) {
				camCodecStatus=CAM_STARTED;
				rCICOSCCTRL|=CAM_CODEC_SACLER_START_BIT;
			}
			
			if(mode&CAM_PVIEW_SCALER_CAPTURE_ENABLE_BIT) {
				camPviewStatus=CAM_STARTED;
				rCIPRSCCTRL|=CAM_PVIEW_SACLER_START_BIT;
			}
			
			if(mode&CAM_CAMIF_GLOBAL_CAPTURE_ENABLE_BIT) {
				camCodecStatus=CAM_STARTED;
				rCICOSCCTRL|=CAM_CAMIF_GLOBAL_CAPTURE_ENABLE_BIT;
			}
			
			rCIIMGCPT|=CAM_CAMIF_GLOBAL_CAPTURE_ENABLE_BIT|mode;
		}
		
		
		void CamCaptureStop(void)
		{
			camCodecStatus=CAM_STOP_ISSUED;
			camPviewStatus=CAM_STOP_ISSUED;
		}
		
		
		void _CamCodecStopHw(void)
		{
			rCICOSCCTRL &= ~CAM_CODEC_SACLER_START_BIT; //stop codec scaler.
			rCIIMGCPT &= ~CAM_CODEC_SCALER_CAPTURE_ENABLE_BIT; //stop capturing for codec scaler.
			if(!(rCIIMGCPT & CAM_PVIEW_SCALER_CAPTURE_ENABLE_BIT))
				rCIIMGCPT &= ~CAM_CAMIF_GLOBAL_CAPTURE_ENABLE_BIT; //stop capturing for preview scaler if needed.
			rCICOCTRL |= (1<<2); //Enable last IRQ at the end of frame capture.
			//NOTE:LastIrqEn bit should be set after clearing CAPTURE_ENABLE_BIT & SCALER_START_BIT
		}
		
		void _CamPviewStopHw(void)
		{
			rCIPRSCCTRL &= ~CAM_PVIEW_SACLER_START_BIT; //stop preview scaler.
			rCIIMGCPT &= ~CAM_PVIEW_SCALER_CAPTURE_ENABLE_BIT; //stop capturing for preview scaler.
			if(!(rCIIMGCPT&CAM_CODEC_SCALER_CAPTURE_ENABLE_BIT))
				rCIIMGCPT &= ~CAM_CAMIF_GLOBAL_CAPTURE_ENABLE_BIT; //stop capturing for codec scaler if needed.
			rCIPRCTRL |= (1<<2); //Enable last IRQ at the end of frame capture.
			//NOTE:LastIrqEn bit should be set after clearing CAPTURE_ENABLE_BIT & SCALER_START_BIT
		}
		
		
		void __irq CamIsr(void)
		{
			
			U32 completedFrameIndex;
			
			if (rSUBSRCPND&BIT_SUB_CAM_C)
			{
				//Uart_Printf("[C]");
				rGPFDAT ^= 1<<5;	//hzh
				CamCodecIntMask();
				rSUBSRCPND |= BIT_SUB_CAM_C;
				ClearPending(BIT_CAM);
				switch(camCodecStatus) {
				case CAM_STOP_ISSUED:
					_CamCodecStopHw();
					camCodecStatus=CAM_LAST_CAPTURING;
					Uart_Printf("cr=%x\n", rCICOCTRL);
					//Uart_Printf("cS1\n");
					break;
				case CAM_LAST_CAPTURING:
					camCodecStatus=CAM_STOPPED;
					CamCodecIntMask();			
					//Uart_Printf("cS2\n");
					return;
				case CAM_STARTED:
					flagCaptured_C = 1;
					//				_CamCodecStopHw();
					if(camTestMode&CAM_TEST_MODE_CODEC)	{
						if(camCodecCaptureCount>0) 
							completedFrameIndex=(((rCICOSTATUS>>26)&0x3)+4-2)%4;   
						//Uart_Printf("FrameIndex:%d\n",completedFrameIndex);
					}
					else {
						//Uart_Printf("Just Capturing without display");
					}
					break;
				case CAM_CODEC_SCALER_BYPASS_STATE:
					//Uart_Printf("cBP\n");
					break;
				default:
					break;
				}
				
				CamCodecIntUnmask();
				camCodecCaptureCount++;	 
			}
			else
			{
				//Uart_Printf("[P]");
				rGPFDAT ^= 1<<4;	//hzh
				CamPreviewIntMask();
				rSUBSRCPND |= BIT_SUB_CAM_P;
				ClearPending(BIT_CAM) ;
				switch(camPviewStatus) {
				case CAM_STOP_ISSUED:
					_CamPviewStopHw();
					camPviewStatus=CAM_LAST_CAPTURING;	 
					Uart_Printf("pr=%x\n", rCIPRCTRL);
					//Uart_Printf("pS1\n");
					break;
				case CAM_LAST_CAPTURING:
					camPviewStatus=CAM_STOPPED;
					CamPreviewIntMask();
					//Uart_Printf("pS2\n"); 	
					return;
				case CAM_STARTED:
					flagCaptured_P = 1;
					if(camTestMode&CAM_TEST_MODE_PVIEW) {
						if(camPviewCaptureCount >0) 
							completedFrameIndex=(((rCIPRSTATUS>>26)&0x3)+4-2)%4;
						//Uart_Printf("FrameIndex:%d\n",completedFrameIndex);
					}
					else {
						//Uart_Printf("Preview Image Captured\n");
					} 		
				default:
					break;			
				} 	
				
				CamPreviewIntUnmask();
				camPviewCaptureCount++;
			}
		}
		
		
		
		/******************************************************************************
		*                                                                            *    
		*                   camera interface interrupts & controls                   *
		*                                                                            *     
		******************************************************************************/
		
		
		U32 Conv_YCbCr_Rgb(U8 y0, U8 y1, U8 cb0, U8 cr0)  // second solution... by junon
		{
			// bit order is
			// YCbCr = [Cr0 Y1 Cb0 Y0], RGB=[R1,G1,B1,R0,G0,B0].
			
			int r0, g0, b0, r1, g1, b1;
			U32 rgb0, rgb1, rgb;
			
#if 1 // 4 frames/s @192MHz, 12MHz ; 6 frames/s @450MHz, 12MHz
			r0 = YCbCrtoR(y0, cb0, cr0);
			g0 = YCbCrtoG(y0, cb0, cr0);
			b0 = YCbCrtoB(y0, cb0, cr0);
			r1 = YCbCrtoR(y1, cb0, cr0);
			g1 = YCbCrtoG(y1, cb0, cr0);
			b1 = YCbCrtoB(y1, cb0, cr0);
#endif
			
			if (r0>255 ) r0 = 255;
			if (r0<0) r0 = 0;
			if (g0>255 ) g0 = 255;
			if (g0<0) g0 = 0;
			if (b0>255 ) b0 = 255;
			if (b0<0) b0 = 0;
			
			if (r1>255 ) r1 = 255;
			if (r1<0) r1 = 0;
			if (g1>255 ) g1 = 255;
			if (g1<0) g1 = 0;
			if (b1>255 ) b1 = 255;
			if (b1<0) b1 = 0;
			
			// 5:6:5 16bit format
			rgb0 = (((U16)r0>>3)<<11) | (((U16)g0>>2)<<5) | (((U16)b0>>3)<<0);	//RGB565.
			rgb1 = (((U16)r1>>3)<<11) | (((U16)g1>>2)<<5) | (((U16)b1>>3)<<0);	//RGB565.
			
			rgb = (rgb1<<16) | rgb0;
			
			return(rgb);
		}
		
		
		void Display_Cam_Image(U32 size_x, U32 size_y)
		{
			U8 *buffer_y, *buffer_cb, *buffer_cr;
			U8 y0,y1,cb0,cr0;
			int r0,r1,g0,g1,b0,b1;
			U32 rgb_data0, rgb_data1; 
			U32 x, y;
			int temp;
			
			if (CAM_CODEC_4PP)
				temp = (((rCICOSTATUS>>26)&0x3)+4-2)%4; // current frame memory block
			else
				temp = 4;
			//Uart_Printf("Current Frame memory %d\n", temp);
			
			switch (temp) // current frame mem - 2
			{
			case 0:
				buffer_y = (U8 *)rCICOYSA1;
				buffer_cb = (U8 *)rCICOCBSA1;
				buffer_cr = (U8 *)rCICOCRSA1;
				break;
			case 1:
				buffer_y = (U8 *)rCICOYSA2;
				buffer_cb = (U8 *)rCICOCBSA2;
				buffer_cr = (U8 *)rCICOCRSA2;
				break;
			case 2:
				buffer_y = (U8 *)rCICOYSA3;
				buffer_cb = (U8 *)rCICOCBSA3;
				buffer_cr = (U8 *)rCICOCRSA3;
				break;
			case 3:
				buffer_y = (U8 *)rCICOYSA4;
				buffer_cb = (U8 *)rCICOCBSA4;
				buffer_cr = (U8 *)rCICOCRSA4;
				break;
			default :
				buffer_y = (U8 *)rCICOYSA1;
				buffer_cb = (U8 *)rCICOCBSA1;
				buffer_cr = (U8 *)rCICOCRSA1;
				break;
			}
			
			//Uart_Printf("End setting : Y-0x%x, Cb-0x%x, Cr-0x%x\n", buffer_y, buffer_cb, buffer_cr);	
			
#if CAM_CODEC_OUTPUT==CAM_CCIR420
			for (y=0;y<size_y;y++) // YCbCr 4:2:0 format
			{
				for (x=0;x<size_x;x+=2)
				{		
					rgb_data0 = Conv_YCbCr_Rgb(*buffer_y++, *buffer_y++, *buffer_cb++, *buffer_cr++);
					frameBuffer16BitTft240320[y][x/2] = rgb_data0;
					
					if ( (x==(size_x-2)) && ((y%2)==0) ) // when x is last pixel & y is even number
					{
						buffer_cb -= size_x/2;
						buffer_cr -= size_x/2;
					} 	
				}
			}	
#else
			for (y=0;y<size_y;y++) // YCbCr 4:2:2 format
			{
				for (x=0;x<size_x;x+=2)
				{ 	
					rgb_data0 = Conv_YCbCr_Rgb(*buffer_y++, *buffer_y++, *buffer_cb++, *buffer_cr++);
					//frameBuffer16BitTft240320[y][x/2] = rgb_data0;
					
					//--- hzh
					//frameBuffer16BitTft240320是32位的數組!!!
					//in HWSWP=1 16BPP mode d0~d15 is 1st pixel, d16~d31 is 2nd
					//in HWSWP=0 16BPP mode d0~d15 is 2nd pixel, d16~d31 is 1st			
					
					//	U16 lt;
					//Uart_Printf("%x,%x\n", *buffer_cb, *buffer_cr);
					//測試只輸出Y(亮度)
					//	lt = (*buffer_y++)>>3;
					//	rgb_data0  = ((lt<<11)|(lt<<5)|(lt))<<16;	//1st pixel
					//	lt = (*buffer_y++)>>3;
					//	rgb_data0 |= (lt<<11)|(lt<<5)|(lt);		//2nd pixel
					//測試只輸出U
					//	lt   = (*buffer_cb)>>3;
					//	rgb_data0  = ((lt<<11)|(lt<<5)|(lt))<<16;	//1st pixel
					//	lt   = (*buffer_cb++)>>3;
					//	rgb_data0 |= (lt<<11)|(lt<<5)|(lt);		//2nd pixel
					//測試只輸出V
					//	lt   = (*buffer_cr)>>3;
					//	rgb_data0  = ((lt<<11)|(lt<<5)|(lt))<<16;	//1st pixel
					//	lt   = (*buffer_cr++)>>3;
					//	rgb_data0 |= (lt<<11)|(lt<<5)|(lt);		//2nd pixel
					
					//測試ov9650固定輸出U=0x1f,V=0x70的模式
					//	rgb_data0  = *buffer_y++<<24;	//1st pixel
					//	rgb_data0 |= *buffer_cb++<<16;
					//	rgb_data0 |= *buffer_y++<<8;	//2nd pixel
					//	rgb_data0 |= *buffer_cr++;
					//	rgb_data0 &= ~0xff00f800;
					//	rgb_data0 |= 0x0700;		
					
					//測試ov9650輸出RGB565格式
					//	rgb_data0  = *buffer_y++<<24;	//1st pixel
					//	rgb_data0 |= *buffer_cb++<<16;
					//	rgb_data0 |= *buffer_y++<<8;	//2nd pixel
					//	rgb_data0 |= *buffer_cr++;
					//RGB高低交換
					//	rgb_data0  = *buffer_cb++<<24;	//1st pixel
					//	rgb_data0 |= *buffer_y++<<16;
					//	rgb_data0 |= *buffer_cr++<<8;	//2nd pixel
					//	rgb_data0 |= *buffer_y++;
					//	rgb_data0 &= 0xf800f800;	//red   only
					//	rgb_data0 &= 0x07e007e0;	//green only
					//	rgb_data0 &= 0x001f001f;	//blue  only
					
					LCD_BUFFER_CAM[y][x/2] = rgb_data0;
					//Uart_Printf("%08x\n", rgb_data0);
					//---
				}
			} 
#endif
			//	memcpy((unsigned char*)0x30100000,  frameBuffer16BitTft240320, 320*240*2); // QCIF=178*144*2
}

void Test_CamPreview(void)
{
	
	U8 flag;
	U32 i,j,k,value;
	
	Uart_Printf("\nNow Start Camera Preview\n");
	//camera global variables
	camTestMode=CAM_TEST_MODE_PVIEW;
	camCodecCaptureCount=0;
	camPviewCaptureCount=0;
	camPviewStatus=CAM_STOPPED;
	camCodecStatus=CAM_STOPPED;
	flagCaptured_P=0;
	
	LCD_LTS350Q1_PE1_Init() ;
	
	Uart_Printf( "preview sc control = %x\n" , rCIPRSCCTRL ) ;
	// Initialize Camera interface
	CamInit(320, 240, 320, 240, 0, 0,  CAM_FRAMEBUFFER_C, CAM_FRAMEBUFFER_P);
	Uart_Printf("preview sc control = %x\n", rCIPRSCCTRL);
	// Start Capture	
	rSUBSRCPND |= BIT_SUB_CAM_C|BIT_SUB_CAM_P;
	ClearPending(BIT_CAM);
	pISR_CAM = (U32)CamIsr;    
	CamPreviewIntUnmask();
	CamCaptureStart(CAM_PVIEW_SCALER_CAPTURE_ENABLE_BIT);
	Uart_Printf("Press 'ESC' key to exit!\n");
	while (1)
	{
		if (flagCaptured_P)
		{
			flagCaptured_P = 0;
			//			Uart_Printf("Enter Cam A port, count = %d\n",camCodecCaptureCount);
		}
		if ( Uart_GetKey() == ESC_KEY ) break;			
	}
	
	CamCaptureStop();
	
	Uart_Printf("\nWait until the current frame capture is completed.\n");
	while(camPviewStatus!=CAM_STOPPED)
		if (Uart_GetKey()== '\r') break;			
		
		Uart_Printf("CIS format = %x\n", rCISRCFMT);
		Uart_Printf("image cap = %x\n", rCIIMGCPT);
		Uart_Printf("preview sc control = %x\n", rCIPRSCCTRL);
		Uart_Printf("preview control = %x\n", rCIPRCTRL);
		Uart_Printf("codec sc control = %x\n", rCICOSCCTRL);
		Uart_Printf("codec control = %x\n", rCICOCTRL);
		Uart_Printf("pr addr1 = %x\n", rCIPRCLRSA1);
		Uart_Printf("pr addr2 = %x\n", rCIPRCLRSA2);
		
		Uart_Printf("camCodecCaptureCount=%d\n",camCodecCaptureCount);
		Uart_Printf("camPviewCaptureCount=%d\n",camPviewCaptureCount);
		//	CamPreviewIntMask();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
极品瑜伽女神91| 91亚洲永久精品| 91免费版在线看| 日韩女优av电影| 亚洲日本一区二区| 国产伦精品一区二区三区免费 | 亚洲日韩欧美一区二区在线| 日韩国产高清在线| 91丨porny丨首页| 久久久www免费人成精品| 日韩不卡免费视频| 欧洲国内综合视频| 综合久久综合久久| 欧美二区三区的天堂| 亚洲欧美在线视频| 成人黄页在线观看| 国产精品日产欧美久久久久| 久久国产乱子精品免费女| 在线观看视频欧美| 一区二区三区免费看视频| 成人aa视频在线观看| 国产婷婷色一区二区三区| 黄一区二区三区| 日韩美女主播在线视频一区二区三区 | 日本一区二区三区高清不卡| 久久精品72免费观看| 777xxx欧美| 日韩高清不卡一区| 日韩欧美一级精品久久| 久久激五月天综合精品| 久久女同性恋中文字幕| 国产精品99久久久久久有的能看 | 亚洲最快最全在线视频| 91日韩精品一区| 亚洲精品中文字幕在线观看| 日本韩国一区二区| 亚洲妇熟xx妇色黄| 91精品久久久久久久91蜜桃 | 精品1区2区在线观看| 久草中文综合在线| 久久婷婷一区二区三区| 国产99久久久国产精品潘金网站| 欧美国产日韩在线观看| 97se亚洲国产综合自在线不卡 | 欧美日韩精品三区| 蜜臀av性久久久久蜜臀aⅴ| 精品91自产拍在线观看一区| 成人免费高清在线| 一区二区三区在线观看动漫| 7878成人国产在线观看| 激情国产一区二区| 亚洲欧美日韩国产另类专区| 欧美精品电影在线播放| 黑人巨大精品欧美一区| 亚洲天堂中文字幕| 欧美一区二区性放荡片| 国产精品一区二区免费不卡| 国产精品嫩草久久久久| 欧美唯美清纯偷拍| 国产精品一区专区| 亚洲激情成人在线| 2023国产一二三区日本精品2022| 不卡一区二区在线| 秋霞午夜av一区二区三区| 欧美国产日韩a欧美在线观看 | 亚洲在线免费播放| 精品国产乱码久久久久久夜甘婷婷| 成人av免费网站| 日韩av电影天堂| 久久激情五月激情| 亚洲色图欧美激情| 精品欧美乱码久久久久久| 91视视频在线直接观看在线看网页在线看 | 国产欧美精品国产国产专区| 色噜噜狠狠色综合中国| 国产一区二区中文字幕| 亚洲综合在线免费观看| 久久蜜臀中文字幕| 欧美精品v国产精品v日韩精品| 不卡欧美aaaaa| 久久精品国产精品亚洲综合| 亚洲一区二区三区四区在线免费观看| 精品久久久久久无| 欧美日韩高清一区| 99久久伊人久久99| 国产一区二区三区在线观看免费视频 | 九九精品视频在线看| 午夜视频在线观看一区二区| 中文久久乱码一区二区| 亚洲精品在线免费观看视频| 欧美精品tushy高清| 欧美主播一区二区三区| av一区二区不卡| 国产精品一区二区三区99| 麻豆传媒一区二区三区| 日韩一区精品视频| 亚洲一区精品在线| 亚洲已满18点击进入久久| ...av二区三区久久精品| 久久久国产精品麻豆| 精品久久久久99| 精品美女在线播放| 这里只有精品99re| 91麻豆精品国产91久久久使用方法| 一本大道久久a久久综合 | 国产盗摄一区二区| 国产美女精品人人做人人爽| 精品一区二区三区免费播放| 久久爱另类一区二区小说| 免费久久99精品国产| 老司机精品视频线观看86| 日韩av电影一区| 久久99精品久久久久婷婷| 精品一区二区三区蜜桃| 国产美女精品人人做人人爽| 国产精品资源在线观看| 国产xxx精品视频大全| 成人av电影免费在线播放| a4yy欧美一区二区三区| 色婷婷综合久久| 欧美综合视频在线观看| 欧美久久久久久久久中文字幕| 精品视频一区二区三区免费| 欧美日韩在线播放三区四区| 91麻豆精品国产91久久久 | 一区二区激情视频| 亚洲一区二区欧美| 日韩成人av影视| 国产精品99久久久久久久vr| 国产99一区视频免费| 色激情天天射综合网| 69p69国产精品| 久久久www成人免费毛片麻豆| 亚洲国产成人一区二区三区| 亚洲精品中文字幕在线观看| 亚洲成人精品一区二区| 老司机精品视频导航| 高清不卡在线观看| 欧美性欧美巨大黑白大战| 日韩午夜中文字幕| 国产精品久久久久久久久免费相片| 亚洲精品视频一区| 免费成人av资源网| 成人国产精品免费观看动漫| 精品视频色一区| 国产三区在线成人av| 一卡二卡欧美日韩| 国产在线播精品第三| 色婷婷综合久久久中文一区二区 | 国产福利91精品| 欧美三级三级三级| 久久久精品免费免费| 亚洲国产sm捆绑调教视频| 国产精品99久久久久久久vr| 欧美日韩精品一区二区| 中文在线免费一区三区高中清不卡| 亚洲国产综合视频在线观看| 国产一区不卡精品| 欧美日韩黄视频| 亚洲欧洲一区二区在线播放| 毛片基地黄久久久久久天堂| 91视频在线观看免费| 久久免费电影网| 日av在线不卡| 欧美亚洲动漫精品| 中文字幕欧美激情| 老司机精品视频在线| 欧美日韩三级一区二区| 日韩美女视频一区二区 | 国产精品天干天干在线综合| 一区二区三区四区激情| 丁香网亚洲国际| 日韩一级二级三级精品视频| 伊人一区二区三区| 成人av免费在线| 国产欧美一区二区三区在线看蜜臀| 日本成人在线不卡视频| 欧美视频在线不卡| 亚洲欧洲av色图| 成年人网站91| 欧美国产欧美综合| 国产精品18久久久久久久久久久久 | 国产一区二区三区四| 欧美精品在线视频| 无吗不卡中文字幕| 欧美日韩成人在线| 一区二区成人在线| 色94色欧美sute亚洲线路二| 中文字幕一区在线| 成人精品视频一区二区三区| 久久奇米777| 国产成人丝袜美腿| 国产午夜精品一区二区三区嫩草| 国产一区三区三区| 国产日韩欧美高清在线| 国产成人av网站| 国产精品乱子久久久久| 波多野结衣一区二区三区| 国产精品福利在线播放| 成人午夜看片网址|