目录

  • 〇、前言
  • 一、DVSDK的结构和编码程序依赖
    • 1.DVSDK目录结构
    • 2.程序依赖
  • 二、DM368的视频处理子系统
  • ——本篇涉及的资料下载——

〇、前言

本系列博客性质为个人学习笔记。记录了我如何从什么都不知道逐渐理解了DVSDK例程的过程。

相关环境搭建可参阅:

从零开始搭建DM368开发环境,安装DVSDK4_02_00_06并编译生成uboot、rootfs和kernel镜像

*本文并不全面,只记录自己理解的部分,所以文中多有限定语句,是为了不误导他人,烦请体谅。

一、DVSDK的结构和编码程序依赖

1.DVSDK目录结构

以DVSDK4_02_00_06为例,安装后的目录下有很多的文件夹,这些文件夹的作用大概是这样的:

上面的截图不是从官方DVSDK得到的,而是从某虚拟机版开发环境中拷贝出来的。所以有一些文件夹名称等会和官方的DVSDK有出入,不过关系不大。这个虚拟机版本的开发环境也将在文末提供下载。

2.程序依赖

我只需要进行视频编码,将从摄像头输入的视频数据通过DM368提供的编码接口进行编码,得到H264编码后的数据。后续看代码也好,查资料也好,都要先围绕着这一个目标进行,以免分散精力。(实际上是我还没学语音编码过程和解码过程。)

上面的图中已经有了注释,示例代码在 dvsdk-demos_4_02_00_01 文件夹中。该文件夹下的 dm365 子文件夹即为所需。之所以是dm365是因为,在手册上已经有了说明,DM368和DM365处理器引脚兼容,在官方网站一些资料上以及IPNC中,统称DM36x,手册的阅读后文中进行。

该文件夹内容如下所示:

其中 ls 文件夹是一系列空目录,不需要管,嫌烦删了也行。重点在本文件夹及 encodets 子文件夹。readme.txt中的内容翻译后是:

更改ui.c和ctrl.c,如果使用原始示例,则需要更改回去。原始示例是ui.ccc和ctrl.ccc

不瞒你说,*.ccc的文件我也没有看见,但是无论如何,读源码肯定不能只在源码上做修改,所以这条备注就当没看见。

这个目录是重头戏,encode.txt 是对整个实例程序使用的说明,根据文件名可以看出, capture.c/h是关于捕获器(摄像头)的,video.c/h 是关于视频编码的,writer.c/h 是关于编码后输出的。其它的文件和我们的目的关系不大,有些暂时看不出来干什么的文件先放着不管。接下来打开 main.c

main.c 头文件包含中,除了系统和C库的头文件,有以下需要需要注意的:

#include <xdc/std.h>//调用编解码器引擎
#include <ti/sdo/ce/trace/gt.h>
#include <ti/sdo/ce/CERuntime.h>//调用达芬奇多媒体应用程序接口
#include <ti/sdo/dmai/Dmai.h>
#include <ti/sdo/dmai/Fifo.h>
#include <ti/sdo/dmai/Pause.h>
#include <ti/sdo/dmai/Sound.h>
#include <ti/sdo/dmai/VideoStd.h>
#include <ti/sdo/dmai/Capture.h>
#include <ti/sdo/dmai/BufferGfx.h>
#include <ti/sdo/dmai/Rendezvous.h>//组件框架
#include <ti/sdo/fc/rman/rman.h>#include "video.h"
#include "audio.h"
#include "capture.h"
#include "writer.h"
#include "speech.h"
#include "../ctrl.h"
#include "../demo.h"
#include "../ui.h"
#include "net.h"

这样标注出来之后就清晰多了,也就是说编码的程序调用了编解码引擎、Dmai库和xdc组件包。这样一来和编码相关的那些文件夹便如下所示:

二、DM368的视频处理子系统

有一个问题需要在具体编码之前搞清楚,那就是:图像从进入到DM368中之后,是如何转变为H264编码的,不追究细节,至少这个通路要有所了解。这部分的资料太多了,如果你是和我一样从零开始,又实在找不到合适的介绍,我觉得这篇论文对视频处理过程说的非常详细:

遥操作手术高清视频无线传输技术研究

论文提出的方案很有意思,嗯,DSP部分的描述和例程给的非常符合(笑),因为这是流程性的操作,但可惜这里面还没有我想要的:第一点,其使用了CCD,而我需要使用CMOS传感器,二者在软件层面上使用的视频输入源不同;二,细节不够多。

嘛,不过相信读过那位的论文之后,读者应该对DM368的例程代码组织结构了解了许多了,VPSS子系统分为两个部分,前面和输入源对接的是VPFE(Video Processing Front End,视频处理前端),后面和编码有关的是VPBE(Video Processing Back End,视频处理后端)。前后端通过内存进行数据交互,这种方法在海思MPP中叫什么来着?好像是“离线模式”。

VPFE和VPBE的特性手册上也有介绍,为了阅读方便我翻译了两页,挂出来大家看看。


相关的资料手册在TI的官网上都能找到,甚至手册之间也有相互的超链接…什么?你找不到?那给你好了:

VPFE用户手册

VPBE用户手册

别急着去读啊,都是英文的,看起来多浪费时间,先看接下来的例程更高效一些。

*例程部分仅抽取有关视频编码部分的程序逐一分析,因为程序比较长所以在下一篇中写。

——本篇涉及的资料下载——

[DM368开发环境(虚拟机版)]

百度网盘地址: https://pan.baidu.com/s/165_E7_lOtADo9S1GdDCKuQ

提取码: um0w

[TMS320DM368手册前4页(部分翻译)]

百度网盘地址: https://pan.baidu.com/s/1cuLGY_AKLcn9u9LWANRHDQ

提取码: egez

————2020-2-8@燕卫博————

从零开始理解DM368的H264视频编码过程(上)相关推荐

  1. 从零开始理解DM368的H264视频编码过程(中)

    目录 三.DM368视频编码程序 main.c主线程 capture.c捕获器线程 video.c视频编码线程 writer.c写线程 ctrl.c控制线程 删减后的demo.h文件内容 删减后的ct ...

  2. 从零开始理解DM368的H264视频编码过程(下)

    目录 四.一些需要注意的问题和提示 色彩空间 支持的视频编码格式 支持的视频输入源 Camera的更换 IDR帧 五.后记 四.一些需要注意的问题和提示 色彩空间 在capture捕获线程中有一项设置 ...

  3. mp4v2再学习 -- H264视频编码成MP4文件

    一.H264视频编码成MP4文件 参看:H264视频编码成MP4文件 参看:mp4v2在VS2010下的编译与在项目中的使用 最近做项目需要将H264文件封装为mp4文件,从网上找到了MP4V2库,下 ...

  4. H264视频编码成MP4文件

    http://blog.csdn.net/firehood_/article/details/8813587 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近需要将H264视频编码成MP4格 ...

  5. 毕设系列之Libx264实时视频流(YUV 420P转H264视频编码篇)

    #PS:要转载请注明出处,本人版权所有 #PS:这个只是 < 我自己 >理解,如果和你的 #原则相冲突,请谅解,勿喷 开发环境:Ubuntu 16.04 LTS 本文的技术实现部分参考雷博 ...

  6. 简述HEVC与VVC的视频编码过程

    H.265/HEVC视频编码 视频编码的目的是为了压缩原始视频,压缩的主要思路是从空间.时间.编码.视觉等几个主要角度去除冗余信息.由于 H.264 出色的数据压缩比率和视频质量,成为当前市场上最为流 ...

  7. H264视频编码级别说明profile level Encoder

    首先要阐明所谓的AVC其实就是H.264标准,是由ITU-T和ISO/IEC组成的联合视频组(JVT,Joint Video Team)一起开发的, ITU-T给这个标准命名为H.264(以前叫做H. ...

  8. 【H.264/AVC视频编解码技术】第一章【H264视频编码详细解析】

    H264压缩比 YUV格式为 YUV420  分辨率 640 x 480  帧率 15  ,比特率为  640  x 480   x 1.5 x 15 x 8 =55M ,建议码流 500kpbs . ...

  9. Linux系统安装ffmpeg + h264视频编码

    通过我这篇文章安装的小伙伴可能会遇到h264编码转换失败的问题,本篇文章将完美解决这个问题. 此篇文章方法也适合未安装ffmpeg的系统,忽略第一步即可. 1.首先,进入你安装的ffmpeg文件夹下, ...

最新文章

  1. 适配设备的简易新闻浏览器
  2. Windows Phone开发者注册秘籍
  3. python里compile的作用_Python代码中compile()函数具有哪些功能呢?
  4. tp框架命名空间使用(namespace,use,as,\)
  5. matlab中的:的优先级_内容早期设计:内容优先
  6. 电脑打字手指正确姿势_洞箫的演奏姿势和动作
  7. qt xml组包_Qt 利用XML文档,写一个程序集合 二
  8. bzoj 1607: [Usaco2008 Dec]Patting Heads 轻拍牛头
  9. ASP连接各类数据库的语句
  10. python搭建web服务
  11. OpenCV探索之路(九):模板匹配
  12. 企业微信API全局错误码 enum枚举类
  13. 学习编译原理的总结1
  14. java并发编程入门_Java并发编程从入门到精通 PDF 下载
  15. 黑鲨重装计算机安装无法继续,图解黑鲨装机大师装机失败无法开机怎么办?
  16. 华为设备默认console密码
  17. 《基于多任务神经网络的语种识别研究》——秦晨光
  18. 【EARLIER/EARLIEST函数】引用不存在的更早的行上下文 报错解决
  19. 如何打开SQL server的MDF/LDF文件并修改数据
  20. redshift 踩坑

热门文章

  1. 化妆品行业防伪案例:国货之光标婷如何化解假货难题,实现销售额每年50%增长
  2. 南京工业大学计算机科学与技术在哪个校区,2019年南京工业大学浦江学院新生在哪个校区及新生开学报到时间...
  3. Windows CockroachDB入门上手
  4. golang使用CockroachDB
  5. 计算机应用水平考试内容河南,河南2021上半年计算机应用水平考试时间 什么时候考试...
  6. 浏览《中县干部》有感
  7. Idea中的sout快捷键
  8. Latex使用超链接url:网址、邮箱
  9. URL编码中加入%原因
  10. 华三交换机ping不通用户但用户_H3C三层交换机配置VLAN之间不能互相访问