00001 #ifndef SYNAETHESIA
00002 #define SYNAETHESIA
00003
00004 #include <visual.h>
00005 #include "polygon.h"
00006 #include "mainvisual.h"
00007 #include "config.h"
00008
00009 class QImage;
00010
00011 #define LogSize 10
00012 #define Brightness 150
00013 #define NumSamples (1<<LogSize)
00014
00015 #define Flame 0
00016 #define Wave 1
00017 #define Stars 2
00018
00019 class Synaesthesia : public VisualBase
00020 {
00021 public:
00022 Synaesthesia(void);
00023 virtual ~Synaesthesia();
00024
00025 void resize(const QSize &size);
00026 bool process(VisualNode *node);
00027 bool draw(QPainter *p, const QColor &back);
00028 void handleKeyPress(const QString &action) {(void) action;}
00029
00030 private:
00031 void setupPalette(void);
00032 void coreInit(void);
00033 int bitReverser(int i);
00034 void fft(double *x, double *y);
00035 void setStarSize(double lsize);
00036
00037 inline void addPixel(int x, int y, int br1, int br2);
00038 inline void addPixelFast(unsigned char *p, int br1, int br2);
00039 inline unsigned char getPixel(int x, int y, int where);
00040
00041 inline void fadePixelWave(int x, int y, int where, int step);
00042 void fadeWave(void);
00043 inline void fadePixelHeat(int x, int y, int where, int step);
00044 void fadeHeat(void);
00045 void fadeFade(void);
00046 void fade(void);
00047
00048 QSize m_size;
00049
00050 double m_cosTable[NumSamples];
00051 double m_negSinTable[NumSamples];
00052 int m_bitReverse[NumSamples];
00053 int m_scaleDown[256];
00054 int m_maxStarRadius;
00055 int m_fadeMode;
00056 bool m_pointsAreDiamonds;
00057 double m_brightnessTwiddler;
00058 double m_starSize;
00059
00060 int m_outWidth;
00061 int m_outHeight;
00062
00063 Bitmap<unsigned short> m_outputBmp, m_lastOutputBmp, m_lastLastOutputBmp;
00064 QImage *m_outputImage;
00065
00066 unsigned char m_palette[768];
00067 double m_fgRedSlider, m_fgGreenSlider, m_bgRedSlider, m_bgGreenSlider;
00068
00069 double m_energy_avg;
00070 };
00071
00072 #endif // SYNAETHESIA