关于DM368的H264视频编码介绍(上)

关于DM368的H264视频编码介绍(上) Tony 2023-06-28 14:00:00 414

前言

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

相关环境搭建可参阅:

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

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

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

1.DVSDK目录结构

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

DVSDK安装目录.png

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

2.程序依赖

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

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

该文件夹内容如下所示:

dm365文件夹

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

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

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

encodets文件夹

这个目录是重头戏,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组件包。这样一来和编码相关的那些文件夹便如下所示:

和编码相关的文件夹.png

二、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

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
Tony
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
Tony
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区