17 #include <QCoreApplication>
45 #define sBOUND(x) ((x) > 255 ? 255 : (x))
46 #define sPEAKIFY(x) int(sBOUND((x) - (x)*(255-(x))/255/2))
47 #define sMAX(x,y) ((x) > (y) ? (x) : (y))
52 double scale = (fgRed + fgGreen + fgBlue) / 2.0;
61 scale = (bgRed + bgGreen + bgBlue) / 2.0;
66 for (
int i = 0; i < 256; i++) {
73 double red = b * bgRed * 16 + f * fgRed * 16;
74 double green = b * bgGreen * 16 + f * fgGreen * 16;
75 double blue = b * bgBlue * 16 + f * fgBlue * 16;
78 for (
int j = 0; j < 5; j++)
86 if (red > 255) { excess += red - 255; red = 255; }
87 if (green > 255) { excess += green - 255; green = 255; }
88 if (blue > 255) { excess += blue - 255; blue = 255; }
91 double scale2 = (0.5 + (red + green + blue) / 768.0) / 1.5;
121 LOG(VB_GENERAL, LOG_ERR,
122 "outputImage in Synaesthesia::resize() is NULL");
126 for (
int i = 0; i < 256; i++)
131 surface = SDL_SetVideoMode(size.width(), size.height(), 8, 0);
135 LOG(VB_GENERAL, LOG_ERR,
"Couldn't get SDL surface");
139 SDL_Color sdlPalette[256];
141 for (
int i = 0; i < 256; i++)
148 SDL_SetColors(surface, sdlPalette, 0, 256);
155 for (
int j = 0; j <
LogSize; j++)
157 sum = (i & 1) + sum * 2;
167 for (
int twoToTheK = 1; twoToTheK <
NumSamples; twoToTheK *= 2)
171 for (
int j = 0; j < n2; j++)
178 double xt = x[i] - x[l];
179 x[i] = (x[i] + x[l]);
180 double yt = y[i] - y[l];
181 y[i] = (y[i] + y[l]);
182 x[l] = xt * c - yt * s;
183 y[l] = xt * s + yt * c;
196 factor = int(exp(
log(fadeModeFudge) / (lsize * 8.0)) * 255);
200 for (
int i = 0; i < 256; i++)
218 #define output ((unsigned char*)m_outputBmp.data)
219 #define lastOutput ((unsigned char*)m_lastOutputBmp.data)
220 #define lastLastOutput ((unsigned char*)m_lastLastOutputBmp.data)
228 if (
p[0] + br1 < 255)
232 if (
p[1] + br2 < 255)
240 if (
p[0] + br1 < 255)
244 if (
p[1] + br2 < 255)
260 auto *ptr = (uint32_t *)
output;
266 *(ptr++) = x - ((x & (uintptr_t)0xf0f0f0f0) >> 4) -
267 ((x & (uintptr_t)0xe0e0e0e0) >> 5);
278 short j = short((
int(
getPixel(x - 1, y, where - 2)) +
279 int(
getPixel(x + 1, y, where + 2)) +
280 int(
getPixel(x, y - 1, where - step)) +
281 int(
getPixel(x, y + 1, where + step))) >> 2) +
292 else if (j & (255 * 256))
325 y <
m_outHeight - 1; y++, start += step, end += step)
344 else if (j2 & (255*256))
355 short j = short((
int(
getPixel(x - 1, y, where - 2)) +
356 int(
getPixel(x + 1, y, where + 2)) +
357 int(
getPixel(x, y - 1, where - step)) +
358 int(
getPixel(x, y + 1, where + step))) >> 2) +
368 else if (j & (255 * 256))
392 y++, i += step, j += step)
401 y <
m_outHeight - 1; y++, start += step, end += step)
419 else if (j2 & (255*256))
458 for (
int i = 0; i < numSamps; i++)
467 fft(x.data(), y.data());
479 a[i] = sqrt(aa = (
x1 +
x2) * (
x1 +
x2) + (y1 - y2) * (y1 - y2));
480 b[i] = sqrt(bb = (
x1 -
x2) * (
x1 -
x2) + (y2 + y2) * (y1 + y2));
483 clarity[i] = (int)(((
x1 +
x2) * (
x1 -
x2) + (y1 + y2) * (y1 - y2)) /
491 energy += (aa + bb) * i * i;
500 double brightFactor2 = (brightFactor / 65536.0 /
NumSamples) *
509 if (a[i] > 0 || b[i] > 0)
511 int h = (int)(b[i] *
m_outWidth / (a[i] + b[i]));
512 int br = (int)((a[i] + b[i]) * i * brightFactor2);
513 int br1 = br * (clarity[i] + 128) >> 8;
514 int br2 = br * (128 - clarity[i]) >> 8;
515 if (br1 < 0) br1 = 0;
else if (br1 > 255) br1 = 255;
516 if (br2 < 0) br2 = 0;
else if (br2 > 255) br2 = 255;
527 for(
int j = 1; br1 > 0 || br2 > 0;
530 for (
int k = 0; k < j; k++)
532 addPixel(px - j + k,py - k, br1, br2);
533 addPixel(px + k, py - j + k, br1, br2);
534 addPixel(px + j - k, py + k, br1, br2);
535 addPixel(px - k, py + j - k, br1, br2);
546 for(
int j = 1; br1 > 0 || br2 > 0;
558 unsigned char *
p1 =
p;
559 unsigned char *
p2 =
p;
560 unsigned char *p3 =
p;
561 unsigned char *p4 =
p;
563 for (; br1 > 0 || br2 > 0;
590 auto *ptrOutput = (uint32_t *)
output;
601 unsigned int const r1 = *(ptrOutput++);
602 unsigned int const r2 = *(ptrOutput++);
604 unsigned int const v = ((r1 & 0x000000f0UL) >> 4) |
605 ((r1 & 0x0000f000UL) >> 8) |
606 ((r1 & 0x00f00000UL) >> 12) |
607 ((r1 & 0xf0000000UL) >> 16);
609 *(ptrTop++) = v | (((r2 & 0x000000f0UL) << 12) |
610 ((r2 & 0x0000f000UL) << 8) |
611 ((r2 & 0x00f00000UL) << 4) |
612 ((r2 & 0xf0000000UL)));
614 *(ptrBot++) = v | (((r2 & 0x000000f0UL) << 12) |
615 ((r2 & 0x0000f000UL) << 8) |
616 ((r2 & 0x00f00000UL) << 4) |
617 ((r2 & 0xf0000000UL)));
629 const QString &
name(
void)
const override
631 static QString s_name = QCoreApplication::translate(
"Visualizers",