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

📄 videograph.c

📁 基于BF533的视频采集及显示
💻 C
字号:

#include <cdefBF533.h>
#include "videograph.h"

void Init_ADV7171_PPI(void)
{
	*pPPI_CONTROL = PACK_EN | /*DMA32 | */PORT_DIR;
}

void Init_ADV7171_DMA(void)
{
	*pDMA0_PERIPHERAL_MAP = 0x0000;
	*pDMA0_START_ADDR = (unsigned short *)VIDEO_FRAME_BUFFER_BASE;
	//*pDMA0_CONFIG = 0x0094;
	*pDMA0_CONFIG = 0x1014;


	*pDMA0_X_COUNT = HORIZONTAL_TOTAL_PAL >> 1;
	*pDMA0_Y_COUNT = NUM_LINES_PAL;
	
	*pDMA0_X_MODIFY = 0x0002;
	*pDMA0_Y_MODIFY = 0x0002;
}


//#define BLANK_DATA	0x80108010
#define BLANK_DATA	0x10801080

#define dim(x) (sizeof(x) / sizeof(x[0]))

typedef struct _LINE_MAP {
	WORD	StartLine;
	WORD	EndLine;
	DWORD	ControlCode_SAV;
	DWORD	ControlCode_EAV;
	BOOL	VBlank; // Is in Vertical Blanking 
} LINE_MAP;
/*
LINE_MAP PalLineMap[6] =
{
	{1, 22, 0xFF0000AB, 0xFF0000B6, TRUE},
	{23, 310, 0xFF000080, 0xFF00009D, FALSE},
	{311, 312, 0xFF0000AB, 0xFF0000B6, TRUE},
	{313, 335, 0xFF0000EC, 0xFF0000F1, TRUE},
	{336, 623, 0xFF0000C7, 0xFF0000DA, FALSE},
	{624, 625, 0xFF0000EC, 0xFF0000F1, TRUE},
};

LINE_MAP NtscLineMap[6] =
{
	{1, 3, 0xFF0000EC, 0xFF0000F1, TRUE},
	{4, 20, 0xFF0000AB, 0xFF0000B6, TRUE},
	{21, 263, 0xFF000080, 0xFF00009D, FALSE},
	{264, 265, 0xFF0000AB, 0xFF0000B6, TRUE},
	{266, 282, 0xFF0000EC, 0xFF0000F1, TRUE},
	{283, 525, 0xFF0000C7, 0xFF0000DA, FALSE},
};

DWORD ColorBarTable[8] =
{
	0x80108010, // black
	0xF0296E29, // blue
	0x5A51F051, // red
	0xCA6ADE6A, // magenta
	0x36912291, // green
	0xA6AA10AA, // cyan
	0x10D292D2, // yellow
	0x80EB80EB, // white
};
*/
LINE_MAP PalLineMap[6] =
{
	{1, 22, 0xAB0000FF, 0xB60000FF, TRUE},
	{23, 310, 0x800000FF, 0x9D0000FF, FALSE},
	{311, 312, 0xAB0000FF, 0xB60000FF, TRUE},
	{313, 335, 0xEC0000FF, 0xF10000FF, TRUE},
	{336, 623, 0xC70000FF, 0xDA0000FF, FALSE},
	{624, 625, 0xEC0000FF, 0xF10000FF, TRUE},
};

LINE_MAP NtscLineMap[6] =
{
	{1, 3, 0xEC0000FF, 0xF10000FF, TRUE},
	{4, 20, 0xAB0000FF, 0xB60000FF, TRUE},
	{21, 263, 0x800000FF, 0x9D0000FF, FALSE},
	{264, 265, 0xAB0000FF, 0xB60000FF, TRUE},
	{266, 282, 0xEC0000FF, 0xF10000FF, TRUE},
	{283, 525, 0xC70000FF, 0xDA0000FF, FALSE},
};

DWORD ColorBarTable[8] =
{
	0x10801080, // black
	0x296E29F0, // blue
	0x51F0505A, // red
	0x6ADE6ACA, // magenta
	0x91229136, // green
	0xAA10AAA6, // cyan
	0xD292D210, // yellow
	0xEB80EB80, // white
};

void PalVideoOutFrameBufferInit(void)
{
	DWORD *buf = (DWORD *)VIDEO_FRAME_BUFFER_BASE;
	DWORD *datas = (DWORD *)0x00;
	WORD i, j, k, c;

	for (i = 1; i <= NUM_LINES_PAL; i++)
	{
		for (j = 0; j < dim(PalLineMap); j++)
		{
			if (i >= PalLineMap[j].StartLine && i <= PalLineMap[j].EndLine)
			{
				// EAV Code
				*buf++ = PalLineMap[j].ControlCode_EAV;

				// Horizontal Blanking
				for (k = 0; k < (HORIZONTAL_BLANKING_PAL >> 2); k++)
					*buf++ = BLANK_DATA;

				// SAV Code
				*buf++ = PalLineMap[j].ControlCode_SAV;

				if (PalLineMap[j].VBlank)
				{
					// Vertical Blanking+.3
					for (k = 0; k < (HORIZONTAL_ACTIVE >> 2); k++)
						*buf++ = BLANK_DATA;
				}
				else
				{
					// Active Video
					//直条纹
				for (c = 0; c < dim(ColorBarTable); c++)
					{
						for (k = 0; k < ((HORIZONTAL_ACTIVE >> 2) / dim(ColorBarTable)); k++)
							*buf++ = ColorBarTable[c];
					}
			
			/*		if(i==336)
				 	datas=(DWORD *)0x00;
				    for (k=0;k<(HORIZONTAL_ACTIVE >> 2);k++)
				    	*buf++=*datas++;*/
			
					
				}
				break;
			}
		}
	}



		
	
}

/*void NtscVideoOutFrameBufferInit(void)
{
	DWORD *buf = (DWORD *)VIDEO_FRAME_BUFFER_BASE;
	WORD i, j, k, c;

	for (i = 1; i <= NUM_LINES_NTSC; i++)
	{
		for (j = 0; j < dim(NtscLineMap); j++)
		{
			if (i >= NtscLineMap[j].StartLine && i <= NtscLineMap[j].EndLine)
			{
				// EAV Code
				*buf++ = NtscLineMap[j].ControlCode_EAV;

				// Horizontal Blanking
				for (k = 0; k < (HORIZONTAL_BLANKING_NTSC >> 2); k++)
					*buf++ = BLANK_DATA;

				// SAV Code
				*buf++ = NtscLineMap[j].ControlCode_SAV;

				if (NtscLineMap[j].VBlank)
				{
					// Vertical Blanking
					for (k = 0; k < (HORIZONTAL_ACTIVE >> 2); k++)
						*buf++ = BLANK_DATA;
				}
				else
				{
					// Active Video
					for (c = 0; c < dim(ColorBarTable); c++)
					{
						for (k = 0; k < ((HORIZONTAL_ACTIVE >> 2) / dim(ColorBarTable)); k++)
							*buf++ = ColorBarTable[c];
					}
				}
				break;
			}
		}
	}
}   */

⌨️ 快捷键说明

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