Category Archives: FATE Server

Anti-Granularity

Pursuant to my brilliant idea of granularizing the master regression test: Why didn’t anyone tell me that the seektest rule invoked the codectest and libavtest rules, thus rendering the idea completely silly? Maybe because few people understand the regression test infrastructure, which is one reason I long to supplant it with FATE. So the granular tests are out and the master regression test spec is back in. In other FATE news, I modified individual build record pages to only display failed tests, not all tests. I just think it’s cleaner and more efficient that way. Plus, each failed test lists the last known revision where the test was known to work for the given configuration:


FATE showing failed test

I’m proud of that feature, if only because it’s the most complicated and optimized SQL query I have yet devised.

Since the build record page no longer lists all the test specs, I have added a new page which does display all FATE test specs. BTW, 119/136 of the base H.264 conformance vectors now work and are actively tested against each build.

Granular Regression Tests

I have been studying the FFmpeg regressions test infrastructure ever so carefully so I can decide the best way to convert all of its functionality and test coverage into the FATE system as individual test specs. I have some ideas but I never know when I will have both the time and the motivation to implement them. In the interim, I am retiring the master ‘make test’ full regression test spec. In studying the regression architecture, it’s immediately obvious that ‘make test’ invokes these 3 sub-regression suites, which each have their own test specs now:

That should help until I break down the tests even further. Oh, and I also added a test spec for ‘ffmpeg -h’. Hey, FFmpeg got into a state once where it segfaulted on help. We don’t want to let that go uncaught again.

AAC Decoder Is In!

It certainly has been a long journey for native Advanced Audio Coding (AAC) in FFmpeg. It started with a Google Summer of Code project back in FFmpeg’s inaugural FFmpeg SoC season (2006). It went unfinished. Since then, many people have endeavored to fix it up to the point where it can be included into the mainline. But it was Robert Swain who persevered toward the end goal. And now look:

$ ffmpeg -formats
[...]
Codecs:
 D V    4xm             4X Movie
 D V D  8bps            QuickTime 8BPS video
 D A    8svx_exp        8SVX exponential
 D A    8svx_fib        8SVX fibonacci
 D A    aac             Advanced Audio Coding
[...]

Robert profiled the new AAC decoder to be significantly faster than the libfaad, the prevailing AAC decoding solution in the open source community. Further optimization work is ongoing, as is support for more advanced coding modes. Currently, the decoder only deals with low complexity (AAC-LC), the most common variant you are likely to encounter.

And of course, thanks also to Robert for creating more FATE work for me. I can’t avoid the problem of testing perceptual audio decoders for much longer.

YASM Active

Thanks to Loren Merritt for restructuring FFmpeg’s build system to use YASM and for submitting and relicensing a number of ASM optimizations compilable with YASM. The idea is that if you have YASM installed (x86_32 or x86_64), FFmpeg’s configure script will notice it and automatically compile in the new optimizations. I just installed the assembler on both the x86_32 and x86_64 FATE build machines.

Hope it works, and that it’s faster than before. I look forward to assessing how it improves performance on certain H.264 conformance vectors, particularly monsters like MV1_BRCM_D. From the associated README file:

“Check that the decoder handles the worse case of prediction bandwidth. Prediction bandwidth is at maximum due to largest number of motion vectors (in 1/4 pel position) per macroblock pair (32 as defined in standard). Non-integer position motion vectors require using 6-tap filter always.”

I’m not sure what all of that means. I just know that it takes a long time to decode on the FATE machines.