[FFmpeg-devel] [PATCH] Limit Rice parameter for progressive decoding in ALS
Justin Ruggles
justin.ruggles
Sat Feb 13 20:54:54 CET 2010
Thilo Borgmann wrote:
> Hi,
>
> as in $subject, the reference encoder limits the Rice parameter during
> progressively coding the first few samples of a random access block.
>
> Yet another "feature" not specified in 14496-3...
Fun. Nice catch.
> Regards,
> Thilo
>
>
> Index: libavcodec/alsdec.c
> ===================================================================
> --- libavcodec/alsdec.c (Revision 21799)
> +++ libavcodec/alsdec.c (Arbeitskopie)
> @@ -192,6 +192,7 @@
> unsigned int frame_id; ///< the frame ID / number of the current frame
> unsigned int js_switch; ///< if true, joint-stereo decoding is enforced
> unsigned int num_blocks; ///< number of blocks used in the current frame
> + unsigned int s_max; ///< maximum Rice parameter allowed in entropy coding
> uint8_t *bgmc_lut; ///< pointer at lookup tables used for BGMC
> unsigned int *bgmc_lut_status; ///< pointer at lookup table status flags used for BGMC
> int ltp_lag_length; ///< number of bits used for ltp lag value
> @@ -720,9 +721,9 @@
> if (opt_order)
> bd->raw_samples[0] = decode_rice(gb, avctx->bits_per_raw_sample - 4);
> if (opt_order > 1)
> - bd->raw_samples[1] = decode_rice(gb, s[0] + 3);
> + bd->raw_samples[1] = decode_rice(gb, FFMIN(s[0] + 3, ctx->s_max));
> if (opt_order > 2)
> - bd->raw_samples[2] = decode_rice(gb, s[0] + 1);
> + bd->raw_samples[2] = decode_rice(gb, FFMIN(s[0] + 1, ctx->s_max));
>
> start = FFMIN(opt_order, 3);
> }
> @@ -1508,6 +1509,11 @@
> avctx->bits_per_raw_sample = (sconf->resolution + 1) * 8;
> }
>
> + // set maximum Rice parameter for progressive decoding based on resolution
> + // This is not specified in 14496-3 but actually done by the reference
> + // codec RM22 revision 2.
> + ctx->s_max = (16 << (sconf->resolution > 1)) - 1;
> +
It seems simpler to me to just do:
ctx->s_max = sconf->resolution > 1 ? 31 : 15;
-Justin
More information about the ffmpeg-devel
mailing list