/* * 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; } } }