diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2011-12-07 13:01:01 -0500 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2012-01-03 13:15:23 -0500 |
commit | bb63475aec53e001ad84a24ed6e2a23ad1697fc8 (patch) | |
tree | 5e3578f194da5c70fd8b58e265d10c99fd900629 | |
parent | 149e1b0468ca8828fe198025c4662a957871bd02 (diff) | |
download | ffmpeg-bb63475aec53e001ad84a24ed6e2a23ad1697fc8.tar.gz |
alacenc: implement the 2-pass prediction type.
This isn't used by the reference encoder, but it is supported by the decoder.
-rw-r--r-- | libavcodec/alacenc.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/libavcodec/alacenc.c b/libavcodec/alacenc.c index e7977b3cf7..89d8e09795 100644 --- a/libavcodec/alacenc.c +++ b/libavcodec/alacenc.c @@ -348,6 +348,7 @@ static void alac_entropy_coder(AlacEncodeContext *s) static void write_compressed_frame(AlacEncodeContext *s) { int i, j; + int prediction_type = 0; if (s->avctx->channels == 2) alac_stereo_decorrelation(s); @@ -358,7 +359,7 @@ static void write_compressed_frame(AlacEncodeContext *s) calc_predictor_params(s, i); - put_bits(&s->pbctx, 4, 0); // prediction type : currently only type 0 has been RE'd + put_bits(&s->pbctx, 4, prediction_type); put_bits(&s->pbctx, 4, s->lpc[i].lpc_quant); put_bits(&s->pbctx, 3, s->rc.rice_modifier); @@ -373,6 +374,14 @@ static void write_compressed_frame(AlacEncodeContext *s) for (i = 0; i < s->avctx->channels; i++) { alac_linear_predictor(s, i); + + // TODO: determine when this will actually help. for now it's not used. + if (prediction_type == 15) { + // 2nd pass 1st order filter + for (j = s->avctx->frame_size - 1; j > 0; j--) + s->predictor_buf[j] -= s->predictor_buf[j - 1]; + } + alac_entropy_coder(s); } } |