(参考文档: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个缓冲区,设备驱动程序管理这些缓冲区用于实时视频数据的采集。缓冲区管理方式如下图所示。
  首先,驱动程序开始运行时,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帧,将这一帧返还给驱动程序,再读入新的一帧。


2013.3.7

【DM642学习笔记七】缓冲区管理BufferManagement的更多相关文章

  1. (转)Qt Model/View 学习笔记 (七)——Delegate类

    Qt Model/View 学习笔记 (七) Delegate  类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...

  2. Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...

  3. Typescript 学习笔记七:泛型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  4. python3.4学习笔记(七) 学习网站博客推荐

    python3.4学习笔记(七) 学习网站博客推荐 深入 Python 3http://sebug.net/paper/books/dive-into-python3/<深入 Python 3& ...

  5. Go语言学习笔记七: 函数

    Go语言学习笔记七: 函数 Go语言有函数还有方法,神奇不.这有点像python了. 函数定义 func function_name( [parameter list] ) [return_types ...

  6. iOS 学习笔记七 【博爱手把手教你使用2016年gitHub Mac客户端】

    iOS 学习笔记七 [博爱手把手教你使用gitHub客户端] 第一步:首先下载git客户端 链接:https://desktop.github.com 第二步:fork 大神的代码[这里以我的代码为例 ...

  7. 【opencv学习笔记七】访问图像中的像素与图像亮度对比度调整

    今天我们来看一下如何访问图像的像素,以及如何改变图像的亮度与对比度. 在之前我们先来看一下图像矩阵数据的排列方式.我们以一个简单的矩阵来说明: 对单通道图像排列如下: 对于双通道图像排列如下: 那么对 ...

  8. Linux学习笔记(七) 查询系统

    1.查看命令 (1)man 可以使用 man 命令名称 命令查看某个命令的详细用法,其显示的内容如下: NAME:命令名称 SYNOPSIS:语法 DESCRIPTION:说明 OPTIONS:选项 ...

  9. go微服务框架kratos学习笔记七(kratos warden 负载均衡 balancer)

    目录 go微服务框架kratos学习笔记七(kratos warden 负载均衡 balancer) demo demo server demo client 池 dao service p2c ro ...

随机推荐

  1. day 61 Django基础之django分页

      Django基础之django分页 一.Django的内置分页器(paginator) view   from django.shortcuts import render,HttpRespons ...

  2. shell $* 和$@ 的区别以及运算操作

    #! /bin/bash test() { echo "未加引号,二者相同" echo $* echo $@ # 脚本名 echo $ # 参数个数 echo $# # 返回值 e ...

  3. C++的注释

    ### 1.2 注释 **作用**:在代码中加一些说明和解释,方便自己或其他程序员程序员阅读代码 **两种格式** 1. **单行注释**:// 描述信息  - 通常放在一行代码的上方,或者一条语句的 ...

  4. 大半宿,封装了一个MP3播放器的类,写了个简陋的播放器

    用 winmm.lib 写的 封装不是很好,而且没有优化,效率可能有问题,但是现在几乎没有什么大问题 我用我封装的类,写了一个小播放器,界面上的所有功能都实现了,包括双击列表中的文件名,直接播放文件 ...

  5. Python系统(os)相关操作

    文件操作 python中常用于文件处理的模块有os,shutil等. 1 创建文件 文件的创建可以使用open()函数,如下创建一个test_file.txt的文件: >>> wit ...

  6. iOS开发系列-NSOutputStream

    NSOutputStream 创建一个NSOutputStream实例 - (nullable instancetype)initToFileAtPath:(NSString *)path appen ...

  7. kali linux 入门(1) 基于win10和docker的环境搭建

    1. 前言 渗透测试并没有一个标准的定义.国外一些安全组织达成共识的通用说法是,渗透测试是通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法,这个过程包括对系统的任何弱点.技术缺陷或漏 ...

  8. [NOIP2019模拟赛]LuoguP4261白金元首与克劳德斯

    题目描述 给出坐标系中n个矩形,类型1的矩形每单位时间向x轴正方向移动1个单位,类型2的矩形向y轴正方向,初始矩形不重叠,一个点被矩形覆盖当且仅当它在矩形内部(不含边界),求$(-\infty ,+\ ...

  9. Luogu P2079 烛光晚餐(背包)

    P2079 烛光晚餐 题意 题目背景 小明准备请小红去一家咖啡厅,共进烛光晚餐.小红高兴地和他一起去了咖啡厅. 题目描述 小红说:"小明,你点菜吧."小明看到菜单上有\(N\)道菜 ...

  10. [JZOJ5977] 【清华2019冬令营模拟12.15】堆

    题目 其中n,q≤500000n,q\leq 500000n,q≤500000 题目大意 让你维护一个堆.支持一下操作: 在某个点的下面加上另一个点,然后进行上浮操作. 询问某一点的权值. 思考历程 ...