[FFmpeg-devel] [PATCH] Limit Rice parameter for progressive decoding in ALS

Thilo Borgmann thilo.borgmann
Tue Feb 16 15:48:34 CET 2010


Am 16.02.10 00:01, schrieb Thilo Borgmann:
> Am 13.02.10 21:18, schrieb Thilo Borgmann:
>> Am 13.02.10 20:54, schrieb Justin Ruggles:
>>> 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;
>>
>> Well someone injected a little prudence about ?: into me... but ok,
>> revision 1 attached.
> 
> Going to apply soon if no one objects.

Applied, thanks!

-Thilo



More information about the ffmpeg-devel mailing list