[FFmpeg-devel] New to the list

Jason Garrett-Glaser darkshikari
Mon Sep 22 23:32:59 CEST 2008


On Mon, Sep 22, 2008 at 1:36 PM, Stefan Gehrer <stefan.gehrer at gmx.de> wrote:
> Jason Garrett-Glaser wrote:
>> 5.  Port any number of algorithmic encoding improvements pioneered by
>> x264 into libavcodec to improve the encoding of older formats.
>
> This made me curious, could you elaborate or point to a source
> what these improvements are? I saw you blogging about Psy-RDO,
> any other big topics?

1.  A useful adaptive quantization method (the current ones in lavc
are, last I checked, not just bad but actually broken to some extent).
 This should be trivial to port; I literally ported it to Xvid in less
than 20 minutes without any prior knowledge of the Xvid code.  Its
design wasn't ideal, but at least it worked.

2.  The VBV ratecontrol improvements: row-based ratecontrol for more
strict VBV compliance.  This is more complicated, especially with
frame-based threading like astrange is adding.  Its probably much more
application-specific, but the overall concept is the same.

3.  Viterbi-based b-adapt algorithm (--b-adapt 2 in x264).
Considerably better, AFAIK, than the current b-strategy 2 in lavc; it
should be *absolutely* optimal once ported, since b-strategy 2 already
uses RD, so it only needs a better choice of which combinations of
frames and paths to try.  The code itself is very portable and I've
already let others use it under LGPL; afaik caldo is using a
simplification of it in his MLP encoder to decide header locations.

4.  Motion estimation improvements: x264 has Sequential Elimination
(ESA/SEA) and TESA, two algorithms which have no equivalent in lavc.
-me full is far too slow; sequential elimination is mathematically
equivalent but about 7 times faster when using -cmp sad.

5.  Psy-RD as you mentioned.

6.  All other non-H.264-specific algorithms around x264 that aren't
used in lavc--I'm not sure that all these aren't but to list potential
candidates:
---subme7's hexagonal subpel-RD motion search
---bidirectional MV refinement for B-frames
---As an experimental platform, x264's RDRC patch could be ported
(absolute RD-optimal ratecontrol).  Its very slow, but would probably
be much easier to write in lavc than it was in x264, because lavc
already easily handles cases of initializing encoder instances within
the encoder (for b-strategy 2).
---There's probably more, but I can't think of any off the top of my head.

Dark Shikari




More information about the ffmpeg-devel mailing list