[FFmpeg-devel] [PATCH] [WIP] avcodec/lpc: quantize LPC coefficients by multidimensional search instead of independant scalar quantization
Michael Niedermayer
michaelni at gmx.at
Tue May 19 11:36:34 CEST 2015
On Mon, May 18, 2015 at 09:21:30PM -0400, Ronald S. Bultje wrote:
> Hi,
>
> On Mon, May 18, 2015 at 7:53 AM, Michael Niedermayer <michaelni at gmx.at>
> wrote:
>
> > This improves compression but only by a very small bit
> > possibly it could be improved by exactly calculating the number of bits
> > that would be needed
> >
> > Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> > ---
> > libavcodec/lpc.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++--
> > 1 file changed, 47 insertions(+), 2 deletions(-)
> >
> > diff --git a/libavcodec/lpc.c b/libavcodec/lpc.c
> > index deb02e7..930e526 100644
> > --- a/libavcodec/lpc.c
> > +++ b/libavcodec/lpc.c
> > @@ -135,6 +135,51 @@ static void quantize_lpc_coefs(double *lpc_in, int
> > order, int precision,
> > *shift = sh;
> > }
> >
> > +static void quantize_lpc_coefs2(double *lpc_in, int order, int precision,
> > + int32_t *lpc_out, int *shift, int
> > max_shift,
> > + int zero_shift, const int32_t *samples,
> > int len)
> > +{
> > + int allsteps = 1;
> > + int i, j, step, improved;
> > + int64_t best_score = INT64_MAX;
> > + int32_t qmax;
> > +
> > + qmax = (1 << (precision - 1)) - 1;
> > +
> > + quantize_lpc_coefs(lpc_in, order, precision, lpc_out, shift,
> > max_shift, zero_shift);
> > +
> > + for (i=0; i<order; i++)
> > + allsteps *= 3;
> > +
> > + do {
> > + improved = 0;
> > + for (step = 0; step < allsteps; step++) {
> > + int tmp = step;
> > + int32_t lpc_try[MAX_LPC_ORDER];
> > + int64_t score = 0;
> > + for (i=0; i<order; i++) {
> > + lpc_try[i] = av_clip(lpc_out[i] + ((tmp + 1) % 3) - 1,
> > -qmax, qmax);
> > + tmp /= 3;
> > + }
> > + for (j=order; j<len; j++) {
> > + int64_t v = 0;
> > + for (i=0; i<order; i++) {
> > + v += samples[j - 1 - i] * (int64_t)lpc_try[i];
> > + }
> > + v >>= *shift;
> > + v -= samples[j];
> > + score += FFABS(v);
> > + }
> > + if (score < best_score) {
> > + best_score = score;
> > + memcpy(lpc_out, lpc_try, sizeof(*lpc_out) * order);
> > +// improved=1;
> > + }
> > +// av_log(0,0, "score %Ld\n", best_score);
> > + }
> > + } while(improved);
> >
>
> Is it intentional that improved is read-only?
it didnt improve compression when enabled but made the code even
slower
next thing to try would likely be to use a more accurate scoring
than sum of abs diff
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
If you think the mosad wants you dead since a long time then you are either
wrong or dead since a long time.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20150519/9cc267ed/attachment.asc>
More information about the ffmpeg-devel
mailing list