Starting work on VP6 encoder

It is no secret (not even to me) that I suck at writing encoders. But with NihAV being developed exactly for trying new things and concepts, why not go ahead and try writing an encoder? It is not for having an encoder per se but rather a way to learn how things work (the best way to learn things is to try them yourself after all).

There are several reasons why I picked VP6:

  • it is complex enough to have different concept of encoding to try on it;
  • in the same time it’s not that complex (just DCT, MC, bool coder and no B-frames, complex block partitioning or complex context-adaptive coding);
  • there’s no opensource encoders for it;
  • there’s a decoder for it in NihAV already;
  • this is not a toy format so it may be of some use for me later.

Of course I’m aware of other attempts to bring us an opensource VP6 encoder and that they all failed, but nothing prevents me from failing at it myself and documenting my path so others might fail at it faster and better.

Speaking of documenting, here’s a roadmap of things I want to play with (or played with already) and report how it went:

  1. DCT;
  2. bool coder;
  3. simple intraframe coding;
  4. motion estimation (including fast search and subpixel precision);
  5. rate distortion optimisation;
  6. rate control.

Hopefully the post about DCT will come tomorrow.

P.S. Why I declare this in public? So that I won’t chicken out immediately.

4 Responses to “Starting work on VP6 encoder”

  1. Peter says:

    7. interlace encoding

    But seriously, this is a good choice of codec.

  2. Kostya says:

    The fact that it supports interlacing makes it not so good codec. But there are much much much worse choices (like MPEG-4 ASP or H.263 with all its extensions).

  3. Jonathan Wilson says:

    Nice, hopefully this can lead to something that can encode videos for the many EA games that use VP6 video.

  4. Kostya says:

    Might be, I heard Red Alert modding community would appreciate that. But don’t set your hopes high.