video.c
上传用户:dahaojd
上传日期:2008-01-29
资源大小:14357k
文件大小:5k
源码类别:

DSP编程

开发平台:

C/C++

  1. /*
  2.  *  Copyright 2003 by Texas Instruments Incorporated.
  3.  *  All rights reserved. Property of Texas Instruments Incorporated.
  4.  *  Restricted rights to use, duplicate or disclose this code are
  5.  *  granted through contract.
  6.  *  
  7.  */
  8. /* "@(#) DDK 1.10.00.23 07-02-03 (ddk-b12)" */
  9. #include <std.h>
  10. #include <tsk.h>  
  11. #include <sem.h>   
  12. #include <gio.h>
  13. #include <csl_dat.h>
  14. #include <csl_cache.h>
  15. #include <fvid.h>
  16. #include <edc.h>
  17. #include <vport.h>
  18. #include <vportcap.h>
  19. #include <vportdis.h>
  20. #include "saa7121.h"
  21. #include <saa7115.h>    
  22. #include <evmdm642.h>
  23. #include "vcapparams.h"
  24. #include "vdisparams.h"   
  25. /* heap IDs defined in the BIOS configuration file */
  26. extern Int EXTERNALHEAP;
  27. #include "ICETEK-DM642-C.h"
  28. /*
  29.  * ======== main ========
  30.  */
  31. main()
  32. {
  33.     ICETEKDM642CInit();
  34.     /******************************************************/
  35.     /* open CSL DAT module for fast copy                  */
  36.     /******************************************************/
  37.     CSL_init();                                             
  38.     CACHE_clean(CACHE_L2ALL, 0, 0);
  39.     CACHE_setL2Mode(CACHE_256KCACHE);       
  40.     CACHE_enableCaching(CACHE_EMIFA_CE00);
  41.     CACHE_enableCaching(CACHE_EMIFA_CE01);
  42.     DAT_open(DAT_CHAANY, DAT_PRI_LOW, DAT_OPEN_2D);
  43. }
  44. /*
  45.  * ======== tskVideoLoopback ========
  46.  * video loopback function.
  47.  */
  48. void tskVideoLoopback()
  49. {
  50.     Int i;
  51.     unsigned int m_nID;
  52.     Int status;
  53.     FVID_Handle disChan; 
  54.     Int frames = 0;
  55.     FVID_Frame *disFrameBuf;
  56.     Int numLinesDis = EVMDM642_vDisParamsChan.imgVSizeFld1;
  57.     Int numLinesCap = EVMDM642_vCapParamsChan.fldYStop1 -
  58.        EVMDM642_vCapParamsChan.fldYStrt1+1;
  59.     
  60.     Int numLines = (numLinesDis > numLinesCap) ? numLinesCap : numLinesDis;
  61.     FVID_Handle capChan; 
  62.     Int numPixels = EVMDM642_vCapParamsChan.fldXStop1 - 
  63.        EVMDM642_vCapParamsChan.fldXStrt1+1;
  64.     FVID_Frame *capFrameBuf;
  65.     Int capLinePitch = EVMDM642_vCapParamsChan.fldXStop1 - 
  66.        EVMDM642_vCapParamsChan.fldXStrt1+1;
  67.     Int disLinePitch = EVMDM642_vDisParamsChan.imgHSizeFld1;
  68.     numLines *= 2; /* both fields */
  69.     /******************************************************/
  70.     /* allocate both capture and display frame buffers    */
  71.     /* in external heap memory                            */
  72.     /******************************************************/
  73.         EVMDM642_vCapParamsChan.segId = EXTERNALHEAP;
  74.         EVMDM642_vDisParamsChan.segId = EXTERNALHEAP;
  75.         EVMDM642_vDisParamsSAA7121.hI2C = EVMDM642_I2C_hI2C;
  76.         EVMDM642_vCapParamsSAA7115.hI2C = EVMDM642_I2C_hI2C;
  77.     /******************************************************/
  78.     /* initialization of capture driver                   */
  79.     /******************************************************/
  80.     capChan = FVID_create("/VP0CAPTURE/A/0", 
  81.             IOM_INPUT, &status, (Ptr)&EVMDM642_vCapParamsChan, NULL);
  82.     /******************************************************/
  83.     /* initialization of display driver                   */
  84.     /******************************************************/
  85.     disChan = FVID_create("/VP2DISPLAY/1", IOM_OUTPUT, 
  86.         &status, (Ptr)&EVMDM642_vDisParamsChan, NULL);
  87.     
  88.     /******************************************************/
  89.     /* configure video encoder & decoder                  */
  90.     /******************************************************/
  91.     FVID_control(disChan, VPORT_CMD_EDC_BASE + EDC_CONFIG, 
  92.         (Ptr)&EVMDM642_vDisParamsSAA7121);
  93.     FVID_control(capChan, VPORT_CMD_EDC_BASE + EDC_CONFIG, 
  94.         (Ptr)&EVMDM642_vCapParamsSAA7115);
  95.     /******************************************************/
  96.     /* start capture & display operation                  */    
  97.     /******************************************************/
  98.     FVID_control(disChan, VPORT_CMD_START, NULL);
  99.     FVID_control(capChan, VPORT_CMD_START, NULL);
  100.     
  101.     /********************************************************/
  102.     /* request a frame buffer from display & capture driver */
  103.     /********************************************************/
  104.     FVID_alloc(disChan, &disFrameBuf);
  105.     FVID_alloc(capChan, &capFrameBuf);
  106.     frames ++;
  107.     while ( 1 )
  108.     {/* loop forever */
  109.         /* copy data from capture buffer to display buffer */
  110.         /***************************************************/
  111.         for ( i=0;i<numLines;i++) 
  112.         {
  113.             m_nID=DAT_copy(capFrameBuf->frame.iFrm.y1+i*capLinePitch,nMemTemp,720);
  114. DAT_wait(m_nID);
  115.             ICETEKDM642CReverse();
  116.             DAT_copy(nMemTemp,disFrameBuf->frame.iFrm.y1+i*disLinePitch,720);
  117.             DAT_copy(nUV,disFrameBuf->frame.iFrm.cb1 + i * (disLinePitch >> 1),360);
  118.             DAT_copy(nUV,disFrameBuf->frame.iFrm.cr1 + i * (disLinePitch >> 1),360);
  119.         }
  120.         DAT_wait(DAT_XFRID_WAITALL);
  121.         FVID_exchange(capChan, &capFrameBuf);
  122.         FVID_exchange(disChan, &disFrameBuf);        
  123.         frames ++;              
  124.    }
  125. }