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

📄 tskvideooutput.c

📁 基于ti公司的DM642的视频处理代码
💻 C
字号:
/*
 *  Copyright 2003 by Texas Instruments Incorporated.
 *  All rights reserved. Property of Texas Instruments Incorporated.
 *  Restricted rights to use, duplicate or disclose this code are
 *  granted through contract.
 *  
 */
#include <std.h>
#include <csl.h>
#include <csl_dat.h>
#include <csl_cache.h>
#include <chan.h>
#include <scom.h>
#include <utl.h>
#include <fvid.h>
#include <tsk.h>


#include "seeddm642.h"
#include "seedvpm642_vcapparams.h"
#include "seedvpm642_vdisparams.h"

#include "edc.h"
#include "vport.h"
#include "vportdis.h"                     
#include "saa7121.h"    
#include "appMain.h"
#include "tskVideoOutput.h"


ThrOutput thrOutput;
/* heap IDs defined in the BIOS configuration file */
extern int extHeap;
FVID_Handle  disChan;
FVID_Frame *disFrameBuf;
unsigned int *bufs;


/*-------------------------------------------------------*/
/* Initialize the display channel                        */
/*-------------------------------------------------------*/
void tskVideoOutputInit()
{
    int status;    

    EVMDM642_vDisParamsChan.segId = extHeap; //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);
}

/*-------------------------------------------------------*/
/* Start the display channel                             */
/*-------------------------------------------------------*/
void tskVideoOutputStart() 
{
	FVID_control(disChan, VPORT_CMD_START, NULL);
}

/*-------------------------------------------------------*/
/* handle video display, scaling and re-format           */
/*-------------------------------------------------------*/
void tskVideoOutput()
{
    int             status;
    int i;
    int frameWidth , disLinePitch , id ;	 	
    char *inBuf[3];
    
    SCOM_Handle fromProctoOut,fromOuttoInput;
	ScomBufChannels *pMsgBuf; 
    fromProctoOut = SCOM_open("PROCTOOUT");
	fromOuttoInput = SCOM_open("OUTTOIN");
	FVID_alloc(disChan, &disFrameBuf);

 	while(1) 
 	{
 	       
 		/*-----------------------------------------------------------*/
	    /* Wait for the message from the process task to recieve new */
  		/* frame to be displayed.                                    */
   		/*-----------------------------------------------------------*/
 	   	pMsgBuf = SCOM_getMsg(fromProctoOut, SYS_FOREVER);
       	status = pMsgBuf->status;   
	   	if(status) 
	   	{
	        bufs = pMsgBuf->bufChannel;
	        inBuf[0] = (char *)bufs[0];
	        inBuf[1] = (char *)bufs[1];                  
	        inBuf[2] = (char *)bufs[2];                  
	                           
	 		frameWidth = 720 ;
			disLinePitch = 720 ;	 	
	 	
           	/*-----------------------------------------------------------*/
	       	/* Convert the YUV 4:2:0 format frame to YUV 4:2:2 format frame*/
    	  	/*-----------------------------------------------------------*/
		
	 		for(i=0;i<576;i++)
	 			DAT_copy(inBuf[0]+frameWidth*i,disFrameBuf->frame.iFrm.y1+disLinePitch*i,frameWidth);	

		
			for(i=0;i<287;i++)
			{
				DAT_copy(inBuf[1]+(frameWidth>>1)*i,disFrameBuf->frame.iFrm.cb1+(disLinePitch>>1)*2*i,(frameWidth>>1));
				DAT_copy(inBuf[1]+(frameWidth>>1)*i,disFrameBuf->frame.iFrm.cb1+(disLinePitch>>1)*(2*i+1),(frameWidth>>1));
				DAT_copy(inBuf[2]+(frameWidth>>1)*i,disFrameBuf->frame.iFrm.cr1+(disLinePitch>>1)*2*i,(frameWidth>>1));
				id = DAT_copy(inBuf[2]+(frameWidth>>1)*i,disFrameBuf->frame.iFrm.cr1+(disLinePitch>>1)*(2*i+1),(frameWidth>>1));
		
			}

			DAT_wait(id);
		
           	/*-----------------------------------------------------------*/
	       	/* Display the decoded frame.                                */
    	  	/*-----------------------------------------------------------*/
   		  	FVID_exchange(disChan, &disFrameBuf);

    	}
    	SCOM_putMsg(fromOuttoInput, pMsgBuf);
	}	    

}

⌨️ 快捷键说明

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