[FFmpeg-devel] [PATCH] avcodec/vpx_rac: Adjust vpx_rac_is_end) threshold

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Mon Aug 29 18:29:03 EEST 2022


Michael Niedermayer:
> A threshold of 180 is needed and sufficient for the sample, twice this is used to
> cover potentially worse samples
> 
> fate/vp5 changes as the sample file is truncated and the damaged part is handled
> differently
> 
> Fixes: ticket #9754
> 
> Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> ---
>  libavcodec/vpx_rac.h | 2 +-
>  tests/ref/fate/vp5   | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/libavcodec/vpx_rac.h b/libavcodec/vpx_rac.h
> index b158cc0754..2f5486f501 100644
> --- a/libavcodec/vpx_rac.h
> +++ b/libavcodec/vpx_rac.h
> @@ -52,7 +52,7 @@ static av_always_inline int vpx_rac_is_end(VPXRangeCoder *c)
>  {
>      if (c->end <= c->buffer && c->bits >= 0)
>          c->end_reached ++;
> -    return c->end_reached > 10;
> +    return c->end_reached > 360;

Is the file from #9754 defective? Or is it our decoder that is
overcautious? Your commit message sounds as if it were the latter. Is it
guaranteed that is now enough for all spec-compliant samples? Does the
answer depend upon the codec? (vpx_rac_is_end() is shared between
several VPx codecs.); I presume you can't give any guarantees.

>  }
>  
>  static av_always_inline unsigned int vpx_rac_renorm(VPXRangeCoder *c)
> diff --git a/tests/ref/fate/vp5 b/tests/ref/fate/vp5
> index 09ebe62b25..2116fb9b81 100644
> --- a/tests/ref/fate/vp5
> +++ b/tests/ref/fate/vp5
> @@ -249,4 +249,4 @@
>  0,        243,        243,        1,   233472, 0x6f530ac6
>  0,        244,        244,        1,   233472, 0x94f7466c
>  0,        245,        245,        1,   233472, 0xa8c1d365
> -0,        246,        246,        1,   233472, 0x4f3ef38c
> +0,        246,        246,        1,   233472, 0xedcff050




More information about the ffmpeg-devel mailing list