📄 tvenc_test.c
字号:
/**************************************************************************************
*
* 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 + -