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

📄 tskloopback.c

📁 在DM642上实现双通道采集并实现了实时匹配
💻 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 + -