As I said in the previous post, currently I don’t have any features or decoders to add to NihAV
(because Paul has not finished his work on Bink2 decoder yet) beside some encoders that nobody will use.
Thus I decided to work on something more advanced than VP6 that allows me to play with more advanced features (like EPZS motion estimation, per macroblock quantiser selection and such). For that I needed to pick some codec probably based on H.264 and there was not that much to pick from:
- ITU H.264—first and foremost, I don’t have a properly working decoder for it (yet?); second, the format is too complex so just thinking about writing all those SPSes, PPSes and various lists discourages me from even considering to write an encoder for it;
- RealVideo 3 or 4—tempting but that means I also need to write a RealMedia muxer and the format lacks dquant (in theory it’s supported, in practice it’s never happened). Maybe one day I’ll make my own NihAV-Really? encoder for RV3+Cooker but not today;
- Sorenson SVQ3—same problems essentially;
- VP8—Mike has done it over a decade ago;
- VX—this is a custom game codec which is simplified (even quantiser is rather implicit).
The rough roadmap is the following:
- make intra-only encoder that encodes picture somehow;
- improve it to select the best whole macroblock prediction mode;
- add 4×4 prediction mode and make it select the best mode;
- add inter-frame support along with motion compensation;
- add EPZS-based motion estimation;
- introduce rough motion search for group of frames to determine good golden frame candidate and the macroblocks that should be coded with higher quality;
- actually code those macroblocks with higher quality using MB features;
- use trellis-based quantiser search for improved coding of frames;
- speed it up by using various heuristics instead of brute force search for coding parameters.
This should take some time…