[FFmpeg-devel] [PATCH] ALAC Encoder

Michael Niedermayer michaelni
Fri Aug 22 03:12:23 CEST 2008


On Thu, Aug 21, 2008 at 08:45:01PM -0400, Justin Ruggles wrote:
> Hi,
> 
> Michael Niedermayer wrote:
> > anyway, some further ideas:
> > * as ALAC dynamically adapts the LPC coeffs its not optimal to calculate
> >   the best ones for the whole block with equal weighting for each sample.
> >   for example if i simply just calculate them based on the first 1/4 of
> >   the block, compression (and speed) improves.
> >   That surely is an area that should be investigated, maybe using some
> >   asymetric and at the right side exponentially decaying window instead
> >   of the welch window ...
> 
> That is really interesting.  Did this happen with a variety of samples
> with different types of audio?  I have never tried an asymmetric window.
>  I did test various symmetric windows, and welch had a good overall
> speed/compression trade-off.  I will be glad to run some tests.

I did not really test asymetric windows, i just used the following with a
single sample ...

Index: alacenc.c
===================================================================
--- alacenc.c	(revision 14883)
+++ alacenc.c	(working copy)
@@ -130,7 +130,7 @@
     int shift[MAX_LPC_ORDER];
     int opt_order;
 
-    opt_order = ff_lpc_calc_coefs(&s->dspctx, s->sample_buf[ch], s->avctx->frame_size, s->min_prediction_order, s->max_prediction_order,
+    opt_order = ff_lpc_calc_coefs(&s->dspctx, s->sample_buf[ch], s->avctx->frame_size/4, s->min_prediction_order, s->max_prediction_order,
                                    ALAC_MAX_LPC_PRECISION, coefs, shift, 1, ORDER_METHOD_EST, ALAC_MAX_LPC_SHIFT, 1);
 
     s->lpc[ch].lpc_order = opt_order;


[...]

> > * more decorrelation types could be tried at higher compression_level
> 
> Do you mean testing for more intervals between left, mid, and right?

yes, exactly


> That could be interesting.  I tried something to calculate the left
> weight on a scale of 0 to 1, but it was not as good as just testing the
> 4 types and comparing the sum of residual.  Maybe something better could
> be devised instead of (or in addition to) adding more types.

i think we could first try a really large number of points between
left, mid, and right, this would give us a reference point so we would
know what is achievable if we find the best point.
Then we could try some heuristics to see how close they get to that optimum


[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Observe your enemies, for they first find out your faults. -- Antisthenes
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20080822/17b87854/attachment.pgp>



More information about the ffmpeg-devel mailing list