[FFmpeg-devel] [PATCH] VP8: faster deblock strength calculation

Ronald S. Bultje rsbultje
Fri Feb 4 13:51:44 CET 2011


Hi,

On Fri, Feb 4, 2011 at 1:49 AM, Jason Garrett-Glaser <jason at x264.com> wrote:
> Convert hev_thresh logic to a LUT, simplify mbedge_lim calculation.
> ---
> ?libavcodec/vp8.c | ? 29 +++++++++++++++--------------
> ?1 files changed, 15 insertions(+), 14 deletions(-)
>
> diff --git a/libavcodec/vp8.c b/libavcodec/vp8.c
> index 1db57e4..dce090f 100644
> --- a/libavcodec/vp8.c
> +++ b/libavcodec/vp8.c
> @@ -1505,23 +1505,24 @@ static av_always_inline void filter_mb(VP8Context *s, uint8_t *dst[3], VP8Filter
> ? ? int inner_filter = f->inner_filter;
> ? ? int linesize = s->linesize;
> ? ? int uvlinesize = s->uvlinesize;
> + ? ?static const uint8_t hev_thresh_lut[2][64] = {
> + ? ? ? ?{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
> + ? ? ? ? ?2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> + ? ? ? ? ?3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
> + ? ? ? ? ?3, 3, 3, 3 },
> + ? ? ? ?{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
> + ? ? ? ? ?1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
> + ? ? ? ? ?2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> + ? ? ? ? ?2, 2, 2, 2 }
> + ? ?};
>
> ? ? if (!filter_level)
> ? ? ? ? return;
>
> - ? ?mbedge_lim = 2*(filter_level+2) + inner_limit;
> - ? ? bedge_lim = 2* filter_level ? ?+ inner_limit;
> - ? ?hev_thresh = filter_level >= 15;
> + ? ? bedge_lim = 2*filter_level + inner_limit;
> + ? ?mbedge_lim = bedge_lim + 4;
>
> - ? ?if (s->keyframe) {
> - ? ? ? ?if (filter_level >= 40)
> - ? ? ? ? ? ?hev_thresh = 2;
> - ? ?} else {
> - ? ? ? ?if (filter_level >= 40)
> - ? ? ? ? ? ?hev_thresh = 3;
> - ? ? ? ?else if (filter_level >= 20)
> - ? ? ? ? ? ?hev_thresh = 2;
> - ? ?}
> + ? ?hev_thresh = hev_thresh_lut[s->keyframe][filter_level];
>
> ? ? if (mb_x) {
> ? ? ? ? s->vp8dsp.vp8_h_loop_filter16y(dst[0], ? ? linesize,
> @@ -1577,8 +1578,8 @@ static av_always_inline void filter_mb_simple(VP8Context *s, uint8_t *dst, VP8Fi
> ? ? if (!filter_level)
> ? ? ? ? return;
>
> - ? ?mbedge_lim = 2*(filter_level+2) + inner_limit;
> - ? ? bedge_lim = 2* filter_level ? ?+ inner_limit;
> + ? ? bedge_lim = 2*filter_level + inner_limit;
> + ? ?mbedge_lim = bedge_lim + 4;
>
> ? ? if (mb_x)
> ? ? ? ? s->vp8dsp.vp8_h_loop_filter_simple(dst, linesize, mbedge_lim);
> --
> 1.7.3.2.451.g1c2ab.dirty

OK.

Ronald



More information about the ffmpeg-devel mailing list