?? target.c
字號:
#include <std.h>
#include <tsk.h>
#include <sem.h>
#include <gio.h>
#include <csl_dat.h>
#include <csl_cache.h>
#include <fvid.h>
#include <edc.h>
#include <vport.h>
#include <vportcap.h>
#include <vportdis.h>
#include <saa7104.h>
#include <tvp5150a.h>
#include <math.h>
#include <dm643.h>
#include "colorbar.h"
#include "DM643_vcapparams.h"
#include "DM643_vdisparams.h"
#include "C:\ti\myprojects\fanse3\videocfg.h"
#include <sem.h>
/* heap IDs defined in the BIOS configuration file */
extern Int EXTERNALHEAP;
#pragma DATA_ALIGN(YArray, 8);
#pragma DATA_ALIGN(CbArray, 8);
#pragma DATA_ALIGN(CrArray, 8);
static unsigned char YArray[704 * 600];
static unsigned char YArray2[704 * 600];
static unsigned char YArray3[704 * 600];
static unsigned char CbArray[704 * 300];
//static unsigned char CbArray2[704 * 300];
//static unsigned char CbArray3[704 * 300];
static unsigned char CrArray[704 * 300];
//static unsigned char CrArray2[704 * 300];
//static unsigned char CrArray3[704 * 300];
/* PAL_DISPLAY_ONLY : only display colorbar. */
/* PAL : capture and display video in PAL. */
/* NTSC : capture and display video in NTSC. */
/*
* ======== main ========
*/
main()
{
/******************************************************/
/* open CSL DAT module for fast copy */
/******************************************************/
CSL_init();
CACHE_clean(CACHE_L2ALL, 0, 0);
CACHE_setL2Mode(CACHE_256KCACHE);
CACHE_enableCaching(CACHE_EMIFA_CE00);
CACHE_enableCaching(CACHE_EMIFA_CE01);
DAT_open(DAT_CHAANY, DAT_PRI_LOW, DAT_OPEN_2D);
// powerdownSAA7104(1);
}
/*
* ======== tskVideoLoopback ========
* video loopback function.
*/
void tskVideoInput()
{
int status;
FVID_Handle capChan;
FVID_Frame *capFrameBuf;
int frame=0;
char *outBuf[3];
char *inBuf[3];
unsigned int id;
unsigned int i;
DM643_vCapParamsChan.segId = EXTERNALHEAP;
DM643_vCapParamsTVP5150A.hI2C = DM643_I2C_hI2C;
capChan = FVID_create("/VP2CAPTURE/A/0",
IOM_INPUT, &status, (Ptr)&DM643_vCapParamsChan, NULL);
FVID_control(capChan, VPORT_CMD_EDC_BASE+EDC_CONFIG, (Ptr)&DM643_vCapParamsTVP5150A);
FVID_control(capChan, VPORT_CMD_START, NULL);
/* handle video capture, scaling and re-format */
FVID_alloc(capChan, &capFrameBuf);
while(1)
{
frame++;
inBuf[0] = capFrameBuf->frame.iFrm.y1;
inBuf[1] = capFrameBuf->frame.iFrm.cb1;
inBuf[2] = capFrameBuf->frame.iFrm.cr1;
outBuf[0] = (char *)YArray;
outBuf[1] = (char *)CbArray;
outBuf[2] = (char *)CrArray;
FVID_exchange(capChan, &capFrameBuf);
for( i = 0; i < 480; i++)
{
id = DAT_copy(inBuf[0] + (i * 720), outBuf[0] + (i * 720), 720);
DAT_wait(id);
}
for( i = 0; i < (480 >> 1); i++)
{
id = DAT_copy(inBuf[1] + (i * 360), outBuf[1] + (i * 360), 360);
DAT_wait(id);
}
for( i = 0; i < (480 >> 1); i++)
{
id = DAT_copy(inBuf[2] + (i * 360), outBuf[2] + (i * 360), 360);
DAT_wait(id);
}
// Calculate how long it takes to capture one frame
FVID_exchange(capChan, &capFrameBuf);
inBuf[0] = capFrameBuf->frame.iFrm.y1;
inBuf[1] = capFrameBuf->frame.iFrm.cb1;
inBuf[2] = capFrameBuf->frame.iFrm.cr1;
outBuf[0] = (char *)YArray2;
//outBuf[1] = (char *)CbArray2;
//outBuf[2] = (char *)CrArray2;
for( i = 0; i < 480; i++)
{
id = DAT_copy(inBuf[0] + (i * 720), outBuf[0] + (i * 720), 720);
DAT_wait(id);
}
/*for( i = 0; i < (480 >> 1); i++)
{
id = DAT_copy(inBuf[1] + (i * 360), outBuf[1] + (i * 360), 360);
DAT_wait(id);
}
for( i = 0; i < (480 >> 1); i++)
{
id = DAT_copy(inBuf[2] + (i * 360), outBuf[2] + (i * 360), 360);
DAT_wait(id);
}*/
SEM_post(&sem0);
SEM_pend(&sem2, SYS_FOREVER);
}
}
void tskProcess()
{
//int i;
//void *inBuf[3];
//void *outBuf[3];
int framenum=0;
int i;
int j;
while(1)
{
framenum++;
SEM_pend(&sem0, SYS_FOREVER);
for( i=0; i<720*480; i++ )
{
//YArray3[i] = abs(YArray2[i] - YArray[i]);
*(YArray3+i)=abs(*(YArray2+i)-*(YArray+i));
}
/*for( i=0; i<720*240; i++ )
{
CbArray3[i] = abs(CbArray2[i] - CbArray[i]);
}
for( i=0; i<720*240; i++ )
{
CrArray3[i] = abs(CrArray2[i] - CrArray[i]);
}*/
for(j=0;j<720 * 480;j++)
{
*(YArray+j)=*(YArray3+j);
}
for(j=0;j<704 * 240;j++)
{
//CbArray[j]=CbArray3[j];
*(CbArray+j)=128;
}
for(j=0;j<704 * 240;j++)
{
//CrArray[j]=CrArray3[j];
*(CrArray+j)=128;
}
CACHE_wbAllL2(CACHE_WAIT);
CACHE_clean(CACHE_L2ALL, 0, 0);
SEM_post(&sem1);
}
}
void tskVideoOutput()
{
int status;
FVID_Handle disChan;
FVID_Frame *disFrameBuf;
char *inBuf[3], *outBuf[3];
unsigned int id;
unsigned int i;
DM643_vDisParamsChan.segId = EXTERNALHEAP;
DM643_vDisParamsSAA7104.hI2C = DM643_I2C_hI2C;
disChan = FVID_create("/VP1DISPLAY", IOM_OUTPUT,
&status, (Ptr)&DM643_vDisParamsChan, NULL);
FVID_control(disChan, VPORT_CMD_EDC_BASE+EDC_CONFIG, (Ptr)&DM643_vDisParamsSAA7104);
FVID_control(disChan, VPORT_CMD_START, NULL);
/* handle video capture, scaling and re-format */
FVID_alloc(disChan, &disFrameBuf);
while(1)
{
SEM_pend(&sem1, SYS_FOREVER);
inBuf[0] = (char *)YArray;
inBuf[1] = (char *)CbArray;
inBuf[2] = (char *)CrArray;
outBuf[0] = disFrameBuf->frame.iFrm.y1;
outBuf[1] = disFrameBuf->frame.iFrm.cb1;
outBuf[2] = disFrameBuf->frame.iFrm.cr1;
for( i = 0; i < 480; i++)
{
id = DAT_copy(inBuf[0] + (i * 720),outBuf[0] + (i * 720), 720);
DAT_wait(id);
}
for( i = 0; i < (480>> 1); i++)
{
id = DAT_copy(inBuf[1] + (i * 360), outBuf[1] + (i * 360), 360);
DAT_wait(id);
}
for( i = 0; i < (480>> 1); i++)
{
id = DAT_copy(inBuf[2] + (i * 360), outBuf[2] + (i * 360), 360);
DAT_wait(id);
}
SEM_post(&sem2);
FVID_exchange(disChan, &disFrameBuf);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -