00001 #ifndef SCALE_H
00002 #define SCALE_H
00003
00004
00005
00006 class ScaleMain;
00007 class ScaleWidth;
00008 class ScaleHeight;
00009 class ScaleConstrain;
00010 class ScaleThread;
00011 class ScaleWin;
00012
00013 #include "bchash.h"
00014 #include "guicast.h"
00015 #include "mutex.h"
00016 #include "scalewin.h"
00017 #include "overlayframe.h"
00018 #include "pluginvclient.h"
00019
00020 class ScaleConfig
00021 {
00022 public:
00023 ScaleConfig();
00024
00025 void copy_from(ScaleConfig &src);
00026 int equivalent(ScaleConfig &src);
00027 void interpolate(ScaleConfig &prev,
00028 ScaleConfig &next,
00029 int64_t prev_frame,
00030 int64_t next_frame,
00031 int64_t current_frame);
00032
00033 float w, h;
00034 int constrain;
00035 };
00036
00037
00038 class ScaleWidth : public BC_TumbleTextBox
00039 {
00040 public:
00041 ScaleWidth(ScaleWin *win, ScaleMain *client, int x, int y);
00042 ~ScaleWidth();
00043 int handle_event();
00044
00045 ScaleMain *client;
00046 ScaleWin *win;
00047 };
00048
00049 class ScaleHeight : public BC_TumbleTextBox
00050 {
00051 public:
00052 ScaleHeight(ScaleWin *win, ScaleMain *client, int x, int y);
00053 ~ScaleHeight();
00054 int handle_event();
00055
00056 ScaleMain *client;
00057 ScaleWin *win;
00058 };
00059
00060 class ScaleConstrain : public BC_CheckBox
00061 {
00062 public:
00063 ScaleConstrain(ScaleMain *client, int x, int y);
00064 ~ScaleConstrain();
00065 int handle_event();
00066
00067 ScaleMain *client;
00068 };
00069
00070 class ScaleWin : public BC_Window
00071 {
00072 public:
00073 ScaleWin(ScaleMain *client, int x, int y);
00074 ~ScaleWin();
00075
00076 int create_objects();
00077 int close_event();
00078
00079 ScaleMain *client;
00080 ScaleWidth *width;
00081 ScaleHeight *height;
00082 ScaleConstrain *constrain;
00083 };
00084
00085 PLUGIN_THREAD_HEADER(ScaleMain, ScaleThread, ScaleWin)
00086
00087 class ScaleMain : public PluginVClient
00088 {
00089 public:
00090 ScaleMain(PluginServer *server);
00091 ~ScaleMain();
00092
00093
00094 int process_buffer(VFrame *frame,
00095 int64_t start_position,
00096 double frame_rate);
00097 void calculate_transfer(VFrame *frame,
00098 float &in_x1,
00099 float &in_x2,
00100 float &in_y1,
00101 float &in_y2,
00102 float &out_x1,
00103 float &out_x2,
00104 float &out_y1,
00105 float &out_y2);
00106 int handle_opengl();
00107 int is_realtime();
00108 char* plugin_title();
00109 int show_gui();
00110 void raise_window();
00111 int set_string();
00112 void update_gui();
00113 void save_data(KeyFrame *keyframe);
00114 void read_data(KeyFrame *keyframe);
00115 VFrame* new_picon();
00116 int load_defaults();
00117 int save_defaults();
00118 int load_configuration();
00119
00120
00121 ScaleThread *thread;
00122
00123 OverlayFrame *overlayer;
00124 BC_Hash *defaults;
00125 ScaleConfig config;
00126 };
00127
00128
00129 #endif