00001 #ifndef DBX_H
00002 #define DBX_H
00003
00004
00005
00006 #include "bchash.inc"
00007 #include "guicast.h"
00008 #include "mutex.h"
00009 #include "pluginaclient.h"
00010 #include "vframe.inc"
00011
00012 class DBXEffect;
00013
00014
00015
00016
00017
00018 class DBXSize : public BC_TextBox
00019 {
00020 public:
00021 DBXSize(DBXEffect *plugin, int x, int y);
00022 int handle_events();
00023 DBXEffect *plugin;
00024 };
00025
00026
00027 class DBXGain : public BC_TextBox
00028 {
00029 public:
00030 DBXGain(DBXEffect *plugin, int x, int y);
00031 int handle_events();
00032 DBXEffect *plugin;
00033 };
00034
00035
00036 class DBXWindow : public BC_Window
00037 {
00038 public:
00039 DBXWindow(DBXEffect *plugin, int x, int y);
00040 void create_objects();
00041 void update();
00042 void update_textboxes();
00043 void update_canvas();
00044 int close_event();
00045 void draw_scales();
00046
00047
00048 DBXCanvas *canvas;
00049 DBXPreview *preview;
00050 DBXReaction *reaction;
00051 DBXClear *clear;
00052 DBXX *x_text;
00053 DBXY *y_text;
00054 DBXTrigger *trigger;
00055 DBXEffect *plugin;
00056 };
00057
00058 class DBXThread : public Thread
00059 {
00060 public:
00061 DBXThread(DBXEffect *plugin);
00062 ~DBXThread();
00063 void run();
00064 Mutex completion;
00065 DBXWindow *window;
00066 DBXEffect *plugin;
00067 };
00068
00069
00070 typedef struct
00071 {
00072
00073 double x, y;
00074 } compressor_point_t;
00075
00076 class DBXConfig
00077 {
00078 public:
00079 DBXConfig();
00080
00081 int total_points();
00082 void remove_point(int number);
00083 void optimize();
00084 double get_y(int number);
00085 double get_x(int number);
00086
00087 double calculate_linear(double x);
00088 int set_point(double x, double y);
00089 void dump();
00090
00091 int trigger;
00092 double min_db;
00093 double preview_len;
00094 double reaction_len;
00095 double min_x, min_y;
00096 double max_x, max_y;
00097 ArrayList<compressor_point_t> levels;
00098 };
00099
00100 class DBXEffect : public PluginAClient
00101 {
00102 public:
00103 DBXEffect(PluginServer *server);
00104 ~DBXEffect();
00105
00106 VFrame* new_picon();
00107 char* plugin_title();
00108 int is_multichannel();
00109 int is_realtime();
00110 void read_data(KeyFrame *keyframe);
00111 void save_data(KeyFrame *keyframe);
00112 int process_realtime(long size, double **input_ptr, double **output_ptr);
00113 int show_gui();
00114 void raise_window();
00115 int set_string();
00116
00117
00118
00119
00120 int load_defaults();
00121 int save_defaults();
00122 void load_configuration();
00123 void reset();
00124 void update_gui();
00125 void delete_dsp();
00126
00127
00128 double **input_buffer;
00129 long input_size;
00130 long input_allocated;
00131 double *reaction_buffer;
00132 long reaction_allocated;
00133 long reaction_position;
00134 double current_coef;
00135
00136
00137 double *coefs;
00138 long coefs_allocated;
00139
00140
00141
00142 BC_Hash *defaults;
00143 DBXThread *thread;
00144 DBXConfig config;
00145 };
00146
00147
00148 #endif