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

Thilo Borgmann thilo.borgmann
Tue Feb 16 00:01:09 CET 2010


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.

-Thilo



More information about the ffmpeg-devel mailing list