31 #define accumulator int
33 #define pixel uint16_t
34 #define accumulator int64_t
37 #define fn3(a,b) a##_##b
38 #define fn2(a,b) fn3(a,b)
39 #define fn(a) fn2(a, DEPTH)
49 #define DIFF(a, as, b, bs) ((t) = ((*(a) - (b)[bs]) << 2) + (a)[(as) << 1] - (b)[-(bs)], (t) * (t))
57 double bdiff, tdiff, pdiff;
60 mode =
new->interlaced_frame ?
new->top_field_first ?
63 mode =
new->interlaced_frame ?
new->top_field_first ?
68 bdiff = pdiff = tdiff = 65536.0;
71 const int ns =
new->linesize[0] /
sizeof(
pixel);
72 const int os = old->linesize[0] /
sizeof(
pixel);
75 const int h =
new->height;
76 const int w =
new->width;
83 bdiff = pdiff = tdiff = 0.0;
88 pdif = tdif = bdif = 0;
93 for (rend = nptr +
w; nptr < rend; nptr++, optr++) {
95 tdif +=
DIFF(nptr,
ns, optr, os);
98 for (rend = nptr +
w; nptr < rend; nptr++, optr++) {
100 tdif +=
DIFF(optr, os, nptr,
ns);
106 for (rend = nptr +
w; nptr < rend; nptr++, optr++) {
108 bdif +=
DIFF(optr, os, nptr,
ns);
111 for (rend = nptr +
w; nptr < rend; nptr++, optr++) {
113 bdif +=
DIFF(nptr,
ns, optr, os);
119 for (rend = nptr +
w; nptr < rend; nptr++, optr++) {
120 tdif +=
DIFF(nptr,
ns, optr, os);
121 bdif +=
DIFF(optr, os, nptr,
ns);
124 for (rend = nptr +
w; nptr < rend; nptr++, optr++) {
125 bdif +=
DIFF(nptr,
ns, optr, os);
126 tdif +=
DIFF(optr, os, nptr,
ns);
132 for (rend = nptr +
w; nptr < rend; nptr++, optr++) {
134 tdif +=
DIFF(nptr,
ns, optr, os);
135 bdif +=
DIFF(optr, os, nptr,
ns);
138 for (rend = nptr +
w; nptr < rend; nptr++, optr++) {
140 bdif +=
DIFF(nptr,
ns, optr, os);
141 tdif +=
DIFF(optr, os, nptr,
ns);
149 pdiff += (double)pdif;
150 tdiff += (double)tdif;
151 bdiff += (double)bdif;
157 scale = 1.0 / (
w * (
h - 3)) *
factor;
170 if (bdiff < pdiff && bdiff < tdiff) {
172 }
else if (tdiff < pdiff && tdiff < bdiff) {
181 tdiff, bdiff, pdiff);