📄 jianyihuidutiaozhi.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 "appData.h"
#include "seeddm642.h"
#include "seedvpm642cfg.h"
#include "seedvpm642_vcapparams.h"
#include "seedvpm642_vdisparams.h"
#include "seedvpm642_loopback.h"
uchar Dothist_LLW[256][256];
uchar Dothist_LLS[256][256];
int LLW_Pln_SD[574][720], LLS_Pln_SD[574][720];
int LLW_SD_M[256],LLS_SD_M[256];
int LLW_SD_F[256], LLS_SD_F[256];
uchar LLW_MIN[574][720], LLW_MAX[574][720], LLS_MAX[574][720], LLS_MIN[574][720];
float LLW_SD_G[256], LLS_SD_G[256];
float LLW_SD_P[256], LLS_SD_P[256];
float LLW_SD[256], LLS_SD[256];
float LLW_SUM[574][720], LLS_SUM[574][720];
extern int EXTERNALHEAP;
FVID_Handle disChan;
FVID_Handle capChanCh1;
FVID_Handle capChanCh2a;
Bool Ch1run =TRUE;
Bool Ch2arun =TRUE;
Bool Ch2brun =TRUE;
/*
* ======== 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()
{
FVID_Frame *capFrameBuf1;
FVID_Frame *capFrameBuf2;
FVID_Frame *disFrameBuf;
int i;
/**************************************************************/
//int numLines=NUM_LINES*2;
int width=720;
int height=574;
int j;
int i1,i3;
// int pp=0;
int wid;
int hei;
int len,len2,len3;
// Int16 xxx=0;
// Int16 yyy=0;
uchar *src1;
// uchar *src2;
uchar *src2;
uchar *y,*cb,*cr;
uchar *psrc1,*psrc2;
uchar *psrc3,*psrc4;
uchar *psrc5,*psrc6;
int xoff,yoff;
int suo;
int width2=654;
int height2=521;
// int residureh,residurev;
// Int16 keyword;
// Int16 buffer;
//Uint8 buffer;
int k,m;
//Int16 status;
register uchar h10,h11,h12,h13,h14,h15;
register uchar h20,h21,h22,h23,h24,h25;
register uchar h30,h31,h32,h33,h34,h35;
register int index,index2,index1;
src1=_srcW;
src2=_srcZ;
xoff=-62;
yoff=-11;
suo=11;
y=__desty;
cb=__destcb;
cr=__destcr;
psrc3=_srcW1;
psrc4=_srcZ1;
psrc5=_srcW2;
psrc6=_srcZ2;
/*申请一个空间*/
FVID_alloc(capChanCh1, &capFrameBuf1);
FVID_alloc(capChanCh2a, &capFrameBuf2);
FVID_alloc(disChan, &disFrameBuf);
while(1)
{
if(flag)
{
//todo:
psrc1=_srcW1;
psrc2=_srcZ1;
flag=0;
}
else
{
psrc1=_srcW2;
psrc2=_srcZ2;
//todo:
flag=1;
}
for(i=0;i<574;i++)
{
DAT_copy(capFrameBuf1->frame.iFrm.y1+i*LINE_SZ,
psrc1+i*LINE_SZ,LINE_SZ);
DAT_copy(capFrameBuf2->frame.iFrm.y1+i*LINE_SZ,
psrc2+i*LINE_SZ,LINE_SZ);
}
//CACHE_clean(CACHE_L2ALL,NULL, NULL);
m=0;
for(i=0;i<574;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;
}
}
}
} //去噪
for(i=0;i<574;i++)
{
for(k=0;k<360;k++)
{
*(src1+i*LINE_SZ+4*k+2)= *(src1+i*LINE_SZ+4*k+1);
*(src1+i*LINE_SZ+4*k+3)= (*(src2+i*LINE_SZ+4*k+3))
+(*(src1+i*LINE_SZ+4*k+1))
-(*(src2+i*LINE_SZ+4*k+2));
/* *(src1+i*LINE_SZ+4*k+5)= (*(src2+i*LINE_SZ+4*k+5))
+(*(src1+i*LINE_SZ+4*k+2))
-(*(src2+i*LINE_SZ+4*k+3)); */
*(src2+i*LINE_SZ+4*k) = (*(src1+i*LINE_SZ+4*k))
-(*(src1+i*LINE_SZ+4*k+1))
+(*(src2+i*LINE_SZ+4*k+2));
/**(src2+i*LINE_SZ+4*k+1)= (*(src1+i*LINE_SZ+4*k+1))
-(*(src1+i*LINE_SZ+4*k+2))
+(*(src2+i*LINE_SZ+4*k+3));*/
*(src2+i*LINE_SZ+4*k+1)= *(src2+i*LINE_SZ+4*k+2);
}
} //补偿+-????
/*(src1+i*LINE_SZ+4*k+4)= *(src1+i*LINE_SZ+4*k+4);
*(src1+i*LINE_SZ+4*k+5)= (*(src2+i*LINE_SZ+4*k+5))
+(*(src1+i*LINE_SZ+4*k+4))
-(*(src2+i*LINE_SZ+4*k+5));
*(src1+i*LINE_SZ+4*k+5)= (*(src2+i*LINE_SZ+4*k+5))
+(*(src1+i*LINE_SZ+4*k+4))
-(*(src2+i*LINE_SZ+4*k+5));
*(src1+i*LINE_SZ+4*k+6)= (*(src2+i*LINE_SZ+4*k+6))
+(*(src1+i*LINE_SZ+4*k+4))
-(*(src2+i*LINE_SZ+4*k+5));
*(src1+i*LINE_SZ+4*k+7)= (*(src2+i*LINE_SZ+4*k+7))
+(*(src1+i*LINE_SZ+4*k+4))
-(*(src2+i*LINE_SZ+4*k+5));
*(src2+i*LINE_SZ+4*k) = (*(src1+i*LINE_SZ+4*k))
-(*(src1+i*LINE_SZ+4*k+4))
+(*(src2+i*LINE_SZ+4*k+5));
*(src2+i*LINE_SZ+4*k+1)= (*(src1+i*LINE_SZ+4*k+1))
-(*(src1+i*LINE_SZ+4*k+4))
+(*(src2+i*LINE_SZ+4*k+5));
*(src2+i*LINE_SZ+4*k+2)= (*(src1+i*LINE_SZ+4*k+2))
-(*(src1+i*LINE_SZ+4*k+4))
+(*(src2+i*LINE_SZ+4*k+5));
*(src2+i*LINE_SZ+4*k+3)= (*(src1+i*LINE_SZ+4*k+3))
-(*(src1+i*LINE_SZ+4*k+4))
+(*(src2+i*LINE_SZ+4*k+5));
*(src2+i*LINE_SZ+4*k+4)= *(src2+i*LINE_SZ+4*k+4);*/
/*for(i=0;i<574;i++)
{
for(k=0;k<360;k++)
{
*(src1+i*LINE_SZ+10*k+5)= *(src1+i*LINE_SZ+10*k+4);
*(src1+i*LINE_SZ+10*k+6)= (*(src2+i*LINE_SZ+10*k+6))
+(*(src1+i*LINE_SZ+10*k+4))
-(*(src2+i*LINE_SZ+10*k+5));
*(src1+i*LINE_SZ+10*k+7)= (*(src2+i*LINE_SZ+10*k+7))
+(*(src1+i*LINE_SZ+10*k+4))
-(*(src2+i*LINE_SZ+10*k+5));
*(src1+i*LINE_SZ+10*k+8)= (*(src2+i*LINE_SZ+10*k+8))
+(*(src1+i*LINE_SZ+10*k+4))
-(*(src2+i*LINE_SZ+10*k+5));
*(src1+i*LINE_SZ+10*k+9)= (*(src2+i*LINE_SZ+10*k+9))
+(*(src1+i*LINE_SZ+10*k+4))
-(*(src2+i*LINE_SZ+10*k+5));
*(src2+i*LINE_SZ+10*k) = (*(src1+i*LINE_SZ+10*k))
-(*(src1+i*LINE_SZ+10*k+4))
+(*(src2+i*LINE_SZ+10*k+5));
*(src2+i*LINE_SZ+10*k+1)= (*(src1+i*LINE_SZ+10*k+1))
-(*(src1+i*LINE_SZ+10*k+4))
+(*(src2+i*LINE_SZ+10*k+5));
*(src2+i*LINE_SZ+10*k+2)= (*(src1+i*LINE_SZ+10*k+2))
-(*(src1+i*LINE_SZ+10*k+4))
+(*(src2+i*LINE_SZ+10*k+5));
*(src2+i*LINE_SZ+10*k+3)= (*(src1+i*LINE_SZ+10*k+3))
-(*(src1+i*LINE_SZ+10*k+4))
+(*(src2+i*LINE_SZ+10*k+5));
*(src2+i*LINE_SZ+10*k+4)= *(src2+i*LINE_SZ+10*k+5);
}
} */ //补偿+-????
/*********************************************************************/
CACHE_clean(CACHE_L2ALL,NULL, NULL);
for(i=0;i<574;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;
}
/*if ((j%2)==0)
{
}
else if ((j%2)!=0)
{
}*/
RGBtoY(h10,h20,h30,y[index])
RGBtoYUV(h11,h21,h31,y[index+1],cb[index2],cr[index2])
RGBtoY(h12,h22,h32,y[index+2])
RGBtoYUV(h13,h23,h33,y[index+3],cb[index2+1],cr[index2+1])
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++)
{
len=i*(LINE_SZ>>1);
len2=i*LINE_SZ;
len3=((LINE_SZ)>>1);
DAT_copy(y+len2,disFrameBuf->frame.iFrm.y1+len2,LINE_SZ);
DAT_copy(cb+len,disFrameBuf->frame.iFrm.cb1+len,len3);
DAT_copy(cr+len,disFrameBuf->frame.iFrm.cr1+len,len3);
}
DAT_wait(DAT_XFRID_WAITALL);
CACHE_clean(CACHE_L2ALL,NULL, NULL);
FVID_exchange(capChanCh1, &capFrameBuf1);
FVID_exchange(capChanCh2a, &capFrameBuf2);
FVID_exchange(disChan, &disFrameBuf);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -