[FFmpeg-devel] [PATCH] DNxHD/VC-3 encoder
Loren Merritt
lorenm
Fri Sep 7 17:17:49 CEST 2007
On Fri, 7 Sep 2007, Michael Niedermayer wrote:
> when people start using qsort you know theres something wrong in their
> encoder (or at least not optimal)
>
> so, lets first check if i understand the constraints
> * its possible to change qscale per macroblock and it doesnt cost anything
> * theres a fixed number of bits available for each frame (pre mpeg1 design)
>
> in that case the optimal solution (though not fastest) is to do a
> binary search over lambda (using the number of bits and the ones available
> to find the best lambda which results in a frame which is not too large)
>
> then for each such lambda, find the best qscale for each MB, again by
> binary search minimizing SSD + bits*lambda (that way we know the best
> qscales and how many bits the frame would need)
Your algorithm produces the same decisions as the one with qsort. I don't
know which is faster.
Consider the list of possible block encodings sorted by
delta_ssd/delta_bits. Optimizing for qps at any given lambda will produce
some prefix of that list. i.e. for any lambda, there is some
position in the list such that all preceding entries have ssd/bits
better than lambda, and all following entries have ssd/bits worse
than lambda. So instead of evaluating bits(lambda) as a black box and
searching for a specified values of bits, construct the function
lambda(bits) and evaluate it at the specified value of bits.
--Loren Merritt
More information about the ffmpeg-devel
mailing list