Winddoing's Notes

Follow Excellent, Success will Chase you

0%

Clash 是一个使用 Go 语言编写,基于规则的跨平台代理软件核心程序。

阅读全文 »

cmake编译生成的可执行文件与Install后的文件不同:

1
2
3
4
5
6
7
$ md5sum build/lib/libenc.so packages/aarch64/Debug/lib/libenc.so
6bd8b76c426515112ab697db589dc229 build/lib/libenc.so
8125674eaa256ece0e08373e758e3013 packages/aarch64/Debug/lib/libenc.so

$ md5sum build/bin/enc_test packages/aarch64/Debug/bin/enc_test
0753ff4ffe4a41e19058628dd3627de9 build/bin/enc_test
1073ccf878e004045bc733630952e6c3 packages/aarch64/Debug/bin/enc_test
阅读全文 »

记录H264、H265中用到的一些编码参数,及其特点等。

阅读全文 »

在linux系统中多线程的资源同步使用互斥锁pthread_mutex_t,同时它也可以用于多进程之间的资源同步。

互斥锁的使用过程中,主要有pthread_mutex_init,pthread_mutex_destory,pthread_mutex_lock,pthread_mutex_unlock这几个函数以完成锁的初始化,锁的销毁,上锁和释放锁操作。

阅读全文 »

CMA,Contiguous Memory Allocator,是内存管理子系统中的一个模块,预留内存的配置解析和管理内存配置。一般系统会在启动过程中,从整个memory中配置一段连续内存用于CMA,然后内核其他的模块可以通过CMA的接口API进行连续内存的分配。CMA的核心并不是设计精巧的算法来管理地址连续的内存块,实际上它的底层还是依赖内核伙伴系统这样的内存管理机制,或者说CMA是处于需要连续内存块的其他内核模块(例如DMA mapping framework)和内存管理模块之间的一个中间层模块,主要功能包括:

  • 解析DTS或者命令行中的参数,确定CMA内存的区域,这样的区域我们定义为CMA area。
  • 提供cma_alloc和cma_release两个接口函数用于分配和释放CMA pages
  • 记录和跟踪CMA area中各个pages的状态
  • 调用伙伴系统接口,进行真正的内存分配。
阅读全文 »

dynamic debug (dyndbg)是内核提供的一个调试功能,允许动态的开关内核打印输出,包含的API:pr_debug()dev_dbg()print_hex_dump_debug()print_hex_dump_bytes()等。
dynamic debug通过设置/dynamic_debug/control文件来控制内核输出,有多种匹配的条件:文件名,函数名,行号,模块名和输出字符的格式;

阅读全文 »

DPB全称 Decoded Picture Buffer,即解码图片缓存区。

在做视频解码时,需要将最近的若干幅参考帧缓存起来,这个缓冲区就叫做DPB。解码已经完成的图像被缓存在DPB中,供后续帧用作参考图像,因此,解码器需要按照一定的规则对DPB中的图像进行管理。

在H264中参考帧最多可以存储16帧参考帧。

阅读全文 »

POC(picture order count):图像播放顺序号,在编解码中视频编码顺序视频的播放顺序,并不完全相同.

视频编码时,如果采用了B帧编码,由于B帧很多时候都是双向预测得来的,这时会先编码B帧的后向预测图像(P帧),然后再进行B帧编码,因此会把视频原来的播放顺序打乱,以新的编码顺序输出码流而在解码断接收到码流后,需要把顺序还原成原本的播放顺序,以输出正确的视频。

B帧的存在导致播放顺序POC和解码顺序frame_num不一致

阅读全文 »

Here's something encrypted, password is required to continue reading.
阅读全文 »