Alby's blog

世上没有巧合,只有巧合的假象。

0%

一、概述

解码从数据结构上看,是将 AVPacket 转换为 AVFrame 的过程。如何构建 AVPacket,以及获取到 AVFrame 后续要进行什么操作,严格来说并不是解码的步骤。
本文主要关注使用 FFmpeg 的软解 H.264。虽然本文并不涉及 VideoToolBox,但硬解和软解有一些共用的 API,并且软解过程更流畅,所以熟悉软解后再去了解硬解会容易。

阅读全文 »

一、概述

早在2015年8月初,FFmpeg 就已经开始逐步支持 macOS 和 iOS 平台的 VideoToolBox,2017年7月低,FFmpeg 在 example 中新增了一个 hw_decode.c 用于演示对文件的硬解码。以前使用过其软编码(基于 x264 )和软解码,也单独使用 VideoToolBox 进行过硬编码和硬解码。但是距离上次使用 FFmpeg 后其 API 发生了一些改变,VideoToolBox 也支持 HEVC 了,所以重新研究一次。

阅读全文 »

一、概述

请勿将生成器函数( generator function )和生成器( generator )混淆。其次生成器函数和普通函数有所区别,《Fluent Python》( 《流畅的 Python》 )作者 Luciano Ramalho 甚至觉得应该新增一个 gen 关键字来区分两者。

本文未将函数和方法加以区分。

阅读全文 »

一、概述

插入、更新、删除和移动操作总是保证结构完好;查询使用一条 SELECT 语句即可;查询节点的所有父节点使用 CET 进行递归查询。其中最复杂的部分是更新和移动。

阅读全文 »

一、概述

Libuv 用到了一些复合类型的数据结构:队列( Queue )、红黑树( Red-Black tree )、最小二叉堆( Binary min heap )等。其中队列和最小二叉堆是以宏的形式实现的。
红黑树主要用于信号处理( Signal Handle );最小二叉堆主要用于计时器( Timer )。
树和堆的实现不像队列实现那样有特色,甚至很多 Linux/UNIX 操作系统本身就包含实现,故本文主要提供一些树和堆的参考资料的链接。

阅读全文 »