分享到
  • 一键分享
  • QQ空间
  • 新浪微博
  • 百度云收藏
  • 人人网
  • 腾讯微博
  • 百度相册
  • 开心网
  • 腾讯朋友
  • 百度贴吧
  • 豆瓣网
  • 搜狐微博
  • 百度新首页
  • QQ好友
  • 和讯微博
  • 更多...

百度分享

当前位置: 主页>嵌入式开发>固件驱动开发>

DM642,DM643视频采集基本架构--程序注释

落鹤生 发布于 2010-01-15 21:40 点击: 995次 

来自:hi.baidu.com

本文以实际代码的方式介绍TI德州仪器的DM642,DM643视频采集基本架构。
分享到
  • 一键分享
  • QQ空间
  • 新浪微博
  • 百度云收藏
  • 人人网
  • 腾讯微博
  • 百度相册
  • 开心网
  • 腾讯朋友
  • 百度贴吧
  • 豆瓣网
  • 搜狐微博
  • 百度新首页
  • QQ好友
  • 和讯微博
  • 更多...

百度分享

DM642,DM643视频采集基本架构--程序注释

  1. /* Copyright 2004 by Texas Instruments Incorporated.
  2. * All rights reserved. Property of Texas Instruments Incorporated.
  3. * Restricted rights to use, duplicate or disclose this code are
  4. * granted through contract.
  5. */
  6. #include <std.h>       //如果使用C语言,必须将此文件作为第一个头文件。
  7. #include <tsk.h>
  8. #include <sem.h>
  9. #include <gio.h>
  10. #include <csl_dat.h>
  11. #include <csl_cache.h> //使用CSL库,要用到的一些头文件,可参考CSL
  12. #include <fvid.h>      //视频驱动头文件
  13. #include <edc.h>
  14. #include <vport.h>
  15. #include <vportcap.h>
  16. #include <vportdis.h>
  17. #include <saa7105.h>
  18. #include <tvp51xx.h>
  19. #include <dec643.h>    //芯片头文件。
  20. //#include <evmdm642.h>
  21. #include <evmdm642_capParamsSDTVDefault.h>   //捕获设备配置文件
  22. #include <evmdm642_disParamsVGADefault.h>   //如用VGA显示,需要的显示设备配置文件
  23. #include "colorbar.h"                       //如显示彩色滚动条,需要,否则不需要。
  24. VPORT_PortParams EVMDM642_vCapParamsPort
  25. = EVMDM642_CAP_PARAMS_PORT_EMBEDDED_DEFAULT;   //定义捕获端口。
  26. /* caputure configuration parameters */
  27. /* embedded sync mode is recommended as it offers better re-sync capability */
  28. /* The available capture modes are */
  29. /* NTSC720                         */
  30. /* PAL720                          */
  31. static VPORTCAP_Params EVMDM642_vCapParamsChan
  32. = EVMDM642_CAP_PARAMS_CHAN_EMBEDDED_DEFAULT(PAL720);
  33. //捕获(即采集端口)端口,为PAL制式。可依据需要改为NTSC制式
  34. static TVP51XX_ConfParams EVMDM642_vCapParamsTVP51XX
  35. = EVMDM642_CAP_PARAMS_TVP51XX_EMBEDDED_DEFAULT(PAL601, COMPOSITE, 0);
  36. /* coefficients for color space conversion */
  37. static const short coeffs[5] = {0x2543, 0x3313, -0x0C8A, -0x1A04, 0x408D};
  38. //VGA显示,需将YCbCr656转换为RGB565,这是必要的转换矩阵
  39. /* display configuration parameters */
  40. VPORT_PortParams EVMDM642_vDisParamsPort   //显示端口定义
  41. = EVMDM642_DIS_PARAMS_PORT_DEFAULT;
  42. /* The available display modes are: **
  43. ** VGA(640x480@60fps)               **
  44. ** SVGA(800x600@60fps)              **
  45. ** XGA(1024x768@60fps)              */
  46. static VPORTDIS_Params EVMDM642_vDisParamsChan
  47. = EVMDM642_DIS_PARAMS_CHAN_RGB565_DEFAULT(VGA);
  48. //这里的显示端口定义为VGA,即支持的是VGA输出。
  49. static SAA7105_ConfParams EVMDM642_vDisParamsSAA7105
  50. = EVMDM642_DIS_PARAMS_SAA7105_RGB565_DEFAULT(VGA);
  51. /* heap IDs defined in the BIOS configuration file */
  52. extern Int EXTERNALHEAP; //在DSP/BIOS中已定义
  53. /*
  54. * ======== main ========
  55. */
  56. main()
  57. {
  58. /******************************************************/
  59. /* open CSL DAT module for fast copy                  */
  60. /******************************************************/
  61. CSL_init();                               //调用任何CSL库中的函数,必须先在此调用该函数。
  62. CACHE_clean(CACHE_L2ALL, 0, 0);           //清洗Cache
  63. CACHE_setL2Mode(CACHE_256KCACHE);         //设置Cache模式
  64. CACHE_enableCaching(CACHE_EMIFA_CE00);    //使能EMIFA CE0空间
  65. CACHE_enableCaching(CACHE_EMIFA_CE01);    //使能EMIFA CE1空间
  66. DAT_open(DAT_CHAANY, DAT_PRI_LOW, DAT_OPEN_2D);
  67. }
  68. /*
  69. * ======== tskVideoLoopback ========
  70. * video loopback function.
  71. */
  72. void tskVideoLoopback()
  73. {
  74. Int i;
  75. Int status;
  76. Int frames = 0;
  77. FVID_Handle disChan;
  78. FVID_Frame *disFrameBuf;
  79. FVID_Handle capChan;
  80. FVID_Frame *capFrameBuf;
  81. /*设置显示的行数 VGA制式为480,PAL制为576*/
  82. Int numLinesDis = EVMDM642_vDisParamsChan.imgVSizeFld1;
  83. /*设置采集的行数 PAL制为576*/
  84. Int numLinesCap = (EVMDM642_vCapParamsChan.fldYStop1 -
  85. EVMDM642_vCapParamsChan.fldYStrt1+1)*2;
  86. /*判断是显示区域大,还是采集区域大,取其小者480*/
  87. Int numLines = (numLinesDis > numLinesCap) ? numLinesCap : numLinesDis;
  88. /*设置采集像素数 PAL制为720*/
  89. Int numPixels = (EVMDM642_vCapParamsChan.fldXStop1 -
  90. EVMDM642_vCapParamsChan.fldXStrt1+1);
  91. /*设置采集行的增量 PAL制为720*/
  92. Int capLinePitch = (EVMDM642_vCapParamsChan.fldXStop1 -
  93. EVMDM642_vCapParamsChan.fldXStrt1+1);
  94. /*设置显示行的增量 VGA制为640*/
  95. Int disLinePitch = EVMDM642_vDisParamsChan.imgHSizeFld1;
  96. // numLines *= 2; /* both fields */    //如果输出为PAL制,前面numLinesCap不要*2,这里再*2
  97. /******************************************************/
  98. /* allocate both capture and display frame buffers    */
  99. /* in external heap memory                            */
  100. /******************************************************/
  101. EVMDM642_vDisParamsChan.segId = EXTERNALHEAP;
  102. EVMDM642_vDisParamsSAA7105.hI2C = DEC643_I2C_hI2C;
  103. EVMDM642_vCapParamsChan.segId = EXTERNALHEAP;
  104. EVMDM642_vCapParamsTVP51XX.hI2C = DEC643_I2C_hI2C;
  105. /******************************************************/
  106. /* initialization of capture driver                   */
  107. /******************************************************/
  108. capChan = FVID_create("/VP1CAPTURE/A/1",
  109. IOM_INPUT, &status, (Ptr)&EVMDM642_vCapParamsChan, NULL);
  110. /******************************************************/
  111. /* initialization of display driver                   */
  112. /******************************************************/
  113. disChan = FVID_create("/VP2DISPLAY", IOM_OUTPUT,
  114. &status, (Ptr)&EVMDM642_vDisParamsChan, NULL);
  115. /******************************************************/
  116. /* configure video encoder & decoder                  */
  117. /******************************************************/
  118. FVID_control(disChan, VPORT_CMD_EDC_BASE + EDC_CONFIG,
  119. (Ptr)&EVMDM642_vDisParamsSAA7105);
  120. FVID_control(capChan, VPORT_CMD_EDC_BASE + EDC_CONFIG,
  121. (Ptr)&EVMDM642_vCapParamsTVP51XX);
  122. CACHE_clean(CACHE_L2ALL, 0, 0);        //CSL函数,冲洗Cache
  123. /******************************************************/
  124. /* start capture & display operation                  */
  125. /******************************************************/
  126. FVID_control(disChan, VPORT_CMD_START, NULL);
  127. FVID_control(capChan, VPORT_CMD_START, NULL);
  128. /********************************************************/
  129. /* request a frame buffer from display & capture driver */
  130. /********************************************************/
  131. FVID_alloc(disChan, &disFrameBuf);
  132. FVID_alloc(capChan, &capFrameBuf);
  133. frames ++;
  134. while(1)
  135. {/* loop forever */
  136. /***************************************************/
  137. /* copy data from capture buffer to display buffer */
  138. /***************************************************/
  139. for(i = 0; i < numLines; i++)
  140. {
  141. yc2rgb16(coeffs, capFrameBuf->frame.iFrm.y1 + i * (capLinePitch),
  142. capFrameBuf->frame.iFrm.cb1 + (capLinePitch >> 1) * i,
  143. capFrameBuf->frame.iFrm.cr1 + (capLinePitch >> 1) * i,
  144. disFrameBuf->frame.rpFrm.buf + (disLinePitch << 1) * i,
  145. numPixels);
  146. }//调用函数yc2rgb16,将YCbCr656转化为RGB565,这个函数为TI的汇编代码编写。
  147. FVID_exchange(capChan, &capFrameBuf);    //采集一帧视频
  148. /*FillFrmBufRGB(&disFrameBuf->frame.rpFrm,
  149. EVMDM642_vDisParamsChan.imgHSizeFld1,
  150. EVMDM642_vDisParamsChan.imgVSizeFld1,
  151. frames %(EVMDM642_vDisParamsChan.imgHSizeFld1 >> 3));*/
  152. //上面这段代码,是VGA显示时,显示七色滚动条的。如果想显示采集的图像,不需这个。
  153. CACHE_clean(CACHE_L2ALL, 0, 0);
  154. FVID_exchange(disChan, &disFrameBuf);    //显示一帧视频。
  155. frames ++;
  156. }
  157. }

-

-

-

转载于:https://www.cnblogs.com/itxiaocaiyidie/p/3219286.html

DM642 视频采集基本架构相关推荐

  1. v4l2视频采集驱动框架(vfe, camera i2c driver,v4l2_subdev等之间的联系)

    2014年的博文就从这篇文章开始吧,又一次回到linux,过去的一年从dm3730再到dm6437,这次来到了全志的A31 4核处理器,每一次都是全新的事物,但是偶然间还是可以感受到对新事物的消化能力 ...

  2. 基于DM642 RAW采集格式的视频驱动开发及应用

    摘 要:为解决C64X系列数字信号处理器(DSP)视频驱动不能应用于原始数据格式(RAW)采集格式的问题,设计了DM642和电耦合元件(CCD)高清传感器的数据传输接口,并分析.修改用于标准格式的视频 ...

  3. 音视频直播--技术架构

    前言 今天和大家讲一下音视频直播技术架构.之前的关注点主要放在客户端如何采集音频数据上,经过这两天的思考,我觉得应该先给大家讲一下音视频直播技术架构,这样更容易从整体上理解视频直播技术是如何运转的,之 ...

  4. android camera2 采集,视频采集:Android平台基于Camera 2的实现

    前言 这篇文章简单介绍下移动端Android系统下利用Camera2相关API进行视频采集的方法. Camera2是谷歌在Android 5.0新增的用来替代Camera1操作摄像头的一个全新的API ...

  5. Android 音视频采集与软编码总结

    请尊重原创,转载请注明出处:http://blog.csdn.net/mabeijianxi/article/details/75807435(本文已在 "任玉刚" 微信公众号发布 ...

  6. (转载)视频采集学习笔记

    视频采集学习笔记 第一节.视频采集   一.二者的不同点: 说起视频捕捉问题,我们先要来看一下视频捕捉卡.根据使用的驱动程序的不同来分类,目前市场上大致有两种捕捉卡:VFW (Video for Wi ...

  7. C#FFmpeg视频采集与推送RTMP服务器代码思路整理

    C#视频采集与推送RTMP服务器代码思路整理:在看过FFmpeg后是否认为写C#的视频流采集和推送还是一头雾水啊?深有此感.领导是C#的高手,说可以通过C或C++的代码直接复制粘贴到C#工程然后进行适 ...

  8. 短视频开发SDK 架构设计实践

    短视频开发SDK 架构设计实践 短视频发展史 图 1 图 1 所示是短视频及直播的发展史,众所周知,2016 年是直播元年,在这期间诞生了很多直播平台,比如熊猫.映客.斗鱼等:而在 2017 年,短视 ...

  9. H.264视频监控系统架构

    H.264视频监控系统架构 http://blog.csdn.net/ailiandeziwei/article/details/7167889 一.H.264介绍 H.264是一种视频压缩编码标准. ...

最新文章

  1. 小米副总裁崔宝秋:智能手机是今天AI技术最大的平台,AIoT又让AI无处不在 | MEET 2021...
  2. 【NLP】大模型时代,我们真的不再需要分词了吗?
  3. php endall(),ob_end_flush
  4. 在Android Studio进行“简单配置”单元测试(Android Junit)
  5. Power BI 如何获取数据做可视化
  6. Python项目:生成微信好友头像拼接图
  7. Ubuntu20.04如何卸载软件
  8. python获取随机大小写字母_python获取随机大小写字母
  9. 数据库基础笔试题(附带答案)
  10. 测试ai模糊软件,“马赛克”视频能被AI软件彻底还原?测试结果出乎意料!
  11. 《Python金融大数据风控建模实战》第4章 数据清洗与预处理
  12. socks5协议(rfc1928)
  13. 废品回收小程序、APP UNIAPP开发带有用户端和回收员端
  14. 进程管理——PV操作
  15. 半加器设计(结构描述法)
  16. ch341a_USB转串口/并口驱动
  17. 揭秘:雷电模拟器工作方式
  18. 究竟是什么人在买爱马仕?
  19. C语言实现求π/4=1-1/3+1/5-1/7+···求π的近似值,直到某一项的绝对值小于10-6为止
  20. Unity3D游戏编程-鼠标打飞碟

热门文章

  1. 读取properties文件方式
  2. 最近安装了Netscape Navigator 9.0英文版,真好用!
  3. 通信原理实践(一)——音频信号处理
  4. zabbix 自定义监控
  5. IIS6.0 + openssl执行版 + Windows2003--配置篇
  6. 红帽20亿美元强劲收入的背后,让开源成为主流
  7. Python语言学习 (六)1.2
  8. zz 鸡汤穷三代,励志毁一生
  9. Spring容器启动时出现Failed to read schema document错误
  10. 转Git学习碰到的问题