📄 tskprocess.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 <GlobalDef.h>
//#include <dwcif.h>
#include <c6x.h>
#include "appData.h"
#include "seeddm642.h"
#include "seedvpm642cfg.h"
#include "seedvpm642_vcapparams.h"
#include "seedvpm642_vdisparams.h"
#include "seedvpm642_tskprocess.h"
#pragma DATA_ALIGN(_srcW1, 8);
#pragma DATA_ALIGN(_srcZ1, 8);
#pragma DATA_ALIGN(_srcW2, 8);
#pragma DATA_ALIGN(_srcZ2, 8);
#pragma DATA_SECTION(_srcW1,".spec_data")
#pragma DATA_SECTION(_srcZ1,".spec_data")
#pragma DATA_SECTION(_srcW2,".spec_data")
#pragma DATA_SECTION(_srcZ2,".spec_data")
unsigned char _srcW1[720 * 576];
unsigned char _srcZ1[720 * 576];
unsigned char _srcW2[720 * 576];
unsigned char _srcZ2[720 * 576];
#pragma DATA_ALIGN(__desty, 8);
#pragma DATA_SECTION(__desty,".spec_data")
unsigned char __desty[720 * 576];
#pragma DATA_ALIGN(__destcb, 8);
#pragma DATA_SECTION(__destcb,".spec_data")
unsigned char __destcb[360 * 576];
#pragma DATA_ALIGN(__destcr, 8);
#pragma DATA_SECTION(__destcr,".spec_data")
unsigned char __destcr[360* 576];
#pragma DATA_ALIGN(Y0IN,8)
#pragma DATA_SECTION(Y0IN,".spec_data")
unsigned char Y0IN[720 * 576];
#pragma DATA_ALIGN(Y1IN,8)
#pragma DATA_SECTION(Y1IN,".spec_data")
unsigned char Y1IN[720 * 576];
#pragma DATA_ALIGN(YOUT,8)
#pragma DATA_SECTION(YOUT,".spec_data")
unsigned char YOUT[720 * 576];
#pragma DATA_ALIGN(CBOUT,8)
#pragma DATA_SECTION(CBOUT,".spec_data")
unsigned char CBOUT[360 * 576];
#pragma DATA_ALIGN(CROUT,8)
#pragma DATA_SECTION(CROUT,".spec_data")
unsigned char CROUT[360 * 576];
#define clip(x,y,z) ((z<x)?x:((z>y)?y:z))
#define RGB2toYUVY(r1,g1,b1,r2,g2,b2,y1,cb1,cr1,y2)\
y1=(unsigned char)clip(16,235,((76*r1+150*g1+29*b1)>>8));\
cb1=(unsigned char)clip(16,240,(((0-44*r1-84*g1+128*b1)>>8)+128));\
cr1=(unsigned char)clip(16,240,(((128*r2-107*g2-20*b2)>>8)+128));\
y2=(unsigned char)clip(16,235,((76*r2+150*g2+29*b2)>>8)); //结束
#define cswap( h3,h2,h1)\
h3=(h1*h2)>>8; //不知道啊对,灰度融合
//FVID_Handle disChan;
//FVID_Frame *disFrameBuf;
/*
* ======== VideoLoopbackInit ========
* video loopback function init.
*/
void VideoProcessInit()
{
/*memset(dec_out_y, 0x0, sizeof(dec_out_y));
memset(dec_out_u, 0x80, sizeof(dec_out_u));
memset(dec_out_v, 0x80, sizeof(dec_out_v)); */
}
/*
* ======== tskVideoLoopback start========
* video loopback function start.
*/
void VideoProcessStart()
{
}
/*
* ======== tskVideoLoopback ========
* video loopback function.
*/
void tskProcess()
{
int i,j; //开始
//int j,k,l,m,n;
//unsigned char a=0;
register unsigned char h10,h11,h12,h13,h14,h15;
register unsigned char h20,h21,h22,h23,h24,h25;
register unsigned char h30,h31,h32,h33,h34,h35;
//unsigned char r1,b1,g1,r2,b2,g2;
//int y1,y2,cb1,cr1;
ScomMessage *pMsgBuf1;
ScomMessage *pMsgBuf2;
SCOM_Handle fromInput1toPRO,fromInput2toPRO,fromPROtoDIS;
//SCOM_Handle fromInput1toPRO,fromPROtoInput1,fromInput2toPRO,fromPROtoInput2,fromPROtoDIS,fromDIStoPRO;
unsigned char *inBuf[2];
unsigned char *outBuf[3];
//unsigned char *ctBuf[2];
//unsigned char *cfBuf[2];
//unsigned char *ctBufL[2];
//unsigned char *cfBufL[2];
//unsigned char *ctBufR;
//unsigned char max=0;
//unsigned char value;
int width=720;
int height=576;
int i1,i3;
int wid;
int hei;
unsigned int *src1;
unsigned int *src2;
//unsigned char *BYTE_src1;
//unsigned char *BYTE_src2;
unsigned char *y,*cb,*cr;
unsigned char *psrc1,*psrc2;
unsigned char *psrc3,*psrc4;
unsigned char *psrc5,*psrc6;
register int index,index2,index1;
int xoff,yoff;
int suo;
int LINE_SZ;
int k=0,m=0;
int flag=0;
int width2=655;
int height2=524;
LINE_SZ=720;
xoff=-62;
yoff=-11;
suo=11;
y=__desty;
cb=__destcb;
cr=__destcr;
//register unsigned char h10,h11,h12,h13,h14,h15;
//register unsigned char h20,h21,h22,h23,h24,h25;
//register unsigned char h30,h31,h32,h33,h34,h35;
//register int index,index2,index1;
//src1=_srcW;//放长波图像的数组 没有定义完整
//src2=_srcZ;//放短波图像的数组
psrc3=_srcW1;
psrc4=_srcZ1;
psrc5=_srcW2;
psrc6=_srcZ2;
//FVID_alloc(capChanCh1, &capFrameBuf1);
//FVID_alloc(capChanCh2, &capFrameBuf2);
//FVID_alloc(disChan, &disFrameBuf);
//SCOM_Handle fromInput1toPRO,fromPROtoInput1,fromInput2toPRO,fromPROtoInput2,fromPROtoDIS,fromDIStoPRO;huifu
// SCOM_Handle fromInput2atoDIS,fromDIStoInput2a;
// SCOM_Handle fromInput2btoDIS,fromDIStoInput2b;
/*打开SCOM模块*/
fromInput1toPRO = SCOM_open("IN1TOPRO");
// fromPROtoInput1 = SCOM_open("PROTOIN1");
fromInput2toPRO = SCOM_open("IN2TOPRO");
// fromPROtoInput2 = SCOM_open("PROTOIN2");
// fromDIStoPRO = SCOM_open("DISTOPRO");
fromPROtoDIS = SCOM_open("PROTODIS");
/*申请一个空间*/
//FVID_alloc(disChan, &disFrameBuf);
/* FVID_alloc(capChanCh1, &capFrameBuf1);
FVID_alloc(capChanCh2, &capFrameBuf2);
FVID_alloc(disChan, &disFrameBuf); */
while(1)
{
/*-----------------------------------------------------------*/
/* Wait for the message from the process task to recieve new */
/* frame to be displayed. */
/*-----------------------------------------------------------*/
pMsgBuf1 = SCOM_getMsg(fromInput1toPRO, SYS_FOREVER);
pMsgBuf2 = SCOM_getMsg(fromInput2toPRO, SYS_FOREVER);
outBuf[0] = (unsigned char *)YOUT;
outBuf[1] = (unsigned char *)CBOUT;
outBuf[2] = (unsigned char *)CROUT;
inBuf[0] = (unsigned char *)Y0IN;
inBuf[1] = (unsigned char *)Y1IN;
inBuf[0]=pMsgBuf1->bufY;
inBuf[1]=pMsgBuf2->bufY;
if(flag)
{
//todo:
psrc1=_srcW1;
psrc2=_srcZ1;
flag=0;
}
else
{
psrc1=_srcW2;
psrc2=_srcZ2;
//todo:
flag=1;
}
for(i=0;i<575;i++)
{
DAT_copy(inBuf[0]+i*720,
psrc1+i*720,720);
DAT_copy(inBuf[1]+i*720,
psrc2+i*720,720);
}
//kaishi
for(i=0;i<576;i++)
{
for(k=0;k<LINE_SZ;k++)
{
*(src2+i*LINE_SZ+k)=((*(psrc4+i*LINE_SZ+k))
+(*(psrc6+i*LINE_SZ+k)))>>1;
if((i%suo)==0)continue;
else
{
if((k%suo)==0)continue;
else
{
*(src1+m)=((*(psrc3+i*LINE_SZ+k))
+(*(psrc5+i*LINE_SZ+k)))>>1;
m=m+1;
}
}
}
}
//jieshu
/* for(i=0;i<575;i++)
{
_nassert( i>=20); //这个啊要定义的哝
for(k=0;k<90;k++)
{
_nassert( k>=20);//防止冗余
*(src2+i*180+k)=_avgu4((unsigned int)(*(psrc4+i*180+k)),(unsigned int)(*(psrc6+i*180+k)));
*(src2+i*180+k+90)=_avgu4((unsigned int)(*(psrc4+i*180+k+90)),(unsigned int)(*(psrc6+i*180+k+90)));
*(src1+i*180+k)=_avgu4((unsigned int)(*(psrc3+i*180+k)),(unsigned int)(*(psrc5+i*180+k)));
*(src1+i*180+k+90)=_avgu4((unsigned int)(*(psrc3+i*180+k+90)),(unsigned int)(*(psrc5+i*180+k+90)));//取四个无符号数进行平均
*(BYTE_src1+i*LINE_SZ+4*k) =BIT8 (*(src1+i*180+k));// 这个宏是否要重新定义 LINE_SZ是否为720?
*(BYTE_src1+i*LINE_SZ+4*k+1)=BIT16(*(src1+i*180+k));
*(BYTE_src1+i*LINE_SZ+4*k+2)=BIT24(*(src1+i*180+k));
*(BYTE_src1+i*LINE_SZ+4*k+3)=BIT32(*(src1+i*180+k));
*(BYTE_src1+i*LINE_SZ+4*k+360)=BIT8 (*(src1+i*180+k+90));
*(BYTE_src1+i*LINE_SZ+4*k+361)=BIT16(*(src1+i*180+k+90));
*(BYTE_src1+i*LINE_SZ+4*k+362)=BIT24(*(src1+i*180+k+90));
*(BYTE_src1+i*LINE_SZ+4*k+363)=BIT32(*(src1+i*180+k+90));
*(BYTE_src2+i*LINE_SZ+4*k) =BIT8 (*(src2+i*180+k));
*(BYTE_src2+i*LINE_SZ+4*k+1)=BIT16(*(src2+i*180+k));
*(BYTE_src2+i*LINE_SZ+4*k+2)=BIT24(*(src2+i*180+k));
*(BYTE_src2+i*LINE_SZ+4*k+3)=BIT32(*(src2+i*180+k));
*(BYTE_src2+i*LINE_SZ+4*k+360)=BIT8 (*(src2+i*180+k+90));
*(BYTE_src2+i*LINE_SZ+4*k+361)=BIT16(*(src2+i*180+k+90));
*(BYTE_src2+i*LINE_SZ+4*k+362)=BIT24(*(src2+i*180+k+90));
*(BYTE_src2+i*LINE_SZ+4*k+363)=BIT32(*(src2+i*180+k+90));//BIT是宏 后面的数表示取无符号整型数的末几位
}
} //去噪 */
/* m=0;
for(i=0;i<575;i++)
{
for(j=0;j<719;j++)
{
if((i%suo)==0)continue;
else
{
if((j%suo)==0)continue;
else
{
*(BYTE_src1+m)=*(BYTE_src1+i*LINE_SZ+j);
m+=1;
}
}
}
} */ //缩放
for(i=0;i<575;i++)
{
i1=(i)*width;
i3=(i+yoff)*width2;
hei=i+yoff;
for(j=0;j<120;j++)
{
wid=6*j+xoff;
index=i1+6*j;
index1=i3+6*j+xoff;
index2=(index)>>1;
if((hei<height)&&(wid<width)&&(hei>=0)&&(wid>=0))
{
if((i>50)&&(i<height2)&&((6*j)<width2))
{
h10=src2[index];
h11=src2[index+1];
h12=src2[index+2];
h13=src2[index+3];
h14=src2[index+4];
h15=src2[index+5];
h20=src1[index1];
h21=src1[index1+1];
h22=src1[index1+2];
h23=src1[index1+3];
h24=src1[index1+4];
h25=src1[index1+5];
cswap(h30,h20,h10)
cswap(h31,h21,h11)
cswap(h32,h22,h12)
cswap(h33,h23,h13)
cswap(h34,h24,h14)
cswap(h35,h25,h15) //调制函数
}
else
{
h10=16;
h11=16;
h12=16;
h13=16;
h14=16;
h15=16;
h20=16;
h21=16;
h22=16;
h23=16;
h24=16;
h25=16;
h30=16;
h31=16;
h32=16;
h33=16;
h34=16;
h35=16;
}
}
else
{
h10=16;
h11=16;
h12=16;
h13=16;
h14=16;
h15=16;
h20=16;
h21=16;
h22=16;
h23=16;
h24=16;
h25=16;
h30=16;
h31=16;
h32=16;
h33=16;
h34=16;
h35=16;
}
RGB2toYUVY(h11,h21,h31,h10,h20,h30,y[index+1],cb[index2],cr[index2],y[index])
//RGBtoY(h10,h20,h30,y[index])
//RGBtoYUV(h11,h21,h31,y[index+1],cb[index2],cr[index2])
RGB2toYUVY(h13,h23,h33,h12,h22,h32,y[index+3],cb[index2+1],cr[index2+1],y[index+2])
//RGBtoY(h12,h22,h32,y[index+2])
//RGBtoYUV(h13,h23,h33,y[index+3],cb[index2+1],cr[index2+1])
RGB2toYUVY(h15,h25,h35,h14,h24,h34,y[index+5],cb[index2+2],cr[index2+2],y[index+4])
//RGBtoY(h14,h24,h34,y[index+4])
//RGBtoYUV(h15,h25,h35,y[index+5],cb[index2+2],cr[index2+2])
}
}
CACHE_clean(CACHE_L2ALL,NULL, NULL);
for(i=0;i<(574);i++)
{
DAT_copy(y+i*720,outBuf[0]+i*720,720);
DAT_copy(cb+i*360,outBuf[1]+i*360,360);
DAT_copy(cr+i*360,outBuf[2]+i*360,360);
}
DAT_wait(DAT_XFRID_WAITALL);
pMsgBuf1->bufY = YOUT;
pMsgBuf1->bufU = CBOUT;
pMsgBuf1->bufV = CROUT;
SCOM_putMsg(fromPROtoDIS,pMsgBuf1);
CACHE_clean(CACHE_L2ALL,NULL, NULL);
//FVID_exchange(capChanCh1, &capFrameBuf1);
//FVID_exchange(capChanCh2, &capFrameBuf2);
//FVID_exchange(disChan, &disFrameBuf);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -