⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jianyihuidutiaozhi.c

📁 简易灰度调制
💻 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 + -