• 【DM642学习笔记七】缓冲区管理BufferManagement


       (参考文档:The TMS320DM642 VideoPort Mini-Driver ——3.2 Buffer Management)
       认识输入/输出视频数据的缓冲区管理,有利于对视频图像采集、处理、显示的理解。
       输入/输出驱动程序都要开设至少3个缓冲区。在分配之前,驱动会根据通道配置参数计算出每一个缓冲区的大小,比如说,能容纳NTSC格式视频帧的缓冲区大小为720*480*2.(如果缩放使能,大小减半.)
      通过调用FVID_alloc(),FVID_free() 和FVID_exchange()三个函数,可实现帧缓冲区在应用程序和驱动之间的交换。

    1 输入视频数据的存储管理
        输入视频数据有DM642的VPort口解码后通过EDMA存储到SDRAM中,这个过程通过输入视频借口的设备驱动程序完成。在配置输入视频借口的设备驱动程序时,至少开设3个缓冲区,设备驱动程序管理这些缓冲区用于实时视频数据的采集。缓冲区管理方式如下图所示。【DM642】缓冲区管理BufferManagement
    【DM642】缓冲区管理BufferManagement
      首先,驱动程序开始运行时,3个缓冲区轮流存放更新的视频;如a所示。
      当应用程序调用FVID_alloc(),驱动程序将存放着最新数据的缓冲区给应用程序使用,另外两个(其余)缓冲区轮流存放更新的视频; a—>b,b—>e(又申请了一次)
      当应用程序调用FVID_exchange(),应用程序缓冲区放还给驱动,同时驱动程序将存放着最新视频的缓冲区交给应用程序。(相当于连续调用了FVID_free(),FVID_alloc()。) b—>c,c—>d.

    2 输出视频数据的存储管理
      保留1个缓冲区,把其余初始化在输出队列,等待被应用程序使用,驱动重复显示当前缓冲区; a
     调用FVID_alloc(),应用程序从驱动得到一个缓冲区,并往里放入数据。此时驱动仍显示当前缓冲区; b
     调用FVID_free(),应用程序返还1个准备好显示的缓冲区给驱动。(驱动显示完前一个后就把它作为当前缓冲区);b—>c—>d
     调动FVID_exchange(),给驱动一个准备显示的缓冲区,并从驱动得到一个。(相当于连续调用了FVID_free(),FVID_alloc()) d—>e
     简言之,FVID_exchange()就是,应用程序处理完1帧,将这一帧返还给驱动程序,再读入新的一帧。
    【DM642】缓冲区管理BufferManagement
    【DM642】缓冲区管理BufferManagement
    2013.3.7

  • 相关阅读:
    在MPTCP中引入流量监控——bwm-ng的使用说明
    Ubuntu下配置MPTCP
    实现两台MPTCP主机之间的通信——VSFTPD的配置与使用
    Google 辟谣,Android 和 Chrome OS 不合并
    paper-7
    计算机网络方面国际三大顶尖会议
    谷歌物联网操作系统Android Things揭开面纱
    张纯如
    Android binder机制之 5 --(创建binder服务)
    【BZOJ 1491】[NOI2007]社交网络
  • 原文地址:https://www.cnblogs.com/eaglediao/p/7136532.html
Copyright © 2020-2023  润新知