The first step in developing a new video codec is building the tools that enable deep inspection and visualization of codec state. These tools provide essential scaffholding for diagnosing visual artifacts and efficiency anomalies which can otherwise be difficult to detect and root cause. During the development of Cairo I built four tools: analyze, convert, inspect, and player.
Convert and player are minimalist programs that demonstrate proper usage of the evx interface. These were created shortly after the development of Cairo as part of a tutorial series, and to allow users to quickly test out Cairo with their existing media. As the name suggests, convert will convert most standard video files (thanks ffmpeg!) to a simple evx file format. Player is a simple video player for these evx files.
Inspect allows you to step through the execution of the encoder and visually examine its internal state. Inspect can render a number of combined tables including the prediction state, block table, quantization table, per-block image variance, sub-pixel motion table, and more. Inspect can be very useful in tracking down hard to find bugs.
Lastly, analyze is a robust visualization tool that enables the codec developer to deeply inspect and step through the execution of their pipeline. This tool relies on functionality in convert, inspect, and player, but adds significantly more analysis tools and debug helpers. During the development of Cairo I relied heavily on this tool to measure performance and efficiency, detect and root cause visual artifacts, and assess the overall impact of a change. For more information about this tool, check outits project page.