blob: 294afe84f5864aae0c75bb69f4b896b79efc5905 [file] [log] [blame]
Stefan Kost6eb6d5b2008-10-28 06:50:57 +00001/* Goom Project
2 * Copyright (C) <2003> iOS-Software
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
13 *
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
18 */
Bastien Noceraa7bc7482008-02-23 01:51:37 +000019#ifndef _PLUGIN_INFO_H
20#define _PLUGIN_INFO_H
21
22#include "goom_typedefs.h"
23
24#include "goom_config.h"
25
26#include "goom_graphic.h"
27#include "goom_config_param.h"
28#include "goom_visual_fx.h"
29#include "goom_filters.h"
30#include "goom_tools.h"
Bastien Noceraa7bc7482008-02-23 01:51:37 +000031
32typedef struct {
33 char drawIFS;
34 char drawPoints;
35 char drawTentacle;
36
37 char drawScope;
38 int farScope;
39
40 int rangemin;
41 int rangemax;
42} GoomState;
43
44#define STATES_MAX_NB 128
45
46/**
47 * Gives informations about the sound.
48 */
49struct _SOUND_INFO {
50
51 /* nota : a Goom is just a sound event... */
52
53 int timeSinceLastGoom; /* >= 0 */
54 float goomPower; /* power of the last Goom [0..1] */
55
56 int timeSinceLastBigGoom; /* >= 0 */
57
58 float volume; /* [0..1] */
59 short samples[2][512];
60
61 /* other "internal" datas for the sound_tester */
62 float goom_limit; /* auto-updated limit of goom_detection */
63 float bigGoomLimit;
64 float accelvar; /* acceleration of the sound - [0..1] */
65 float speedvar; /* speed of the sound - [0..100] */
66 int allTimesMax;
67 int totalgoom; /* number of goom since last reset
68 * (a reset every 64 cycles) */
69
70 float prov_max; /* accel max since last reset */
71
72 int cycle;
73
74 /* private */
75 PluginParam volume_p;
76 PluginParam speed_p;
77 PluginParam accel_p;
78 PluginParam goom_limit_p;
79 PluginParam goom_power_p;
80 PluginParam last_goom_p;
81 PluginParam last_biggoom_p;
82 PluginParam biggoom_speed_limit_p;
83 PluginParam biggoom_factor_p;
84
85 PluginParameters params; /* contains the previously defined parameters. */
86};
87
88
89/**
90 * Allows FXs to know the current state of the plugin.
91 */
92struct _PLUGIN_INFO {
93
94 /* public datas */
95
96 int nbParams;
97 PluginParameters *params;
98
99 /* private datas */
100
101 struct _SIZE_TYPE {
102 int width;
103 int height;
104 int size; /* == screen.height * screen.width. */
105 } screen;
106
107 SoundInfo sound;
108
109 int nbVisuals;
110 VisualFX **visuals; /* pointers on all the visual fx */
111
112 /** The known FX */
113 VisualFX convolve_fx;
114 VisualFX star_fx;
115 VisualFX zoomFilter_fx;
116 VisualFX tentacles_fx;
117 VisualFX ifs_fx;
118
119 /** image buffers */
120 guint32 *pixel;
121 guint32 *back;
122 Pixel *p1, *p2;
123 Pixel *conv;
124 Pixel *outputBuf;
125
126 /** state of goom */
127 guint32 cycle;
128 GoomState states[STATES_MAX_NB];
129 int statesNumber;
130 int statesRangeMax;
131
132 GoomState *curGState;
133
134 /** effet de ligne.. */
135 GMLine *gmline1;
136 GMLine *gmline2;
137
138 /** sinus table */
139 int sintable[0x10000];
140
141 /* INTERNALS */
142
143 /** goom_update internals.
144 * I took all static variables from goom_update and put them here.. for the moment.
145 */
146 struct {
147 int lockvar; /* pour empecher de nouveaux changements */
148 int goomvar; /* boucle des gooms */
149 int loopvar; /* mouvement des points */
150 int stop_lines;
151 int ifs_incr; /* dessiner l'ifs (0 = non: > = increment) */
152 int decay_ifs; /* disparition de l'ifs */
153 int recay_ifs; /* dedisparition de l'ifs */
154 int cyclesSinceLastChange; /* nombre de Cycle Depuis Dernier Changement */
155 int drawLinesDuration; /* duree de la transition entre afficher les lignes ou pas */
156 int lineMode; /* l'effet lineaire a dessiner */
157 float switchMultAmount; /* SWITCHMULT (29.0f/30.0f) */
158 int switchIncrAmount; /* 0x7f */
159 float switchMult; /* 1.0f */
160 int switchIncr; /* = SWITCHINCR; */
161 int stateSelectionRnd;
162 int stateSelectionBlocker;
163 int previousZoomSpeed;
Bastien Noceraa7bc7482008-02-23 01:51:37 +0000164 ZoomFilterData zoomFilterData;
165 } update;
166
167 struct {
Bastien Noceraa7bc7482008-02-23 01:51:37 +0000168 void (*draw_line) (Pixel *data, int x1, int y1, int x2, int y2, int col, int screenx, int screeny);
169 void (*zoom_filter) (int sizeX, int sizeY, Pixel *src, Pixel *dest, int *brutS, int *brutD, int buffratio, int precalCoef[16][16]);
170 } methods;
171
172 GoomRandom *gRandom;
Bastien Noceraa7bc7482008-02-23 01:51:37 +0000173};
174
175void plugin_info_init(PluginInfo *p, int nbVisual);
Jan Schmidt4e11c342008-04-22 00:18:52 +0000176void plugin_info_free(PluginInfo *p);
Bastien Noceraa7bc7482008-02-23 01:51:37 +0000177
178/* i = [0..p->nbVisual-1] */
179void plugin_info_add_visual(PluginInfo *p, int i, VisualFX *visual);
180
181#endif