vlc-h265插件集成 项目学习笔记

昨天刚刚梳理了Hacker Guide/Decoder:如何做一个解码器(VLC),今天结合一个实际点的 vlc-h265 集成插件的项目看看,试试能不能顺利解读一下新编解码器集成的思路。

参考项目GitHub地址:strukturag / vlc-libde265

1 整体感知

先来看一下项目整体的文件结构,大致了解下项目里有哪些模块:


项目文件结构(git及copyright略)

首先是右侧一堆文件夹(加星号的是 VLC 没有的):

  • *debian:Debian 系统配置文件
  • include:头文件的存放位置
  • m4:宏处理器存放位置(开始是空的,编译完就有了)
  • *patches:补丁存放位置(这里是用于记录修改的diff信息)
  • src:一大堆的源文件(主要的地方)

然后是左侧一堆文件(加星号的是 VLC 没有的):

  • *.travis.yml:travis的配置文件,用于持续集成
  • Makefile.am:automake编译用,类似Makefile
  • *autogen.sh:auto编译时使用的编译脚本
  • configure.ac:autoconf编译用,类似configure
  • *prepare-package.sh:依赖和环境的准备脚本

注:这里autogen的编译流程我不太熟,但顺序还是 ./configure => make => make install ,但感觉这样在准备编译时文件更加简洁,在编译过程中生成Makefile等等,有更好的理解欢迎指教

2 慢慢开始读代码

include 是头文件存放的地方,头文件在逻辑方面有像目录一样的感觉,所以头文件或许是个不错的开始。
include 中有两个头文件:

  • libde265_plugin_common.h:声明了应当包含的文件和一些宏定义。嗯...好像并没有得到太多的信息,主要是解释了 VLC_CODEC_HEVC 、 VLC_CODEC_HEV1 和 VLC_CODEC_SCTE_27 三个宏定义被声明时 VLC_FOURCC 传入的参数区别。

  • vlc_codecs.h:这是 vlc 自己的头文件,记录着解复用和解码器需要的一些数据结构等信息。

头文件并没有给什么指引...所以还是回头看看 Makefile.am 里有没有什么好点的指示。
Makefile.am 的书写有一个很好的规律,具体对文件的分析有点长,所以整理成了一个单独的介绍:vlc-libde265 Makefile.am 试读
从上面这篇试读的过程中我们找到了 h265 插件各个功能实现过程中使用的具体文件,那么下面就是对这些文件的解读了。

3 仔仔细细读代码

3.1 解码器——libde265_plugin

解码器除了引用了必须要的 265 头文件外,核心代码全部在 src/codec/libde265dec.c 中,所以想要了解自然要瞅瞅这个文件里有些啥。文件还是比较正常的,加注释才900行,但为了尽快理解还是先暂时忽略实现,直接从结构层面去感知一下:

  • struct decoder_sys_t:h265 解码模块的各个描述符
  • function vlc_module_begin:初始化模块的各个描述符
  • struct picture_ref_t:vlc 以265格式存储图片时的参考(结合下面两个函数)
  • function ImageFormatToChroma:图片格式转换(mono/420/422/444)
  • function GetVlcCodec:获取 vlc 编解码器(根据不同格式和参数返回)
  • function SetDecodeRatio:设置解码帧率
  • function Decode:核心的解码算法部分
  • function ReleasePictureRef:释放图像的引用
  • function GetPicture:创建一个可以直接用于渲染的vlc图片
  • function GetBuffer:libde265 创建图像后的回调
  • function ReleaseBuffer:释放图像后的回调
  • function Open:解码器探寻
  • function Close:解码器销毁

3.2 解复用——libde265demux_plugin

  • struct struct demux_sys_t:h265 插件使用的数据信息定义
  • char[] extensions:支持的扩展名
  • function Demux:解复用的核心逻辑代码
  • function Control:控制
  • function Close:释放未被使用的数据
  • function Peek:按照增量的大小提前查看数据
  • function SearchStartcode:寻找下一个 NAL 的起始位置

3.3 针对格式插件

h265 插件还专门提供了 mkv、mp4、TS 格式的专门的解复用的逻辑,至于为什么...我想大概是 h265 编码可能主要针对在这几个封装下的优化与压缩,或者说只有在 vlc 解读这几个格式的时候才会选择 h265 编码去进行解码,这样的话其他格式使用其他编码(h264之类的)的情况下制作 h265 插件就可以只关心这几个封装了。

4 与上一篇 Wiki 做个对比

上一篇文章 Hacker Guide/Decoder:如何做一个解码器(VLC)主要是一边翻译一边想入门一下编解码器的书写思路,在这篇文章里提出的编码器书写必须要实现的有以下几个方面:

  • 解码器核心
  • 对输入流的获取
  • 数据包的定义及读取
  • 数据包的更改与对齐
  • 运动补偿的函数定义
  • IDCT的函数定义
  • 对称多处理的选择(可选)

总的来看这个 h265 的项目基目前看到的实现:解码器的核心实现,数据包的定义及读取。输入流的校验及读取在每个具体的封装格式中实现。数据包的更改与对齐、运动补偿的函数定义、 IDCT的函数定义等实现可以仔细找找剩下那一堆格式的文件,然后选择必要的去实现。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355