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

Paul B Mahol onemda at gmail.com
Mon Jul 13 00:04:32 CEST 2015


On 7/12/15, Paul B Mahol <onemda at gmail.com> wrote:
> 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.
>

lgtm


More information about the ffmpeg-devel mailing list