首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用FPGA优化视频水印操作的OpenCL应用-1

使用FPGA优化视频水印操作的OpenCL应用-1

视频流和下载通常会耗掉消费者绝大部分互联网流量,同时也是云计算技术发展的主要推动力。对视频流和下载需求的持续增长,正在驱动视频处理应用迈出专业系统领域,步入数据中心。这一应用模式的转变需要具备快速扩展能力的计算节点来满足视频内容制作和分发的各个不同高计算强度阶段的需求,如转码需求和水印需求。  我们近期使用赛灵思SDAccel™开发环境来编译和优化专为FPGA加速卡采用OpenCLTM编写的视频水印应用。视频内容提供商使用水印起到广告和内容保护的作用。我们的目的是设计一种能处理运行在Alpha Data ADM-PCIE-7V3卡上,吞吐量为30fps,分辨率为1080p的高清(HD)视频的水印应用。
  SDAccel开发环境能让设计人员先用OpenCL编写应用,然后在无需了解底层FPGA实现工具的情况下把应用编译到FPGA中。可以以这种视频水印应用为例来介绍SDAccel中的主要优化技巧。
  带标识插入功能的视频水印
  该视频水印算法的主要功能是在视频流的特定位置覆盖一个标识。用于水印的标识可以是活动的,也可以是静止的。活动标识一般采用简短的重复性视频片段来实现,静止标识则采用静止图像。
  广播企业宣传自己视频流最常用的方法是把企业标识用作静止水印,因此成为我们实例设计的目标。该应用根据下列等式,以逐像素粒度插入静止标识。      
        输入和输出帧为二维阵列,像素使用YCbCr色域表达。在该色域中,每个像素用三个分量表达。Y表示亮度分量,Cb表示色度蓝色色差分量,Cr表示色度红色色差分量。每个分量都用一个8位值表达,因为每个像素为24位。
  该标识是一个包含待插入内容的二维图像。掩膜也是一个图像,但只包含标识的轮廓图。掩膜的像素可以是白色或黑色。掩膜的白色像素表示标识的插入位置,黑色像素则表示原始像素未被触及的地方。图1所示的,就是这种视频水印算法的运算方式实例。
  图1 - 工作中的视频水印算法
  目标系统和初始实现方案
  我们运行该应用的系统如图2所示。该系统由Alpha Data ADMPCIE-7V3卡组成,该卡通过PCIe®链路与x86处理器通信。在该系统中,主机处理器从磁盘提取输入视频流,将其传输到设备全局内存中。设备全局内存位于FPGA卡上,可供FPGA直接访问。除把视频帧存放到设备全局内存中外,标识和掩膜也从主机传输到FPGA加速器卡上并存入片上内存中,以充分利用BRAM内存的低时延优势。因为本应用使用的是一个静止标识,只需在片上内存中存储静止图像和布局位置数据。
  图2 - 视频水印应用系统总览图
  创建数据后,主机处理器会给FPGA架构中的水印内核发送一个启动信号。该信号触发内核完成三件工作:开始从设备全局内存获取输入视频帧;在掩膜定义的位置插入标识;将处理过的帧传输回设备全局处理器,等待处理器调用。
  视频流中每帧的数据传输与计算的协调工作使用图3所示的代码完成。
  图3 - 用于协调每帧数据传输和计算的代码
  该代码运行在主机处理器上,负责发送视频帧到FPGA加速器卡,启动加速器,然后从FPGA加速器卡取回处理后的帧。
返回列表