FFmpeg
psnr.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015 Ronald S. Bultje <rsbultje@gmail.com>
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #include "config.h"
22 
23 #include <stddef.h>
24 #include <stdint.h>
25 
26 #include "psnr.h"
27 
28 static uint64_t sse_line_8bit(const uint8_t *main_line, const uint8_t *ref_line, int outw)
29 {
30  int j;
31  unsigned m2 = 0;
32 
33  for (j = 0; j < outw; j++) {
34  unsigned error = main_line[j] - ref_line[j];
35 
36  m2 += error * error;
37  }
38 
39  return m2;
40 }
41 
42 static uint64_t sse_line_16bit(const uint8_t *_main_line, const uint8_t *_ref_line, int outw)
43 {
44  int j;
45  uint64_t m2 = 0;
46  const uint16_t *main_line = (const uint16_t *) _main_line;
47  const uint16_t *ref_line = (const uint16_t *) _ref_line;
48 
49  for (j = 0; j < outw; j++) {
50  unsigned error = main_line[j] - ref_line[j];
51 
52  m2 += error * error;
53  }
54 
55  return m2;
56 }
57 
58 void ff_psnr_init(PSNRDSPContext *dsp, int bpp)
59 {
60  dsp->sse_line = bpp > 8 ? sse_line_16bit : sse_line_8bit;
61 #if ARCH_X86
62  ff_psnr_init_x86(dsp, bpp);
63 #endif
64 }
error
static void error(const char *err)
Definition: target_bsf_fuzzer.c:32
ff_psnr_init
void ff_psnr_init(PSNRDSPContext *dsp, int bpp)
Definition: psnr.c:58
ff_psnr_init_x86
void ff_psnr_init_x86(PSNRDSPContext *dsp, int bpp)
Definition: vf_psnr_init.c:28
psnr.h
PSNRDSPContext
Definition: psnr.h:27
sse_line_8bit
static uint64_t sse_line_8bit(const uint8_t *main_line, const uint8_t *ref_line, int outw)
Definition: psnr.c:28
PSNRDSPContext::sse_line
uint64_t(* sse_line)(const uint8_t *buf, const uint8_t *ref, int w)
Definition: psnr.h:28
sse_line_16bit
static uint64_t sse_line_16bit(const uint8_t *_main_line, const uint8_t *_ref_line, int outw)
Definition: psnr.c:42