Fixed initialisation of tf in file_open(). Without setting the memory to 0,
[cinelerra_cv/mob.git] / plugins / reframe / reframe.C
blob730fc4ebf68bd9576a48a7d9092d67ab3c9591ad
1 #include "bcdisplayinfo.h"
2 #include "bchash.h"
3 #include "language.h"
4 #include "mainprogress.h"
5 #include "picon_png.h"
6 #include "reframe.h"
12 REGISTER_PLUGIN(ReFrame)
23 ReFrame::ReFrame(PluginServer *server)
24  : PluginVClient(server)
26         load_defaults();
27         current_position = 0;
30 ReFrame::~ReFrame()
32         save_defaults();
33         delete defaults;
36 char* ReFrame::plugin_title() { return N_("Reframe"); }
38 NEW_PICON_MACRO(ReFrame) 
41 int ReFrame::load_defaults()
43         char directory[1024];
45 // set the default directory
46         sprintf(directory, "%sreframe.rc", BCASTDIR);
48 // load the defaults
50         defaults = new BC_Hash(directory);
52         defaults->load();
54         scale = defaults->get("SCALE", (double)1);
55         return 0;
58 int ReFrame::save_defaults()
60         defaults->update("SCALE", scale);
61         defaults->save();
62         return 0;
65 int ReFrame::get_parameters()
67         BC_DisplayInfo info;
68         ReFrameWindow window(this, info.get_abs_cursor_x(), info.get_abs_cursor_y());
69         window.create_objects();
70         int result = window.run_window();
71         
72         return result;
76 int ReFrame::start_loop()
78         if(PluginClient::interactive)
79         {
80                 char string[BCTEXTLEN];
81                 sprintf(string, "%s...", plugin_title());
82                 progress = start_progress(string, 
83                         (PluginClient::end - PluginClient::start));
84         }
86         current_position = 0;
87         return 0;
90 int ReFrame::stop_loop()
92         if(PluginClient::interactive)
93         {
94                 progress->stop_progress();
95                 delete progress;
96         }
97         return 0;
101 int ReFrame::process_loop(VFrame *buffer)
103         int result = 0;
104         
105         int64_t input_offset = Units::to_int64((double)current_position * 
106                 scale + 
107                 PluginClient::start);
109         read_frame(buffer, input_offset);
111         current_position++;
112         input_offset = Units::to_int64((double)current_position * 
113                 scale + 
114                 PluginClient::start);
116         if(PluginClient::interactive) 
117                 result = progress->update(input_offset - PluginClient::start);
119         if(input_offset >= PluginClient::end) result = 1;
121         return result;
135 ReFrameOutput::ReFrameOutput(ReFrame *plugin, int x, int y)
136  : BC_TextBox(x, y, 150, 1, (float)plugin->scale)
138         this->plugin = plugin;
141 int ReFrameOutput::handle_event()
143         plugin->scale = atof(get_text());
144         return 1;
149 ReFrameWindow::ReFrameWindow(ReFrame *plugin, int x, int y)
150  : BC_Window(plugin->plugin_title(), 
151         x, 
152         y, 
153         230, 
154         160, 
155         230, 
156         160, 
157         0, 
158         0,
159         1)
161         this->plugin = plugin;
164 ReFrameWindow::~ReFrameWindow()
169 void ReFrameWindow::create_objects()
171         int x = 10, y = 10;
172         add_subwindow(new BC_Title(x, y, _("Scale factor:")));
173         y += 20;
174         add_subwindow(new ReFrameOutput(plugin, x, y));
175         add_subwindow(new BC_OKButton(this));
176         add_subwindow(new BC_CancelButton(this));
178         show_window();
179         flush();
182 WINDOW_CLOSE_EVENT(ReFrameWindow)