On Mon, Jan 14, 2019 at 9:48 PM Peter Ross <pr...@xvid.org> wrote:
>
> ---
>  libavcodec/vp3dsp.c | 28 ++++++++++++++++++++--------
>  libavcodec/vp3dsp.h |  5 +++++
>  2 files changed, 25 insertions(+), 8 deletions(-)
>
> diff --git a/libavcodec/vp3dsp.c b/libavcodec/vp3dsp.c
> index 4e08ee0b8f..de0130a9cf 100644
> --- a/libavcodec/vp3dsp.c
> +++ b/libavcodec/vp3dsp.c
> @@ -228,14 +228,14 @@ static void vp3_idct_dc_add_c(uint8_t *dest /* align 8 
> */, ptrdiff_t stride,
>      block[0] = 0;
>  }
>
> -static void vp3_v_loop_filter_c(uint8_t *first_pixel, ptrdiff_t stride,
> -                                int *bounding_values)
> +static av_always_inline void vp3_v_loop_filter_c(uint8_t *first_pixel, 
> ptrdiff_t stride,
> +                                                 int *bounding_values, int 
> count)
>  {
>      unsigned char *end;
>      int filter_value;
>      const ptrdiff_t nstride = -stride;
>
> -    for (end = first_pixel + 8; first_pixel < end; first_pixel++) {
> +    for (end = first_pixel + count; first_pixel < end; first_pixel++) {
>          filter_value = (first_pixel[2 * nstride] - first_pixel[stride]) +
>                         (first_pixel[0] - first_pixel[nstride]) * 3;
>          filter_value = bounding_values[(filter_value + 4) >> 3];
> @@ -245,13 +245,13 @@ static void vp3_v_loop_filter_c(uint8_t *first_pixel, 
> ptrdiff_t stride,
>      }
>  }
>
> -static void vp3_h_loop_filter_c(uint8_t *first_pixel, ptrdiff_t stride,
> -                                int *bounding_values)
> +static av_always_inline void vp3_h_loop_filter_c(uint8_t *first_pixel, 
> ptrdiff_t stride,
> +                                                 int *bounding_values, int 
> count)
>  {
>      unsigned char *end;
>      int filter_value;
>
> -    for (end = first_pixel + 8 * stride; first_pixel != end; first_pixel += 
> stride) {
> +    for (end = first_pixel + count * stride; first_pixel != end; first_pixel 
> += stride) {
>          filter_value = (first_pixel[-2] - first_pixel[1]) +
>                         (first_pixel[ 0] - first_pixel[-1]) * 3;
>          filter_value = bounding_values[(filter_value + 4) >> 3];
> @@ -261,6 +261,18 @@ static void vp3_h_loop_filter_c(uint8_t *first_pixel, 
> ptrdiff_t stride,
>      }
>  }
>
> +#define LOOP_FILTER(prefix, suffix, dim, count) \
> +void prefix##_##dim##_loop_filter_##count##suffix(uint8_t *first_pixel, 
> ptrdiff_t stride, \
> +                                int *bounding_values) \
> +{ \
> +    vp3_##dim##_loop_filter_c(first_pixel, stride, bounding_values, count); \
> +}
> +
> +static LOOP_FILTER(vp3,_c, v, 8)
> +static LOOP_FILTER(vp3,_c, h, 8)
> +LOOP_FILTER(ff_vp3dsp, , v, 12)
> +LOOP_FILTER(ff_vp3dsp, , h, 12)
> +
>  static void put_no_rnd_pixels_l2(uint8_t *dst, const uint8_t *src1,
>                                   const uint8_t *src2, ptrdiff_t stride, int 
> h)
>  {
> @@ -285,8 +297,8 @@ av_cold void ff_vp3dsp_init(VP3DSPContext *c, int flags)
>      c->idct_put      = vp3_idct_put_c;
>      c->idct_add      = vp3_idct_add_c;
>      c->idct_dc_add   = vp3_idct_dc_add_c;
> -    c->v_loop_filter = vp3_v_loop_filter_c;
> -    c->h_loop_filter = vp3_h_loop_filter_c;
> +    c->v_loop_filter = vp3_v_loop_filter_8_c;
> +    c->h_loop_filter = vp3_h_loop_filter_8_c;
>
>      if (ARCH_ARM)
>          ff_vp3dsp_init_arm(c, flags);
> diff --git a/libavcodec/vp3dsp.h b/libavcodec/vp3dsp.h
> index f55a7f834f..30a76100d9 100644
> --- a/libavcodec/vp3dsp.h
> +++ b/libavcodec/vp3dsp.h
> @@ -43,8 +43,13 @@ typedef struct VP3DSPContext {
>      void (*idct_dc_add)(uint8_t *dest, ptrdiff_t stride, int16_t *block);
>      void (*v_loop_filter)(uint8_t *src, ptrdiff_t stride, int 
> *bounding_values);
>      void (*h_loop_filter)(uint8_t *src, ptrdiff_t stride, int 
> *bounding_values);
> +    void (*v_loop_filter_12)(uint8_t *src, ptrdiff_t stride, int 
> *bounding_values);
> +    void (*h_loop_filter_12)(uint8_t *src, ptrdiff_t stride, int 
> *bounding_values);
>  } VP3DSPContext;
>
> +void ff_vp3dsp_v_loop_filter_12(uint8_t *first_pixel, ptrdiff_t stride, int 
> *bounding_values);
> +void ff_vp3dsp_h_loop_filter_12(uint8_t *first_pixel, ptrdiff_t stride, int 
> *bounding_values);
> +

It seems weird to have DSP member methods for the 12 pixel loop
filter, but then never assign or use them. Is that a remnant from an
earlier approach?
For consistency, it would seem the most logical to add the new loop
filter implementation to the DSP context as well, just like the old
one. Or at the very least not introduce method variables there that
remain NULL and unused.

- Hendrik
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to