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

📄 tskvideoloopback.c

📁 在海尔的DM642开发板实现RF5框架
💻 C
字号:
#include <std.h>
#include <log.h>
#include <sys.h>
#include <mem.h>
#include <sio.h>
#include <tsk.h>


#include <csl.h>
#include <csl_dat.h>
#include <csl_cache.h>
#include <csl_i2c.h>
#include <csl_emifa.h>
#include <csl_gpio.h>


#include <fvid.h>
#include <edc.h>
#include <vport.h>
#include <vportcap.h>
#include <vportdis.h>
#include <tvp5150.h>
#include <tvp6000.h>    
#include <scom.h>
#include "evmdm642.h"
#include "evmdm642_vcapparams.h"
#include "evmdm642_vdisparams.h" 
#include "avdm642cfg.h"

FVID_Handle cap_Chan; 


extern int extHeap;


/*
 * ======== tskVideo_LOOPBACK ========
 * video _LOOPBACK function.
 */
   
void tskVideoLoopback()
{
    int i;
    Int status;
    SCOM_Handle fromInput1toDIS,fromDIStoInput1;
    SCOM_Handle fromInput2toDIS,fromDIStoInput2;
    
    FVID_Frame *cap_FrameBuf;
    FVID_Handle dis_Chan; 
    FVID_Frame *dis_FrameBuf;
    
    Int numLinesDis = EVMDM642_vDisParamsChan.imgVSizeFld1; //287
    Int numLinesCap = EVMDM642_vCapParamsChan.fldYStop1 -  	//288-1
       EVMDM642_vCapParamsChan.fldYStrt1 + 1;				

    Int numLines = (numLinesDis > numLinesCap) ? numLinesCap : numLinesDis;
	
    Int numPixels = (EVMDM642_vCapParamsChan.fldXStop1 -   	//每行宽度,即每行像素个数
       EVMDM642_vCapParamsChan.fldXStrt1+1)/2;

    Int capLinePitch =(EVMDM642_vCapParamsChan.fldXStop1 -   	//采集的缓冲区
       EVMDM642_vCapParamsChan.fldXStrt1+1)/2;
    Int disLinePitch = EVMDM642_vDisParamsChan.imgHSizeFld1;
	
    //numLines *= 2; /* both fields 表示两场加起来的行数。若只采一场则无需*/
    /******************************************************/
    /* allocate both capture and display frame buffers    */
    /* in external heap memory                            */
    /******************************************************/
	
	EVMDM642_vDisParamsChan.segId 	= extHeap;
	EVMDM642_vDisParamsTVP6000.hI2C = EVMDM642_I2C_hI2C;
	

    
    /******************************************************/
    /* initialization of display driver                   */
    /******************************************************/
    dis_Chan = FVID_create("/VP2DISPLAY", 
    			IOM_OUTPUT, &status, (Ptr)&EVMDM642_vDisParamsChan, NULL);

    /******************************************************/
    /* configure video encoder & decoder                  */
    /******************************************************/
//FVID_control(cap1_Chan, VPORT_CMD_CONFIG_PORT, NULL);
	
    FVID_control(dis_Chan, VPORT_CMD_EDC_BASE + EDC_CONFIG, 
        	(Ptr)&EVMDM642_vDisParamsTVP6000);
    
    /******************************************************/
    /* start capture & display operation                  */    
    /******************************************************/
    FVID_control(dis_Chan, VPORT_CMD_START, NULL);
    
   
    fromInput1toDIS = SCOM_open("IN1TODIS");
	fromDIStoInput1 = SCOM_open("DISTOIN1");
	
	fromInput2toDIS = SCOM_open("IN2TODIS");
	fromDIStoInput2 = SCOM_open("DISTOIN2");
	
	
    FVID_alloc(dis_Chan, &dis_FrameBuf);
   // EVMDM642_wait(6553600000);
    
	
	while(1)
	{ 
	
        cap_FrameBuf = (FVID_Frame *)SCOM_getMsg(fromInput1toDIS, SYS_FOREVER);
        
        
	    for(i = 0; i < (numLines); i ++) 
	    {      
	        DAT_copy(cap_FrameBuf->frame.iFrm.y1 + i * capLinePitch,
	                 dis_FrameBuf->frame.iFrm.y1 + i * disLinePitch,
	                 numPixels);
	        DAT_copy(cap_FrameBuf->frame.iFrm.cb1 + i * (capLinePitch >> 1), 
	                 dis_FrameBuf->frame.iFrm.cb1 + i * (disLinePitch >> 1),
	                 numPixels>>1);
	
	        DAT_copy(cap_FrameBuf->frame.iFrm.cr1 + i * (capLinePitch >> 1), 
	                 dis_FrameBuf->frame.iFrm.cr1 + i * (disLinePitch >> 1),
	                 numPixels>>1);
	    }
	    
	    cap_FrameBuf = (FVID_Frame *)SCOM_getMsg(fromInput2toDIS, SYS_FOREVER);
        
        
	    for(i = 0; i < (numLines); i ++) 
	    {      
	        DAT_copy(cap_FrameBuf->frame.iFrm.y1 + i * capLinePitch,
	                 dis_FrameBuf->frame.iFrm.y1 + i * disLinePitch+352,
	                 numPixels);
	        DAT_copy(cap_FrameBuf->frame.iFrm.cb1 + i * (capLinePitch >> 1), 
	                 dis_FrameBuf->frame.iFrm.cb1 + i * (disLinePitch >> 1)+180,
	                 numPixels>>1);
	
	        DAT_copy(cap_FrameBuf->frame.iFrm.cr1 + i * (capLinePitch >> 1), 
	                 dis_FrameBuf->frame.iFrm.cr1 + i * (disLinePitch >> 1)+180,
	                 numPixels>>1);
	    }
	   	
	   	DAT_wait(DAT_XFRID_WAITALL);
	    CACHE_clean(CACHE_L2ALL,NULL,NULL);
	    
	    FVID_exchange(dis_Chan, &dis_FrameBuf);        
		
		
        SCOM_putMsg(fromDIStoInput1, NULL);
        
        SCOM_putMsg(fromDIStoInput2, NULL);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -