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

📄 tvenc_test.c

📁 s3c6400 ADS下官方测试程序
💻 C
📖 第 1 页 / 共 5 页
字号:
/**************************************************************************************
* 
*	Project Name : S3C6400 Validation
*
*	Copyright 2007 by Samsung Electronics, Inc.
*	All rights reserved.
*
*	Project Description :
*		This software is only for validating functions of the S3C6400.
*		Anybody can use this software without our permission.
*  
*--------------------------------------------------------------------------------------
* 
*	File Name : tvenc_test.c
*  
*	File Description : This file implements the functons for TV Encoder controller test.
*
*	Author : Heemyung.noh
*	Dept. : AP Development Team
*	Created Date : 2007/01/15
*	Version : 0.1 
* 
*	History
*	- Created(Heemyung.noh 2007/01/15)
*  
**************************************************************************************/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include "def.h"
#include "option.h"
#include "library.h"
#include "sfr6400.h"
#include "system.h"
#include "sysc.h"
#include "intc.h"
#include "tvenc.h"
#include "lcd.h"
#include "camera.h"
#include "post.h"
#include "glib.h"

#if 0
#define IMG_CIF_CBAR 	"./images/cif_colorbar.rgb"

//#define IMG_RGB_QCIF	"./images/bmp/QCIF_24bits.bmp"
#define IMG_RGB_QCIF	"./images/bmp/QCIF_24bits.bmp"
#define IMG_RGB_QVGA	"./images/bmp/QVGA_24bits.bmp"
#define IMG_RGB_CIF		"./images/bmp/CIF_24bits.bmp"
#define IMG_RGB_VGA		"./images/bmp/VGA_24bits.bmp"
#define IMG_RGB_WIDE	"./images/bmp/WIDE_24bits.bmp"

#define IMG_420_QVGA	"./images/ycbycr/QVGA_420.yuv"
#define IMG_420_CIF		"./images/ycbycr/CIF_420.yuv"
#define IMG_420_VGA		"./images/ycbycr/VGA_420.yuv"
#define IMG_420_WIDE	"./images/ycbycr/WIDE_420.yuv"

#define IMG_422_QCIF	"./images/ycbycr/QCIF_422.yuv"
#define IMG_422_QVGA	"./images/ycbycr/QVGA_422.yuv"
#define IMG_422_CIF		"./images/ycbycr/CIF_422.yuv"
#define IMG_422_VGA		"./images/ycbycr/VGA_422.yuv"
#define IMG_422_WIDE	"./images/ycbycr/WIDE_422.yuv"
#else	//rb1004
#define IMG_CIF_CBAR 	"D:/MyDocument/AP/S3C6400/Software/MobilePlatform/FW_2nd_1229/images/cif_colorbar.rgb"

#define IMG_RGB_QCIF	"D:/MyDocument/AP/S3C6400/Software/MobilePlatform/FW_2nd_1229/images/bmp/QCIF_24bits.bmp"  
#define IMG_RGB_QVGA	"D:/MyDocument/AP/S3C6400/Software/MobilePlatform/FW_2nd_1229/images/bmp/QVGA_24bits.bmp"
#define IMG_RGB_CIF		"D:/MyDocument/AP/S3C6400/Software/MobilePlatform/FW_2nd_1229/images/bmp/CIF_24bits.bmp"
#define IMG_RGB_VGA	"D:/MyDocument/AP/S3C6400/Software/MobilePlatform/FW_2nd_1229/images/bmp/VGA_24bits.bmp"
#define IMG_RGB_WIDE	"D:/MyDocument/AP/S3C6400/Software/MobilePlatform/FW_2nd_1229/images/bmp/WIDE_24bits.bmp"

#define IMG_420_QVGA	"D:/MyDocument/AP/S3C6400/Software/MobilePlatform/FW_2nd_1229/images/ycbycr/QVGA_420.yuv"
#define IMG_420_CIF		"D:/MyDocument/AP/S3C6400/Software/MobilePlatform/FW_2nd_1229/images/ycbycr/CIF_420.yuv"
#define IMG_420_VGA		"D:/MyDocument/AP/S3C6400/Software/MobilePlatform/FW_2nd_1229/images/ycbycr/VGA_420.yuv"
#define IMG_420_WIDE	"D:/MyDocument/AP/S3C6400/Software/MobilePlatform/FW_2nd_1229/images/ycbycr/WIDE_420.yuv"

#define IMG_422_QCIF	"D:/MyDocument/AP/S3C6400/Software/MobilePlatform/FW_2nd_1229/images/ycbycr/QCIF_422.yuv"
#define IMG_422_QVGA	"D:/MyDocument/AP/S3C6400/Software/MobilePlatform/FW_2nd_1229/images/ycbycr/QVGA_422.yuv"
#define IMG_422_CIF		"D:/MyDocument/AP/S3C6400/Software/MobilePlatform/FW_2nd_1229/images/ycbycr/CIF_422.yuv"
#define IMG_422_VGA		"D:/MyDocument/AP/S3C6400/Software/MobilePlatform/FW_2nd_1229/images/ycbycr/VGA_422.yuv"
#define IMG_422_WIDE	"D:/MyDocument/AP/S3C6400/Software/MobilePlatform/FW_2nd_1229/images/ycbycr/WIDE_422.yuv"
#endif

#define TVSIZE_NTSC		(0)
#define TVSIZE_PAL		(1)
#define TV_MUTE_STEP		(0x8)

static POST oPost;
static POST oSc;

static u32 uConvertAddr;
u32 uImgAddr;
static u32 uGlibStAddr;
static u32 uImgAddr1;

static u32 uImgXsize;
static u32 uImgYsize;
CSPACE uImgResolution;

static const char* pImg_RGB;
static const char* pImg_YUV;

static eTV_CONN_TYPE eConnType;
static TV_STANDARDS eSigType;

static u32 uTvSizeFormat = TVSIZE_NTSC;

typedef struct
{
	const char * pDesc;
	TV_STANDARDS eType;
} TV_TYPE;

typedef enum
{
	eTV_UpPara, eTV_DownPara, eTV_ExitPara
}TVT_UPDOWN;

	
void __irq Isr_FifoUnderrun(void)
{
	UART_Printf("@Isr_FifoUnderrun\n");

	TVENC_ClearUnderrunInt();
	INTC_ClearVectAddr();
}

void __irq Isr_CamPview(void)
{
	u32 uFrmNum;

//	UART_Printf("@Isr_CamPview\n");

	CAMERA_GetFrameNum(P_PATH, &uFrmNum);

	if (uFrmNum == 0 || uFrmNum == 2)
		POST_SetNextFrameStAddr(uImgAddr, 0, &oPost);
	else
		POST_SetNextFrameStAddr(uImgAddr1, 0, &oPost);

	LCD_Trigger();

	//INTC_ClearPending(INT_CAMIF_P);
	CAMERA_SetClearPreviewInt();
	INTC_ClearVectAddr();
}


void __irq Isr_CamPview_Scaler(void)
{
	u32 uFrmNum;
	
	CAMERA_GetFrameNum(P_PATH, &uFrmNum);

	if (uFrmNum == 0 || uFrmNum == 2)
		POST_SetNextFrameStAddr(uImgAddr, 0, &oSc);
	else
		POST_SetNextFrameStAddr(uImgAddr1, 0, &oSc);
	LCD_Trigger();
	
	CAMERA_SetClearPreviewInt();
	INTC_ClearVectAddr();
}


void TVENCT_SelectClockDivider(void)
{
	u32 uPostClockDivide;
	
	UART_Printf("[TVENCT_SelectClockDivider]\n");

	UART_Printf("\n");
	UART_Printf("Select the source clock [0x01 ~ 0x3F] : ");
	
	uPostClockDivide = (u32)UART_GetIntNum();

	POST_SetClockDivide(uPostClockDivide, &oSc);
}


static void TVENCT_MakeImage(void)
{
	u32 sel;
	u32 sel_image;

	uImgAddr = CODEC_MEM_ST;

	UART_Printf("What do you want to display Image format, RGB or YUV ?\n");
	UART_Printf("[0] : RGB\n");
	UART_Printf("[1] : YUV\n");
	UART_Printf("Select number : ");
	sel = UART_GetIntNum();
	//sel = 0;
	
	if (sel == 1)
	{
		UART_Printf("\nSelect Image..\n");
		UART_Printf("[0] : YCbCr420 QCIF [176x144] Non-Interleave\n");
		UART_Printf("[1] : YCbCr420 QVGA [320x240] Non-Interleave\n");
		UART_Printf("[2] : YCbCr420 CIF  [352x288] Non-Interleave\n");
		UART_Printf("[3] : YCbCr420 VGA  [640x480] Non-Interleave\n");
		UART_Printf("[4] : YCbCr420 WIDE [720x480] Non-Interleave\n");
		UART_Printf("[5] : YCbCr422 QCIF [176x144] Interleave\n");
		UART_Printf("[6] : YCbCr422 QVGA [320x240] Interleave\n");
		UART_Printf("[7] : YCbCr422 CIF  [352x288] Interleave\n");
		UART_Printf("[8] : YCbCr422 VGA  [640x480] Interleave\n");
		UART_Printf("[9] : YCbCr422 WIDE [720x480] Interleave\n");
		UART_Printf("Select number : ");
		sel_image = UART_GetIntNum();

		if (sel_image < 4)
			uImgResolution = YC420;
		else
			uImgResolution = YCBYCR;
		
		switch (sel_image % 5)
		{
			case 0:
				uImgXsize = 176, uImgYsize = 144;
				break;
			case 1:
				uImgXsize = 320, uImgYsize = 240;
				break;
			case 2:
				uImgXsize = 352, uImgYsize = 288;
				break;
			case 3:
				uImgXsize = 640, uImgYsize = 480;
				break;
			case 4:
				uImgXsize = 720, uImgYsize = 480;
				break;
		}

		uGlibStAddr = uImgAddr + uImgXsize*uImgYsize*2;

		GLIB_InitInstance(uGlibStAddr, uImgXsize, uImgYsize, RGB24);
		GLIB_DrawPattern(uImgXsize, uImgYsize);
		
		POST_InitIp(uImgXsize, uImgYsize, uGlibStAddr, RGB24, 
					uImgXsize, uImgYsize, uImgAddr, uImgResolution,
					1, false, ONE_SHOT, &oPost);
		POST_StartProcessing(&oPost);
		while (!POST_IsProcessingDone(&oPost));

	}
	else
	{
		UART_Printf("\nSelect Image\n");
		UART_Printf("[0] : RGB16 QCIF [176x144]\n");
		UART_Printf("[1] : RGB16 QVGA [320x240]\n");
		UART_Printf("[2] : RGB16 CIF  [352x288]\n");
		UART_Printf("[3] : RGB16 VGA  [640x480]\n");
		UART_Printf("[4] : RGB16 WIDE [720x480]\n");
		UART_Printf("[5] : RGB24 QCIF [176x144]\n");
		UART_Printf("[6] : RGB24 QVGA [320x240]\n");
		UART_Printf("[7] : RGB24 CIF  [352x288]\n");
		UART_Printf("[8] : RGB24 VGA  [640x480]\n");
		UART_Printf("[9] : RGB24 WIDE [720x480]\n");
		UART_Printf("[10] : RGB24 WIDE [800x480]\n");
		UART_Printf("[11] : RGB24 WQVGA [480x272]\n");
		UART_Printf("Select number : ");

		sel_image=UART_GetIntNum();
		//sel_image = 1;
		
		if (sel_image >= 5)
			uImgResolution = RGB24;
		else
			uImgResolution = RGB16;

		switch (sel_image)
		{
			case 0:
			case 5:
				uImgXsize = 176, uImgYsize = 144;
				break;
			case 1:
			case 6:
				uImgXsize = 320, uImgYsize = 240;
				break;
			case 2:
			case 7:
				uImgXsize = 352, uImgYsize = 288;
				break;
			case 3:
			case 8:
				uImgXsize = 640, uImgYsize = 480;
				break;
			case 4:
			case 9:
				uImgXsize = 720, uImgYsize = 480;
				break;
			case 10:
				uImgXsize = 800, uImgYsize = 480;
				break;
			case 11:
				uImgXsize = 720, uImgYsize = 360;	
				break;
		}

		GLIB_InitInstance(uImgAddr, uImgXsize, uImgYsize, uImgResolution);
		GLIB_DrawPattern(uImgXsize, uImgYsize);
	}
}


static void TVENCT_GetTVFullSize(u32 *uWidth, u32 *uHeight)
{
	if(uTvSizeFormat == TVSIZE_PAL)
	{
		*uWidth = 720;
		*uHeight = 576;
	}
	else if(uTvSizeFormat == TVSIZE_NTSC)
	{
		*uWidth = 720;
		*uHeight = 480;
	}
	else
	{
		UART_Printf("TV Output Type Error....!!(Press any key)\n");
		UART_Getc();
	}
}


static void TVENCT_SetTVParameter(void)
{
	s32 sSel;
	u8 ucTemp;
	u32 uValue, uSelColor; 
	eMACROPATTERN ePattern;

	while(1)
	{
		UART_Printf("=====================================================\n");
		UART_Printf("[TVENCT_SetTVParameter]\n");
		UART_Printf("\n");
		UART_Printf("0 : MacroVision Enable\n");
		UART_Printf("1 : MacroVision Disable\n");
		UART_Printf("2 : Gamma Control\n");
		UART_Printf("3 : Mute Control\n");
		UART_Printf("4 : HUE Control\n");
		UART_Printf("5 : Contrast Gain Control\n");
		UART_Printf("6 : Cb Gain Control\n");
		UART_Printf("7 : Cr Gain Control\n");
		UART_Printf("8 : Brightness Gain Control\n");	
		UART_Printf("9 : Vertical/Horizontal Active window center\n");	
		UART_Printf("10 : Enhancer Demo Window\n");	
		UART_Printf("11 : Background\n");
		UART_Printf("12 : Sharpness\n");
		UART_Printf("=====================================================\n");
		UART_Printf("Select ('Enter' to exit) : ");	

		sSel = UART_GetIntNum();

		if(sSel == -1)
			break;

		switch(sSel)
		{
			case 0	: 	if( (eSigType == NTSC_M) || (eSigType == NTSC_J) || (eSigType == PAL_M) || (eSigType == NTSC_443) )
							ePattern = eAGC4L;
						else if( (eSigType == PAL_NC) || (eSigType == PAL_N) || (eSigType == PAL_BGHID) )
							ePattern = eP01;
						
						TVENC_EnableMacroVision(eSigType, ePattern);
						UART_Printf("MacroVision is enabled\n");
						break;
						
			case 1	: 	TVENC_DisableMacroVision();
						UART_Printf("MacroVision is disabled\n");
						break;	
						
			case 2 	: 	TVENC_EnableGammaControl(TRUE);
						UART_Printf("\n");
						UART_Printf("'u' : Up,  'd' : Down\n");
						UART_Printf("'q' key to exit\n");
						UART_Printf("\n");
						while(1)
						{	
							uValue = TVENC_GetGammaGain();						
							UART_Printf("Current Gamma gain value[0~3] : %d\n", uValue);
							ucTemp = UART_Getc();
							
							if( (ucTemp == 'u') && (uValue < 3) )
								TVENC_SetGammaGain(uValue+1);
							else if ( (ucTemp == 'd') && (uValue > 0) )
								TVENC_SetGammaGain(uValue-1);
							else if(ucTemp == 'q')
								break;
						}
						TVENC_EnableGammaControl(FALSE);
						break;
						
			case 3	:	TVENC_EnableMuteControl(TRUE);
						UART_Printf("\n");
						UART_Printf("'w' : Mute Y Up,  's' : Mute Y Down\n");
						UART_Printf("'e' : Mute Cb Up,  'd' : Mute Cb Down\n");
						UART_Printf("'r' : Mute Cr Up,  'f' : Mute Cr Down\n");	
						UART_Printf("'q' key to exit\n");
						UART_Printf("\n");

						while(1)
						{	
							u32 uY, uCb, uCr; 
						
							TVENC_GetMuteYCbCr(&uY, &uCb, &uCr);						
							UART_Printf("Current Mute Component value : [ Y:0x%02x ]  [ Cb:0x%02x ]  [ Cr:0x%02x ]\n", uY, uCb, uCr);
							ucTemp = UART_Getc();

							if( (ucTemp == 'w') && (uY < (0xFF-TV_MUTE_STEP)) )
								TVENC_SetMuteYCbCr(uY+TV_MUTE_STEP, uCb, uCr);
							else if( (ucTemp == 's') && (uY >= TV_MUTE_STEP) )
								TVENC_SetMuteYCbCr(uY-TV_MUTE_STEP, uCb, uCr);
							else if( (ucTemp == 'e') && (uCb < (0xFF-TV_MUTE_STEP)) )
								TVENC_SetMuteYCbCr(uY, uCb+TV_MUTE_STEP, uCr);
							else if( (ucTemp == 'd') && (uCb >= TV_MUTE_STEP) )
								TVENC_SetMuteYCbCr(uY, uCb-TV_MUTE_STEP, uCr);
							else if( (ucTemp == 'r') && (uCr < (0xFF-TV_MUTE_STEP)) )
								TVENC_SetMuteYCbCr(uY, uCb, uCr+TV_MUTE_STEP);
							else if( (ucTemp == 'f') && (uCr >= TV_MUTE_STEP) )
								TVENC_SetMuteYCbCr(uY, uCb, uCr-TV_MUTE_STEP);
							else if(ucTemp == 'q')
								break;							
						}
						TVENC_EnableMuteControl(FALSE);
						break;
						
			case 4	:	UART_Printf("\n");
						UART_Printf("'u' : Up,  'd' : Down\n");
						UART_Printf("'q' key to exit\n");
						UART_Printf("\n");
						
						while(1)
						{	
							uValue = TVENC_GetHuePhase();	
							UART_Printf("Current HUE Phase value[0~0xFF] : 0x%02x\n", uValue);
							ucTemp = UART_Getc();
							
							if( (ucTemp == 'u') && (uValue < 0xFF) )
								TVENC_SetHuePhase(uValue+1);
							else if ( (ucTemp == 'd') && (uValue > 0) )
								TVENC_SetHuePhase(uValue-1);
							else if(ucTemp == 'q')
								break;
						}
						break;
			case 5	:	UART_Printf("\n");
						UART_Printf("'u' : Up,  'd' : Down\n");
						UART_Printf("'q' key to exit\n");
						UART_Printf("\n");
						
						while(1)
						{	
							uValue = TVENC_GetContrast();	
							UART_Printf("Current Contrast Gain value[0~0xFF] : 0x%02x\n", uValue);
							ucTemp = UART_Getc();
							
							if( (ucTemp == 'u') && (uValue < 0xFF) )
								TVENC_SetContrast(uValue+1);

⌨️ 快捷键说明

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