FFmpeg video filter FATE测试过程介绍

FATE (FFmpeg Automated Testing Environment) 是FFmpeg社区开发的自动化测试框架,支持对FFmpeg API的测试,也支持对FFmpeg内部函数的测试。对FFmpeg video filter的测试,就属于对API的测试。之前为了为一个video filter增加fate测试,大概研究了一下,感觉FFmpeg官方主页的资料还可以更详细,在酝酿写一篇介绍的时候,看到"大师兄悟空"在微信公共号“流媒体技术”发布了《如何编写FFmpeg自动化测试用例》(一、二),就一时懒得动笔。

趁最近几天假期,想想还是记录一下为佳,除了分享外,还可以自用备查。我的记录角度是在Linux环境下如何一步步的探索出FFmpeg video filter FATE的测试过程,从而理解如何为一个video filter增加fate测试。可能这样更实用,一个新的任务,缺少足够资料,都可以用这样类似的方法去探索。成文顺序虽然大致是按探索过程来的,但是,为了阅读逻辑性,有些地方会直接介绍后来才理解到的知识点。

先上一个图,列一下接下来会用到的主要文件以及目录。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tGRrAXw6-1587431743857)(https://graph.baidu.com/resource/2227cb590ec9d4d2b732201581001970.png)]

  • 预备步骤1

得到FFmpeg源代码并且编译:

#演示目的,所以,所有内容都放在/tmp/目录下
$ mkdir -p /tmp/ffmpeg_work     
$ cd /tmp/ffmpeg_work

$ git clone https://git.ffmpeg.org/ffmpeg.git

#新建编译目录,以和源码目录分离
$ mkdir build
$ cd build

#configure参数有很多,这里简单起见,使用默认值
$ ../ffmpeg/configure

$ make -j8

#可以看到编译出了ffmpeg和ffplay等
#其中带_g后缀的文件名表示symbol没有被strip。
$ ls
config.asm  doc      ffmpeg    ffplay    ffprobe
fftools     libavdevice  libavformat  libswresample
Makefile  tests config.h    ffbuild  ffmpeg_g
ffplay_g  ffprobe_g  libavcodec  libavfilter
libavutil  libswscale     src.

  • 预备步骤2

在FATE中有很多测试,有些测试是自包含的,有些测试还需要额外的资料,在FFmpeg中一般称之为SAMPLES,可以用下面的方法获取SAMPLES。

$ make fate-rsync SAMPLES=fate-suite/
#命令输出如下,表示用rsync方法来同步资料
rsync -vrltLW --timeout=60 --contimeout=60 rsync://fate-suite.ffmpeg.org/fate-suite/ fate-suite/

不幸的是,由于网络原因,这条命令很难成功执行。所以,只能假设这些资料都已经在你的系统的/tmp/ffmpeg_work/fate-suite/目录下面了。需要提醒的是,这些资料可能会经常更新(一般来说,只会增加内容,不会修改文件),如果你要跑完整FATE的话,需要时时更新。

  • 运行FATE

对于自包含不需要SAMPLES的测试,只需要运行下面的命令。

$ make fate
GEN     tests/pixfmts.mak
# 下面的输出提示也表明后续测试不需要SAMPLES
warning: only a subset of the fate tests will be run because SAMPLES is not specified
HOSTCC  tests/base64.o
HOSTLD  tests/base64
HOSTCC  tests/tiny_psnr.o
HOSTLD  tests/tiny_psnr
HOSTCC  tests/tiny_ssim.o
HOSTLD  tests/tiny_ssim
HOSTCC  tests/audiomatch.o
HOSTLD  tests/audiomatch
CC      tests/checkasm/aacpsdsp.o
CC      tests/checkasm/af_afir.o
CC      tests/checkasm/alacdsp.o
...
TEST    checkasm-aacpsdsp
TEST    checkasm-af_afir
TEST    checkasm-alacdsp
...

我为DNN模块加的FATE测试也属于这种类型。

对于需要SAMPLES的测试,则可以用下面的命令来指定SAMPLES对应的目录。实际上,指定SAMPLES还有其他的几种方法,这里只是选择了其中的一种方法。在指定SAMPLES后,make fate就会跑所有的测试用例,包括自包含的测试。

$ make fate SAMPLES=../fate-suite/ 
...
TEST    filter-scale500
...

有些FFmpeg video filter的fate测试属于这种类型,需要依赖SAMPLES的存在。而有些video filter的fate测试所需要的数据都已经在FFmpeg源代码目录树中了,就不需要依赖SAMPLES了。

在make fate的时候,首先会编译测试用例(见命令行输出的CC等字样),然后就会执行测试(见命令行输出的TEST字样)。根据命令行输出我们可以看到有很多个子测试被执行。

  • 单跑一个fate测试

上述make fate的方法会跑多个测试,为了理解如何增加一个filter测试,我们应该先缩小到一个测试的情况。基于对makefile的了解,我们知道只要为make指定单独的一个测试作为target即可,那具体应该是什么呢,

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值