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

📄 ime9650_main.c

📁 这个是基于在CCS开发环境下
💻 C
字号:
/*
 *  Copyright 2004 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.
 *  
 */
/* "@(#) DDK 1.10.00.23 07-02-03 (ddk-b12)" */
#include <std.h>
#include <tsk.h>  
#include <sem.h>   
#include <gio.h>

#include <csl_dat.h>
#include <csl_cache.h>
#include <csl_edma.h>
#include <csl_timer.h>

#include <fvid.h>
#include <edc.h>
#include <vport.h>
#include <vportcap.h>
#include <vportdis.h>
#include <saa7115.h>    
#include "saa7121.h"

#include <evmdm642.h>

#include "vcapparams.h"
#include "vdisparams.h"

#include "IME9650_utils.h"
#include "IME9650_init.h"

#define ONE_SECOND 0x23C3460

#include <stdio.h>

/* heap IDs defined in the BIOS configuration file */
extern Int EXTERNALHEAP;
IME9650_Params params;


// 1. CIF(352x288)
// 2. VGA(640x480)
#define CAPTUREFRAMEFORMAT 2

int frames = 0;
unsigned int bDSPWB=0;
main()
{
    CSL_init();                                             
    CACHE_clean(CACHE_L2ALL, 0, 0);
    CACHE_setL2Mode(CACHE_128KCACHE);       
    CACHE_enableCaching(CACHE_EMIFA_CE00);
    CACHE_enableCaching(CACHE_EMIFA_CE01);
    DAT_open(DAT_CHAANY, DAT_PRI_LOW, DAT_OPEN_2D);
}

/*
 * ======== tskVideoLoopback ========
 * video loopback function.
 */
void tskVideoLoopback()
{
    Int status;
    int nImageHeight,nImageWidth,x0,y0;
     int flag;
     FILE* fin1; 
     FILE* fin2;
	// display channel
    FVID_Handle disChan; 
    FVID_Frame *disFrameBuf;
            
	// capture channel
    FVID_Handle capChan; 
    FVID_Frame *capFrameBuf;
   	Uint8 *ptrBayerSrc; 
    
#if ( CAPTUREFRAMEFORMAT==1 )
    nImageWidth=352;
    nImageHeight=288;
    x0=184; y0=144;
#else if ( CAPTUREFRAMEFORMAT==2 )
    nImageWidth=640;
    nImageHeight=480;
    x0=40; y0=48;
#endif	
	IME9650_configCapParams(&EVMDM642_vCapParamsChan, &params, CAPTUREFRAMEFORMAT,nImageWidth, nImageHeight, 21, 3, 1561);
	/******************************************************
	 Set the Threshold
	******************************************************/
   	EVMDM642_vCapParamsChan.thrld = EVMDM642_vCapParamsChan.thrld >> 3;
        
    /******************************************************/
    /* allocate both capture and display frame buffers    */
    /* in external heap memory                            */
    /******************************************************/
    EVMDM642_vCapParamsChan.segId = EXTERNALHEAP;
    EVMDM642_vDisParamsChan.segId = EXTERNALHEAP;

	// Set to handle of I2C        
    EVMDM642_vDisParamsSAA7121.hI2C = EVMDM642_I2C_hI2C;
	
    /******************************************************/
    /* initialization of capture driver 1 Channel A		  */
    /* and capture driver 1 Channel A					  */
    /* FVID object must match BIOS Driver Name		      */
    /******************************************************/
    capChan = FVID_create("/VP1CAPTURE/A/0", IOM_INPUT, &status, (Ptr)&EVMDM642_vCapParamsChan, NULL);

	 /******************************************************/
    /* initialization of display driver                   */
    /******************************************************/
    disChan = FVID_create("/VP2DISPLAY/0", IOM_OUTPUT, &status, (Ptr)&EVMDM642_vDisParamsChan, NULL);
    
    /******************************************************/
    /* configure video encoder & IME9650                  */
    /******************************************************/
    FVID_control(capChan, VPORT_CMD_EDC_BASE + EDC_CONFIG, (Ptr)&params);
   	FVID_control(disChan, VPORT_CMD_EDC_BASE + EDC_CONFIG, (void *)&EVMDM642_vDisParamsSAA7121);

    /******************************************************/
    /* start capture & display operation                  */    
    /******************************************************/
    FVID_control(disChan, VPORT_CMD_START, NULL);
    FVID_control(capChan, VPORT_CMD_START, NULL);
    
    /********************************************************/
    /* request a frame buffer from display & capture driver */
    /********************************************************/
    FVID_alloc(disChan, &disFrameBuf);
    FVID_alloc(capChan, &capFrameBuf);
     flag = 0;
    while ( 1 )
    {
		// 取得行输入图象数据640x480或352x288,数据排列: CbYCrYCbY...共640x2x480或352x2x288个字节
		ptrBayerSrc = (Uint8 *)capFrameBuf->frame.rpFrm.buf;
		// 将采集的图象数据转换成分别存放的YCbCr图象以供显示程序使用
	    BT656ToPAL(ptrBayerSrc,(Uint8 *)(disFrameBuf->frame.iFrm.y1),(Uint8 *)(disFrameBuf->frame.iFrm.cb1),(Uint8 *)(disFrameBuf->frame.iFrm.cr1),nImageWidth,nImageHeight,x0,y0);
	    // 如果设置bDSPWB为非0值,DSP运行自动白平衡算法,并更改摄像头的设置
	    if ( bDSPWB )	
	    DSPWhiteBlance((Uint8 *)(disFrameBuf->frame.iFrm.y1),(Uint8 *)(disFrameBuf->frame.iFrm.cb1),(Uint8 *)(disFrameBuf->frame.iFrm.cr1),x0,y0);

        //Sobel边缘检测函数的调用
	    Sobel((Uint8 *)(disFrameBuf->frame.iFrm.y1)); 
	   	   
	    /*  if(flag==50)
		{
		   fin2=fopen("c:\\input.raw","wb");
		   fwrite(disFrameBuf->frame.iFrm.y1,720*576,1,fin2);
		   fclose(fin2);
		}  	*/

		FVID_exchange(disChan, &disFrameBuf);
        CACHE_clean(CACHE_L2ALL, 0, 0);
		FVID_exchange(capChan, &capFrameBuf);
        frames ++;              
   }
   
}

void prdFrameCount()
{
	frames = 0;	
} 







⌨️ 快捷键说明

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