00001 #ifndef FREEZEFRAME_H
00002 #define FREEZEFRAME_H
00003
00004
00005
00006
00007 #include "filexml.inc"
00008 #include "mutex.h"
00009 #include "pluginvclient.h"
00010
00011
00012
00013 class FreezeFrameWindow;
00014 class FreezeFrameMain;
00015 class FreezeFrameThread;
00016
00017 class FreezeFrameConfig
00018 {
00019 public:
00020 FreezeFrameConfig();
00021 void copy_from(FreezeFrameConfig &that);
00022 int equivalent(FreezeFrameConfig &that);
00023 void interpolate(FreezeFrameConfig &prev,
00024 FreezeFrameConfig &next,
00025 long prev_frame,
00026 long next_frame,
00027 long current_frame);
00028 int enabled;
00029 int line_double;
00030 };
00031
00032 class FreezeFrameToggle : public BC_CheckBox
00033 {
00034 public:
00035 FreezeFrameToggle(FreezeFrameMain *client,
00036 int *value,
00037 int x,
00038 int y,
00039 char *text);
00040 ~FreezeFrameToggle();
00041 int handle_event();
00042 FreezeFrameMain *client;
00043 int *value;
00044 };
00045
00046 class FreezeFrameWindow : public BC_Window
00047 {
00048 public:
00049 FreezeFrameWindow(FreezeFrameMain *client, int x, int y);
00050 ~FreezeFrameWindow();
00051
00052 int create_objects();
00053 int close_event();
00054
00055 FreezeFrameMain *client;
00056 FreezeFrameToggle *enabled;
00057
00058 };
00059
00060 PLUGIN_THREAD_HEADER(FreezeFrameMain, FreezeFrameThread, FreezeFrameWindow)
00061
00062 class FreezeFrameMain : public PluginVClient
00063 {
00064 public:
00065 FreezeFrameMain(PluginServer *server);
00066 ~FreezeFrameMain();
00067
00068 PLUGIN_CLASS_MEMBERS(FreezeFrameConfig, FreezeFrameThread)
00069
00070 int process_buffer(VFrame *frame,
00071 int64_t start_position,
00072 double frame_rate);
00073 int is_realtime();
00074 void update_gui();
00075 void save_data(KeyFrame *keyframe);
00076 void read_data(KeyFrame *keyframe);
00077 int load_defaults();
00078 int save_defaults();
00079 int is_synthesis();
00080 int handle_opengl();
00081
00082
00083
00084 VFrame *first_frame;
00085
00086 int64_t first_frame_position;
00087 };
00088
00089
00090 #endif