一、FFmpeg 的定制
在定制 Chromium 过程中,发现 WebAudio 模块依赖于 FFmpeg,但是只用到了里面的少许接口,因此需要对 FFmepg 做裁剪。
Chromium 源码中提供了对 FFMPEG 整个模块编译的支持,并提供了相关的开关来控制,但是默认该开关是关闭的。
发现 WebAudio 中用到的几个 FFmpeg 中的接口都是 RDFT 相关。接口的实现全都在 avfft.c 这个 C 源文件中。该源文件中还有 FFT、MDCT、DCT 部分的接口实现,这些函数都被预处理指令结合诸如 CONFIG_RDFT、CONFIG_MDCT、CONFIG_DCT 之类的宏定义来控制是否参与编译。
剩下的任务便是从 FFMPEG 中 截取 RDFT 相关接口来做最小化定制。即以 avfft.c 文件出发,编译出一个可用的最小动态库,以满足 WebAudio 模块的需求。
对于 CONFIG_RDFT、CONFIG_MDCT、CONFIG_DCT 等宏的定义,Chromium 针对不同的平台,以及针对 Chrome/Chromium 商标的区分,分别作了预设的配置:
1 2 |
sed -n 543p third_party/ffmpeg/ffmpeg.gyp 'platform_config_root' |