在《Ffplay视频播放流程》文章中我给出了一个ffplay的函数调用关系图,在分析代码上会有不小的帮助。那么本文就详细的描述如何从源码中一步步的得到我们想要的函数调用关系图。
前置条件
下载ffmpeg源码
安装graphviz:sudo>http://www.gson.org/egypt/
编译整个ffmepg
我采用的是默认配置+直接编译的方式,即./configure &&>ffmpeg$ makeCC ffplay.oLD ffplay_gCP ffplaySTRIP ffplay
我们从上述输出中可以看到,编译ffplay主要有四步:编译(CC),链接(LD),重命名(CP),去除符号表操作(STRIP),其中编译阶段是我们重点要分析的,因为编译是对源码的直接分析和处理。
生成RTL文件
确定了需要在编译ffplay的步骤后,我们在makefile中找到具体的编译函数:
define COMPILE $(call $(1)DEP,$(1)) $($(1)) $($(1)FLAGS) $($(1)_DEPFLAGS) $($(1)_C) $($(1)_O) $< endef
因为是编译ffplay.c文件,即此处的$(1)指的是CC,对应的$($(1)FLAGS)就是$(CCFLAGS),而CCFLAGS的定义中包含$(CFLAGS),即按照 egypt中的说明,我们在$(CFLAGS)的定义中添加-fdump-rtl-expand参数即可在make的时候成成RTL文件:
CFLAGS += $(ECFLAGS) -fdump-rtl-expand<