mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-13 21:01:14 +00:00
07c1dceae0
Original commit message from CVS: * gst/goom/filters.c: (zoomFilterNew), (calculatePXandPY), (setPixelRGB), (setPixelRGB_), (getPixelRGB), (getPixelRGB_), (zoomFilterSetResolution), (zoomFilterDestroy), (zoomFilterFastRGB), (pointFilter): * gst/goom/filters.h: * gst/goom/goom_core.c: (goom_init), (goom_set_resolution), (goom_update), (goom_close): * gst/goom/goom_core.h: * gst/goom/goom_tools.h: * gst/goom/graphic.c: * gst/goom/gstgoom.c: (gst_goom_class_init), (gst_goom_init), (gst_goom_dispose), (gst_goom_src_setcaps), (gst_goom_chain): * gst/goom/gstgoom.h: * gst/goom/lines.c: (goom_lines): * gst/goom/lines.h: Make goom reentrant by moving all important static variables into instance structures. (Fixes #329181)
107 lines
2.8 KiB
C
107 lines
2.8 KiB
C
/*
|
|
* lines.c
|
|
* iTunesXPlugIn
|
|
*
|
|
* Created by guillaum on Tue Aug 14 2001.
|
|
* Copyright (c) 2001 __CompanyName__. All rights reserved.
|
|
*
|
|
*/
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include "config.h"
|
|
#endif
|
|
|
|
#include "lines.h"
|
|
#include <math.h>
|
|
|
|
static inline unsigned char
|
|
lighten (unsigned char value, unsigned char power)
|
|
{
|
|
unsigned char i;
|
|
|
|
for (i = 0; i < power; i++)
|
|
value += (255 - value) / 5;
|
|
return value;
|
|
}
|
|
|
|
void
|
|
goom_lines (GoomData * goomdata, gint16 data[2][512], unsigned int ID,
|
|
unsigned int *p, guint32 power)
|
|
{
|
|
guint32 color1;
|
|
guint32 color2;
|
|
guint32 resolx = goomdata->resolx;
|
|
guint32 resoly = goomdata->resoly;
|
|
unsigned char *color = 1 + (unsigned char *) &color1;
|
|
|
|
switch (ID) {
|
|
case 0: /* Horizontal stereo lines */
|
|
{
|
|
color1 = 0x0000AA00;
|
|
color2 = 0x00AA0000;
|
|
break;
|
|
}
|
|
|
|
case 1: /* Stereo circles */
|
|
{
|
|
color1 = 0x00AA33DD;
|
|
color2 = 0x00AA33DD;
|
|
break;
|
|
}
|
|
}
|
|
*color = lighten (*color, power);
|
|
color++;
|
|
*color = lighten (*color, power);
|
|
color++;
|
|
*color = lighten (*color, power);
|
|
color = 1 + (unsigned char *) &color2;
|
|
*color = lighten (*color, power);
|
|
color++;
|
|
*color = lighten (*color, power);
|
|
color++;
|
|
*color = lighten (*color, power);
|
|
|
|
switch (ID) {
|
|
case 0: /* Horizontal stereo lines */
|
|
{
|
|
unsigned int i;
|
|
|
|
for (i = 0; i < 512; i++) {
|
|
guint32 plot;
|
|
|
|
plot = i * resolx / 512 + (resoly / 4 + data[0][i] / 1600) * resolx;
|
|
p[plot] = color1;
|
|
p[plot + 1] = color1;
|
|
plot = i * resolx / 512 + (resoly * 3 / 4 - data[1][i] / 1600) * resolx;
|
|
p[plot] = color2;
|
|
p[plot + 1] = color2;
|
|
}
|
|
break;
|
|
}
|
|
|
|
case 1: /* Stereo circles */
|
|
{
|
|
float z;
|
|
unsigned int monX = resolx / 2;
|
|
float monY = resoly / 4;
|
|
float monY2 = resoly / 2;
|
|
|
|
for (z = 0; z < 6.2832f; z += 1.0f / monY) {
|
|
/* float offset1 = 128+data[1][(unsigned int)(z*81.33f)])/200000; */
|
|
p[monX + (unsigned int) ((monY + ((float) resoly) * (128 +
|
|
data[1][(unsigned int) (z * 81.33f)]) / 200000) *
|
|
cos (z) + resolx * (unsigned int) (monY2 + (monY +
|
|
((float) resoly) * (128 +
|
|
data[1][(unsigned int) (z * 81.33f)]) / 400000) *
|
|
sin (z)))] = color1;
|
|
p[monX + (unsigned int) ((monY - ((float) resoly) * (128 +
|
|
data[0][(unsigned int) (z * 81.33f)]) / 200000) *
|
|
cos (z) + resolx * (unsigned int) (monY2 + (monY -
|
|
((float) resoly) * (128 +
|
|
data[0][(unsigned int) (z * 81.33f)]) / 400000) *
|
|
sin (z)))] = color2;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|