📄 tskloopback.c
字号:
/*
* Copyright 2004 by SEED Incorporated.
* All rights reserved. Property of SEED Incorporated.
* Restricted rights to use, duplicate or disclose this code are
* granted through contract.
*
*/
/* "@(#) DDK 1.11.00.00 23-12-04 (ddk-b13)" */
#include <vport.h>
#include <vportcap.h>
#include <tvp51xx.h>
#include <csl_edma.h>
#include <fvid.h>
#include <csl_dat.h>
#include <csl_cache.h>
#include <scom.h>
//#include "appData.h"
#include "seeddm642.h"
#include "seedvpm642cfg.h"
#include "seedvpm642_vcapparams.h"
#include "seedvpm642_vdisparams.h"
#include "seedvpm642_loopback.h"
extern int z=0;
extern int EXTERNALHEAP;
FVID_Handle disChan;
FVID_Frame *disFrameBuf;
/*
* ======== VideoLoopbackInit ========
* video loopback function init.
*/
void VideoLoopbackInit()
{
Int status;
EVMDM642_vDisParamsChan.segId = EXTERNALHEAP; //EXTERNALHEAP;
EVMDM642_vDisParamsSAA7105.hI2C = SEEDVPM642_I2C_hI2C;
/******************************************************/
/* initialization of display driver */
/******************************************************/
disChan = FVID_create("/VP0DISPLAY/A/0",
IOM_OUTPUT,
&status,
(Ptr)&EVMDM642_vDisParamsChan,
NULL);
/******************************************************/
/* configure video decoder */
/******************************************************/
FVID_control(disChan,
VPORT_CMD_EDC_BASE + EDC_CONFIG,
(Ptr)&EVMDM642_vDisParamsSAA7105);
/******************************************************/
/* configure video encoder & decoder */
/******************************************************/
/*配置SAA7121*/
FVID_control(disChan,
VPORT_CMD_EDC_BASE + EDC_CONFIG,
(Ptr)&EVMDM642_vDisParamsSAA7105);
}
/*
* ======== tskVideoLoopback start========
* video loopback function start.
*/
void VideoLoopbackStart()
{
/*启动显示*/
FVID_control(disChan, VPORT_CMD_START, NULL);
}
/*
* ======== tskVideoLoopback ========
* video loopback function.
*/
void tskVideoLoopback()
{
Int i;
char *inBuf[3], *outBuf[3];
SCOM_Handle fromPROtoDIS,fromDIStoPRO;
//SCOM_Handle fromInput1toDIS,fromDIStoInput1;
ScomMessage scomMsg;
ScomMessage *pMsgBuf1;
fromPROtoDIS = SCOM_open("PROTODIS");
fromDIStoPRO = SCOM_open("DISTOPRO");
//fromInput1toDIS = SCOM_open("IN1TODIS");
// fromDIStoInput1 = SCOM_open("DISTOIN1");
FVID_control(disChan, VPORT_CMD_START, NULL);
FVID_alloc(disChan, &disFrameBuf);
// Give the process thread a buffer to pass back to us
SCOM_putMsg(fromDIStoPRO, &scomMsg);
/*ptry=_lum;
ptrcb=_colorb;
ptrcr=_colorr;*/
/*打开SCOM模块*/
/*申请一个空间*/
//FVID_alloc(disChan, &disFrameBuf);
while(1)
{
pMsgBuf1 = SCOM_getMsg(fromPROtoDIS, SYS_FOREVER);
//pMsgBuf1 = SCOM_getMsg(fromInput1toDIS, SYS_FOREVER);
//UTL_stsStart( stsDispTime );
inBuf[0] = pMsgBuf1->bufY;
inBuf[1] = pMsgBuf1->bufU;
inBuf[2] = pMsgBuf1->bufV;
outBuf[0] = disFrameBuf->frame.iFrm.y1;
outBuf[1] = disFrameBuf->frame.iFrm.cb1;
outBuf[2] = disFrameBuf->frame.iFrm.cr1;
for(i = 0; i < 575; i ++)
{
DAT_copy(inBuf[0] + i * 720,
outBuf[0] + i * 720,
720);
DAT_copy(inBuf[1] + i * (720 >> 1),
outBuf[1] + i * (720 >> 1),
720>>1);
DAT_copy(inBuf[2] + i * (720 >> 1),
outBuf[2] + i * (720 >> 1),
720>>1);
}
//yuv420to422(inBuf,outBuf,720,576);
//UTL_stsStop( stsDispTime );
DAT_wait(DAT_XFRID_WAITALL);
z=1;
CACHE_clean(CACHE_L2ALL,NULL,NULL);
SCOM_putMsg(fromDIStoPRO, pMsgBuf1);
//SCOM_putMsg(fromDIStoInput1, pMsgBuf1);
FVID_exchange(disChan, &disFrameBuf);
/*-----------------------------------------------------------*/
/* Wait for the message from the process task to recieve new */
/* frame to be displayed. */
/*-----------------------------------------------------------*/
/*disFrameBuf = (FVID_Frame *)*///ptry=SCOM_getMsg(fromPROtoDIS, SYS_FOREVER);
/*处理色差信号*/
/*for(i=0;i<numLines;i++)
{
for(j=0;j<(numPixels>>1);j++)
{
*(capFrameBuf->frame.iFrm.cb1 + i * j+j)=\
*(capFrameBuf->frame.iFrm.cb1 + i * j+j)+\
*(capFrameBuf->frame.iFrm.y1 + i *j*2+j*2);
*(capFrameBuf->frame.iFrm.cr1 + i * j+j)=\
*(capFrameBuf->frame.iFrm.cr1 + i * j+j)+\
*(capFrameBuf->frame.iFrm.y1 + i *j*2+j*2);
}
}*/
/*将数据进行直方图均衡化*/
/*for(i=0;i<numLines;i++)
{
for(j=0;j<numPixels;j++)
{
unsigned char a;
a=(unsigned char)(*(capFrameBuf->frame.iFrm.y1 + i *j+j));
H[a]=H[a]+1;
}
}
Hc[0]=H[0];
for(i=1;i<256;i++)
{
Hc[i]=Hc[i-1]+H[i];
}
for(i=0;i<256;i++)
{
T[i]=(unsigned char)(floor(255/numLines/numPixels*Hc[i]));
}
for(i=0;i<numLines;i++)
{
for(j=0;j<numPixels;j++)
{
unsigned char a;
a=(unsigned char)(*(capFrameBuf->frame.iFrm.y1 + i *j+j));
*(capFrameBuf->frame.iFrm.y1 + i *j+j)=clip(16,235,T[a]);
}
}*/
/*处理色差信号*/
/*for(i=0;i<numLines;i++)
{
for(j=0;j<(numPixels>>1);j++)
{
//r1=b1=g1=*(capFrameBuf->frame.iFrm.y1 + i *j*2+j);
//r2=b2=g2=*(capFrameBuf->frame.iFrm.y1 + i *j*2+j+1);
//RGB2toYUVY(r1,g1,b1,r2,g2,b2,y1,cb1,cr1,y2);
*(capFrameBuf->frame.iFrm.y1 + i *j*2+j*2)=41;//(unsigned char)y1;
*(capFrameBuf->frame.iFrm.y1 + i *j*2+j*2+1)=41;//(unsigned char)y2;
*(capFrameBuf->frame.iFrm.cb1 + i * j+j)=240;//(unsigned char)cb1;//clip(16,240,cb1);
*(capFrameBuf->frame.iFrm.cr1 + i * j+j)=110;//(unsigned char)cr1;//clip(16,240,cr1);
}
}*/
/*for(i=0;i<numLines;i++)
{
for(j=0;j<numPixels;j++)
{
(*(capFrameBuf->frame.iFrm.y1 + i *j+j))=\
(*(capFrameBuf->frame.iFrm.y1 + i *j+j));
}
}*/
/*将数据放入运算缓冲区*/
/*ptry=_lum;
ptrcb=_colorb;
ptrcr=_colorr;*/
/*for(i = 0; i < numLines; i ++)
{
DAT_copy(capFrameBuf->frame.iFrm.y1 + i * capLinePitch,
ptry+i*capLinePitch,
numPixels);
DAT_copy(capFrameBuf->frame.iFrm.cb1 + i * (capLinePitch >> 1),
ptrcb+i*(capLinePitch>>1),
numPixels>>1);
DAT_copy(capFrameBuf->frame.iFrm.cr1 + i * (capLinePitch >> 1),
ptrcr + i * (disLinePitch >> 1),
numPixels>>1);
}*/
/*处理数据*/
/*for(i=0;i<numLines;i++)
{
for(j=0;j<(numPixels>>1);j++)
{
*(ptry + i *j*2+j*2)=41;//(unsigned char)y1;
*(ptry + i *j*2+j*2+1)=41;//(unsigned char)y2;
*(ptrcb + i * j+j)=240;//(unsigned char)cb1;//clip(16,240,cb1);
*(ptrcr + i * j+j)=110;//(unsigned char)cr1;//clip(16,240,cr1);
}
}*/
/*将数据放入相应的显示缓冲区*/
/*for(i = 0; i < numLines; i ++)
{
DAT_copy(capFrameBuf->frame.iFrm.y1 + i * capLinePitch,
disFrameBuf->frame.iFrm.y1 + i * disLinePitch,
numPixels);
DAT_copy(capFrameBuf->frame.iFrm.cb1 + i * (capLinePitch >> 1),
disFrameBuf->frame.iFrm.cb1 + i * (disLinePitch >> 1),
numPixels>>1);
DAT_copy(capFrameBuf->frame.iFrm.cr1 + i * (capLinePitch >> 1),
disFrameBuf->frame.iFrm.cr1 + i * (disLinePitch >> 1),
numPixels>>1);*/
/*DAT_fill(disFrameBuf->frame.iFrm.y1 + i * disLinePitch,
numPixels,(Uint32 *)&a);
DAT_fill(disFrameBuf->frame.iFrm.cb1 + i * (disLinePitch >> 1),
numPixels>>1,(Uint32 *)&b);
DAT_fill(disFrameBuf->frame.iFrm.cr1 + i * (disLinePitch >> 1),
numPixels>>1,(Uint32 *)&r);*/
//}
/*CACHE_clean(CACHE_L2ALL,NULL,NULL);
/*-----------------------------------------------------------*/
/* Display the decoded frame. */
/*-----------------------------------------------------------*/
//FVID_exchange(capChanCh1, &capFrameBuf1);
/*FVID_exchange(disChan, &disFrameBuf);
/*-----------------------------------------------------------*/
/* Send message to process task to continue */
/*-----------------------------------------------------------*/
/*SCOM_putMsg(fromDIStoPRO, NULL);/* loop forever */
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -