[FFmpeg-devel] [PATCH 3/4] vf_ssim: remove another obscure double loop.

Paul B Mahol onemda at gmail.com
Sun Jul 12 12:58:30 CEST 2015


Dana 12. 7. 2015. 01:57 osoba "Ronald S. Bultje" <rsbultje at gmail.com>
napisala je:
>
> ---
>  libavfilter/vf_ssim.c | 18 ++++++++----------
>  1 file changed, 8 insertions(+), 10 deletions(-)
>
> diff --git a/libavfilter/vf_ssim.c b/libavfilter/vf_ssim.c
> index b1c3368..f7a259e 100644
> --- a/libavfilter/vf_ssim.c
> +++ b/libavfilter/vf_ssim.c
> @@ -85,13 +85,13 @@ static void set_meta(AVDictionary **metadata, const
char *key, char comp, float
>      }
>  }
>
> -static void ssim_4x4x2_core(const uint8_t *main, int main_stride,
> -                            const uint8_t *ref, int ref_stride,
> -                            int sums[2][4])
> +static void ssim_4x4xn(const uint8_t *main, int main_stride,
> +                       const uint8_t *ref, int ref_stride,
> +                       int (*sums)[4], int width)
>  {
>      int x, y, z;
>
> -    for (z = 0; z < 2; z++) {
> +    for (z = 0; z < width; z++) {
>          uint32_t s1 = 0, s2 = 0, ss = 0, s12 = 0;
>
>          for (y = 0; y < 4; y++) {
> @@ -149,8 +149,7 @@ static float ssim_plane(uint8_t *main, int
main_stride,
>                          uint8_t *ref, int ref_stride,
>                          int width, int height, void *temp)
>  {
> -    int z = 0;
> -    int x, y;
> +    int z = 0, y;
>      float ssim = 0.0;
>      int (*sum0)[4] = temp;
>      int (*sum1)[4] = sum0 + (width >> 2) + 3;
> @@ -161,10 +160,9 @@ static float ssim_plane(uint8_t *main, int
main_stride,
>      for (y = 1; y < height; y++) {
>          for (; z <= y; z++) {
>              FFSWAP(void*, sum0, sum1);
> -            for (x = 0; x < width; x+=2)
> -                ssim_4x4x2_core(&main[4 * (x + z * main_stride)],
main_stride,
> -                                &ref[4 * (x + z * ref_stride)],
ref_stride,
> -                                &sum0[x]);
> +            ssim_4x4xn(&main[4 * z * main_stride], main_stride,
> +                       &ref[4 * z * ref_stride], ref_stride,
> +                       sum0, width);
>          }
>
>          ssim += ssim_endn(sum0, sum1, width - 1);
> --
> 2.1.2
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Ok if results are same and pure C speed is not slower.


More information about the ffmpeg-devel mailing list