关于DM368的H264视频编码介绍(上)
前言
本系列博客性质为个人学习笔记。记录了我如何从什么都不知道逐渐理解了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的官网上都能找到,甚至手册之间也有相互的超链接…什么?你找不到?那给你好了:
别急着去读啊,都是英文的,看起来多浪费时间,先看接下来的例程更高效一些。
*例程部分仅抽取有关视频编码部分的程序逐一分析,因为程序比较长所以在下一篇中写。
——本篇涉及的资料下载——
[DM368开发环境(虚拟机版)]
百度网盘地址: https://pan.baidu.com/s/165_E7_lOtADo9S1GdDCKuQ
提取码: um0w
[TMS320DM368手册前4页(部分翻译)]
百度网盘地址: https://pan.baidu.com/s/1cuLGY_AKLcn9u9LWANRHDQ
提取码: egez
- 分享
- 举报
-
浏览量:834次2023-06-30 10:11:29
-
浏览量:747次2023-06-30 09:18:17
-
浏览量:615次2023-06-12 14:35:02
-
浏览量:1178次2023-06-12 14:34:40
-
浏览量:668次2023-10-23 17:56:00
-
浏览量:1478次2023-11-01 10:56:09
-
浏览量:4948次2018-11-13 10:03:09
-
浏览量:1488次2023-06-12 14:35:30
-
浏览量:987次2023-11-01 11:26:42
-
浏览量:4566次2021-04-27 16:33:22
-
浏览量:5461次2021-04-27 16:33:54
-
浏览量:704次2023-10-30 15:15:38
-
浏览量:2199次2020-05-22 19:32:20
-
2023-06-12 14:35:32
-
浏览量:3090次2018-05-07 16:22:35
-
浏览量:5524次2020-08-20 14:18:11
-
浏览量:1395次2024-02-27 17:03:43
-
浏览量:2688次2020-08-04 20:12:26
-
浏览量:7517次2023-12-27 20:28:48
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
Tony
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明