r860: Merge 2.1:
[cinelerra_cv.git] / cinelerra / performanceprefs.C
blob15cd475aa163043d29837f9a9b39d79002a64e23
1 #include "bcsignals.h"
2 #include "clip.h"
3 #include "edl.h"
4 #include "edlsession.h"
5 #include "formattools.h"
6 #include "language.h"
7 #include "mwindow.h"
8 #include "performanceprefs.h"
9 #include "preferences.h"
10 #include <string.h>
11 #include "theme.h"
14 PerformancePrefs::PerformancePrefs(MWindow *mwindow, PreferencesWindow *pwindow)
15  : PreferencesDialog(mwindow, pwindow)
17         hot_node = -1;
20 PerformancePrefs::~PerformancePrefs()
22         delete brender_tools;
23         nodes[0].remove_all_objects();
24         nodes[1].remove_all_objects();
25         nodes[2].remove_all_objects();
26         nodes[3].remove_all_objects();
29 int PerformancePrefs::create_objects()
31         int x, y;
32         int xmargin1;
33         int xmargin2 = 170;
34         int xmargin3 = 250;
35         int xmargin4 = 380;
36         char string[BCTEXTLEN];
37         BC_Resources *resources = BC_WindowBase::get_resources();
39         node_list = 0;
40         generate_node_list();
42         xmargin1 = x = mwindow->theme->preferencesoptions_x;
43         y = mwindow->theme->preferencesoptions_y;
44         
45 //      add_subwindow(new BC_Title(x, 
46 //              y, 
47 //              _("Time Format"), 
48 //              LARGEFONT, 
49 //              resources->text_default));
50 // 
51 //      y += get_text_height(LARGEFONT) + 5;
53         add_subwindow(new BC_Title(x, y + 5, _("Cache size (MB):"), MEDIUMFONT, resources->text_default));
54         cache_size = new CICacheSize(x + 230, 
55                 y, 
56                 pwindow, 
57                 this);
58         cache_size->create_objects();
60         y += 30;
61         add_subwindow(new BC_Title(x, y + 5, _("Seconds to preroll renders:")));
62         PrefsRenderPreroll *preroll = new PrefsRenderPreroll(pwindow, 
63                 this, 
64                 x + 230, 
65                 y);
66         preroll->create_objects();
67         y += 30;
68         add_subwindow(new PrefsForceUniprocessor(pwindow, x, y));
70         y += 35;
75 // Background rendering
76         add_subwindow(new BC_Bar(5, y,  get_w() - 10));
77         y += 5;
80         add_subwindow(new BC_Title(x, y, _("Background Rendering (Video only)"), LARGEFONT, resources->text_default));
81         y += 30;
83         add_subwindow(new PrefsUseBRender(pwindow, 
84                 x,
85                 y));
88         add_subwindow(new BC_Title(x, y + 40, _("Frames per background rendering job:")));
89         PrefsBRenderFragment *brender_fragment = new PrefsBRenderFragment(pwindow, 
90                 this, 
91                 x, 
92                 y + 60);
93         brender_fragment->create_objects();
94         add_subwindow(new BC_Title(x, y + 95, _("Frames to preroll background:")));
95         PrefsBRenderPreroll *bpreroll = new PrefsBRenderPreroll(pwindow, 
96                 this, 
97                 x + xmargin3, 
98                 y + 90);
99         bpreroll->create_objects();
102         x += xmargin4;
103         add_subwindow(new BC_Title(x, y, _("Output for background rendering:")));
104         y += 20;
105         brender_tools = 
106                 new FormatTools(mwindow,
107                         this, 
108                         pwindow->thread->preferences->brender_asset);
109         brender_tools->create_objects(x, 
110                 y, 
111                 0,  // Include tools for audio
112                 1,  // Include tools for video
113                 0,  // Include checkbox for audio
114                 0,  // Include checkbox for video
115                 0,
116                 1,
117                 0,  // Select compressors to be offered
118                 0, // Change captions for recording
119                 0,  // If nonzero, prompt for insertion strategy
120                 1); // Supply file formats for background rendering
121         x = xmargin1;
124 // Renderfarm
125         add_subwindow(new BC_Bar(5, y,  get_w() - 10));
126         y += 5;
129         add_subwindow(new BC_Title(x, y, _("Render Farm"), LARGEFONT, resources->text_default));
130         y += 25;
132         add_subwindow(new PrefsRenderFarm(pwindow, x, y));
133         add_subwindow(new BC_Title(x + xmargin4, y, _("Nodes:")));
134         y += 30;
135         add_subwindow(new BC_Title(x, y, _("Hostname:")));
136         add_subwindow(new BC_Title(x + xmargin3, y, _("Port:")));
137         add_subwindow(node_list = new PrefsRenderFarmNodes(pwindow, 
138                 this, 
139                 x + xmargin4, 
140                 y - 5));
141 #if 0
142 N_("Master node framerate: %0.3f")
143 #endif
144 #define MASTER_NODE_FRAMERATE_TEXT "Master node framerate: %0.3f"
145         sprintf(string, _(MASTER_NODE_FRAMERATE_TEXT), 
146                 pwindow->thread->preferences->local_rate);
147         add_subwindow(master_rate = new BC_Title(x + xmargin4, y + node_list->get_h(), string));
149         y += 25;
150         add_subwindow(edit_node = new PrefsRenderFarmEditNode(pwindow, 
151                 this, 
152                 x, 
153                 y));
154         edit_port = new PrefsRenderFarmPort(pwindow, 
155                 this, 
156                 x + xmargin3, 
157                 y);
158         edit_port->create_objects();
160         y += 30;
163         add_subwindow(new PrefsRenderFarmReplaceNode(pwindow, 
164                 this, 
165                 x, 
166                 y));
167         add_subwindow(new PrefsRenderFarmNewNode(pwindow, 
168                 this, 
169                 x + xmargin2, 
170                 y));
171         y += 30;
172         add_subwindow(new PrefsRenderFarmDelNode(pwindow, 
173                 this, 
174                 x + xmargin2, 
175                 y));
176         add_subwindow(new PrefsRenderFarmSortNodes(pwindow, 
177                 this, 
178                 x, 
179                 y));
180         y += 30;
181         add_subwindow(new PrefsRenderFarmReset(pwindow, 
182                 this, 
183                 x, 
184                 y));
185         y += 35;
186         add_subwindow(new BC_Title(x, 
187                 y, 
188                 _("Total jobs to create:")));
189         add_subwindow(new BC_Title(x, 
190                 y + 30, 
191                 _("(overridden if new file at each label is checked)")));
192         PrefsRenderFarmJobs *jobs = new PrefsRenderFarmJobs(pwindow, 
193                 this, 
194                 x + xmargin3, 
195                 y);
196         jobs->create_objects();
197         y += 55;
198 //      add_subwindow(new PrefsRenderFarmVFS(pwindow,
199 //              this,
200 //              x,
201 //              y));
202 //      add_subwindow(new BC_Title(x, 
203 //              y, 
204 //              _("Filesystem prefix on remote nodes:")));
205 //      add_subwindow(new PrefsRenderFarmMountpoint(pwindow, 
206 //              this, 
207 //              x + xmargin3, 
208 //              y));
209 //      y += 30;
211         return 0;
214 void PerformancePrefs::generate_node_list()
216         int selected_row = node_list ? node_list->get_selection_number(0, 0) : -1;
217         nodes[0].remove_all_objects();
218         nodes[1].remove_all_objects();
219         nodes[2].remove_all_objects();
220         nodes[3].remove_all_objects();
221         for(int i = 0; 
222                 i < pwindow->thread->preferences->renderfarm_nodes.total; 
223                 i++)
224         {
225                 BC_ListBoxItem *item;
226                 nodes[0].append(item = new BC_ListBoxItem(
227                         (char*)(pwindow->thread->preferences->renderfarm_enabled.values[i] ? "X" : " ")));
228                 if(i == selected_row) item->set_selected(1);
230                 nodes[1].append(item = new BC_ListBoxItem(
231                         pwindow->thread->preferences->renderfarm_nodes.values[i]));
232                 if(i == selected_row) item->set_selected(1);
234                 char string[BCTEXTLEN];
235                 sprintf(string, "%d", pwindow->thread->preferences->renderfarm_ports.values[i]);
236                 nodes[2].append(item = new BC_ListBoxItem(string));
237                 if(i == selected_row) item->set_selected(1);
239                 sprintf(string, "%0.3f", pwindow->thread->preferences->renderfarm_rate.values[i]);
240                 nodes[3].append(item = new BC_ListBoxItem(string));
241                 if(i == selected_row) item->set_selected(1);
242         }
245 static char *titles[] = 
247         N_("On"),
248         N_("Hostname"),
249         N_("Port"),
250         N_("Framerate")
253 static int widths[] = 
255         30,
256         150,
257         50,
258         50
262 void PerformancePrefs::update_node_list()
264         node_list->update(nodes,
265                                                 titles,
266                                                 widths,
267                                                 4,
268                                                 node_list->get_xposition(),
269                                                 node_list->get_yposition(),
270                                                 node_list->get_selection_number(0, 0));
275 PrefsUseBRender::PrefsUseBRender(PreferencesWindow *pwindow, 
276         int x,
277         int y)
278  : BC_CheckBox(x, 
279         y, 
280         pwindow->thread->preferences->use_brender, 
281         _("Use background rendering"))
283         this->pwindow = pwindow;
286 int PrefsUseBRender::handle_event()
288         pwindow->thread->redraw_overlays = 1;
289         pwindow->thread->redraw_times = 1;
290         pwindow->thread->preferences->use_brender = get_value();
291         return 1;
299 PrefsBRenderFragment::PrefsBRenderFragment(PreferencesWindow *pwindow, 
300         PerformancePrefs *subwindow, 
301         int x, 
302         int y)
303  : BC_TumbleTextBox(subwindow, 
304         (int64_t)pwindow->thread->preferences->brender_fragment,
305         (int64_t)1, 
306         (int64_t)65535,
307         x,
308         y,
309         100)
311         this->pwindow = pwindow;
313 int PrefsBRenderFragment::handle_event()
315         pwindow->thread->preferences->brender_fragment = atol(get_text());
316         return 1;
329 CICacheSize::CICacheSize(int x, 
330         int y, 
331         PreferencesWindow *pwindow, 
332         PerformancePrefs *subwindow)
333  : BC_TumbleTextBox(subwindow,
334         (int64_t)pwindow->thread->preferences->cache_size / 0x100000,
335         (int64_t)MIN_CACHE_SIZE / 0x100000,
336         (int64_t)MAX_CACHE_SIZE / 0x100000,
337         x, 
338         y, 
339         100)
341         this->pwindow = pwindow;
342         set_increment(1);
345 int CICacheSize::handle_event()
347         int64_t result;
348         result = (int64_t)atol(get_text()) * 0x100000;
349         CLAMP(result, MIN_CACHE_SIZE, MAX_CACHE_SIZE);
350         pwindow->thread->preferences->cache_size = result;
351         return 0;
355 PrefsRenderPreroll::PrefsRenderPreroll(PreferencesWindow *pwindow, 
356                 PerformancePrefs *subwindow, 
357                 int x, 
358                 int y)
359  : BC_TumbleTextBox(subwindow, 
360         (float)pwindow->thread->preferences->render_preroll,
361         (float)0, 
362         (float)100,
363         x,
364         y,
365         100)
367         this->pwindow = pwindow;
369 PrefsRenderPreroll::~PrefsRenderPreroll()
372 int PrefsRenderPreroll::handle_event()
374         pwindow->thread->preferences->render_preroll = atof(get_text());
375         return 1;
379 PrefsBRenderPreroll::PrefsBRenderPreroll(PreferencesWindow *pwindow, 
380                 PerformancePrefs *subwindow, 
381                 int x, 
382                 int y)
383  : BC_TumbleTextBox(subwindow, 
384         (int64_t)pwindow->thread->preferences->brender_preroll,
385         (int64_t)0, 
386         (int64_t)100,
387         x,
388         y,
389         100)
391         this->pwindow = pwindow;
393 int PrefsBRenderPreroll::handle_event()
395         pwindow->thread->preferences->brender_preroll = atol(get_text());
396         return 1;
409 PrefsRenderFarm::PrefsRenderFarm(PreferencesWindow *pwindow, int x, int y)
410  : BC_CheckBox(x, 
411         y, 
412         pwindow->thread->preferences->use_renderfarm,
413         _("Use render farm"))
415         this->pwindow = pwindow;
417 PrefsRenderFarm::~PrefsRenderFarm()
420 int PrefsRenderFarm::handle_event()
422         pwindow->thread->preferences->use_renderfarm = get_value();
423         return 1;
429 PrefsForceUniprocessor::PrefsForceUniprocessor(PreferencesWindow *pwindow, int x, int y)
430  : BC_CheckBox(x, 
431         y, 
432         pwindow->thread->preferences->force_uniprocessor,
433         _("Force single processor use"))
435         this->pwindow = pwindow;
437 PrefsForceUniprocessor::~PrefsForceUniprocessor()
440 int PrefsForceUniprocessor::handle_event()
442         pwindow->thread->preferences->force_uniprocessor = get_value();
443         return 1;
452 PrefsRenderFarmConsolidate::PrefsRenderFarmConsolidate(PreferencesWindow *pwindow, int x, int y)
453  : BC_CheckBox(x, 
454         y, 
455         pwindow->thread->preferences->renderfarm_consolidate,
456         _("Consolidate output files on completion"))
458         this->pwindow = pwindow;
460 PrefsRenderFarmConsolidate::~PrefsRenderFarmConsolidate()
463 int PrefsRenderFarmConsolidate::handle_event()
465         pwindow->thread->preferences->renderfarm_consolidate = get_value();
466         return 1;
473 PrefsRenderFarmPort::PrefsRenderFarmPort(PreferencesWindow *pwindow, 
474         PerformancePrefs *subwindow, 
475         int x, 
476         int y)
477  : BC_TumbleTextBox(subwindow, 
478         (int64_t)pwindow->thread->preferences->renderfarm_port,
479         (int64_t)1, 
480         (int64_t)65535,
481         x,
482         y,
483         100)
485         this->pwindow = pwindow;
488 PrefsRenderFarmPort::~PrefsRenderFarmPort()
492 int PrefsRenderFarmPort::handle_event()
494         pwindow->thread->preferences->renderfarm_port = atol(get_text());
495         return 1;
500 PrefsRenderFarmNodes::PrefsRenderFarmNodes(PreferencesWindow *pwindow, 
501         PerformancePrefs *subwindow, int x, int y)
502  : BC_ListBox(x, 
503                 y, 
504                 340, 
505                 230,
506                 LISTBOX_TEXT,                         // Display text list or icons
507                 subwindow->nodes,
508                 titles,
509                 widths,
510                 4)
512         this->subwindow = subwindow;
513         this->pwindow = pwindow;
515 PrefsRenderFarmNodes::~PrefsRenderFarmNodes()
519 int PrefsRenderFarmNodes::column_resize_event()
521         for(int i = 0; i < 3; i++)
522                 widths[i] = get_column_width(i);
523         return 1;
526 int PrefsRenderFarmNodes::handle_event()
528 SET_TRACE
529         if(get_selection_number(0, 0) >= 0)
530         {
531                 subwindow->hot_node = get_selection_number(1, 0);
532                 subwindow->edit_node->update(get_selection(1, 0)->get_text());
533                 subwindow->edit_port->update(get_selection(2, 0)->get_text());
534                 if(get_cursor_x() < widths[0])
535                 {
536                         pwindow->thread->preferences->renderfarm_enabled.values[subwindow->hot_node] = 
537                                 !pwindow->thread->preferences->renderfarm_enabled.values[subwindow->hot_node];
538                         subwindow->generate_node_list();
539                         subwindow->update_node_list();
540                 }
541         }
542         else
543         {
544                 subwindow->hot_node = -1;
545                 subwindow->edit_node->update("");
546         }
547 SET_TRACE
548         return 1;
549 }       
550 int PrefsRenderFarmNodes::selection_changed()
552         handle_event();
553         return 1;
562 PrefsRenderFarmEditNode::PrefsRenderFarmEditNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
563  : BC_TextBox(x, y, 240, 1, "")
565         this->pwindow = pwindow;
566         this->subwindow = subwindow;
569 PrefsRenderFarmEditNode::~PrefsRenderFarmEditNode()
573 int PrefsRenderFarmEditNode::handle_event()
575         return 1;
583 PrefsRenderFarmNewNode::PrefsRenderFarmNewNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
584  : BC_GenericButton(x, y, _("Add Node"))
586         this->pwindow = pwindow;
587         this->subwindow = subwindow;
589 PrefsRenderFarmNewNode::~PrefsRenderFarmNewNode()
592 int PrefsRenderFarmNewNode::handle_event()
594         pwindow->thread->preferences->add_node(subwindow->edit_node->get_text(),
595                 pwindow->thread->preferences->renderfarm_port,
596                 1,
597                 0.0);
598         pwindow->thread->preferences->reset_rates();
599         subwindow->generate_node_list();
600         subwindow->update_node_list();
601         subwindow->hot_node = -1;
602         return 1;
611 PrefsRenderFarmReplaceNode::PrefsRenderFarmReplaceNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
612  : BC_GenericButton(x, y, _("Apply Changes"))
614         this->pwindow = pwindow;
615         this->subwindow = subwindow;
617 PrefsRenderFarmReplaceNode::~PrefsRenderFarmReplaceNode()
620 int PrefsRenderFarmReplaceNode::handle_event()
622         if(subwindow->hot_node >= 0)
623         {
624                 pwindow->thread->preferences->edit_node(subwindow->hot_node, 
625                         subwindow->edit_node->get_text(),
626                         pwindow->thread->preferences->renderfarm_port,
627                         pwindow->thread->preferences->renderfarm_enabled.values[subwindow->hot_node]);
628                 subwindow->generate_node_list();
629                 subwindow->update_node_list();
630         }
631         return 1;
638 PrefsRenderFarmDelNode::PrefsRenderFarmDelNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
639  : BC_GenericButton(x, y, _("Delete Node"))
641         this->pwindow = pwindow;
642         this->subwindow = subwindow;
644 PrefsRenderFarmDelNode::~PrefsRenderFarmDelNode()
647 int PrefsRenderFarmDelNode::handle_event()
649         if(strlen(subwindow->edit_node->get_text()))
650         {
651                 pwindow->thread->preferences->delete_node(subwindow->hot_node);
652                 subwindow->generate_node_list();
653                 subwindow->update_node_list();
654                 subwindow->hot_node = -1;
655         }
656         return 1;
663 PrefsRenderFarmSortNodes::PrefsRenderFarmSortNodes(PreferencesWindow *pwindow, 
664         PerformancePrefs *subwindow, 
665         int x, 
666         int y)
667  : BC_GenericButton(x, y, _("Sort nodes"))
669         this->pwindow = pwindow;
670         this->subwindow = subwindow;
673 PrefsRenderFarmSortNodes::~PrefsRenderFarmSortNodes()
677 int PrefsRenderFarmSortNodes::handle_event()
679         pwindow->thread->preferences->sort_nodes();
680         subwindow->generate_node_list();
681         subwindow->update_node_list();
682         subwindow->hot_node = -1;
683         return 1;
690 PrefsRenderFarmReset::PrefsRenderFarmReset(PreferencesWindow *pwindow, 
691         PerformancePrefs *subwindow, 
692         int x, 
693         int y)
694  : BC_GenericButton(x, y, _("Reset rates"))
696         this->pwindow = pwindow;
697         this->subwindow = subwindow;
700 int PrefsRenderFarmReset::handle_event()
702         pwindow->thread->preferences->reset_rates();
703         subwindow->generate_node_list();
704         subwindow->update_node_list();
706         char string[BCTEXTLEN];
707         sprintf(string, 
708                 MASTER_NODE_FRAMERATE_TEXT, 
709                 pwindow->thread->preferences->local_rate);
710         subwindow->master_rate->update(string);
711         subwindow->hot_node = -1;
712         return 1;
721 PrefsRenderFarmJobs::PrefsRenderFarmJobs(PreferencesWindow *pwindow, 
722                 PerformancePrefs *subwindow, 
723                 int x, 
724                 int y)
725  : BC_TumbleTextBox(subwindow, 
726         (int64_t)pwindow->thread->preferences->renderfarm_job_count,
727         (int64_t)1, 
728         (int64_t)100,
729         x,
730         y,
731         100)
733         this->pwindow = pwindow;
735 PrefsRenderFarmJobs::~PrefsRenderFarmJobs()
738 int PrefsRenderFarmJobs::handle_event()
740         pwindow->thread->preferences->renderfarm_job_count = atol(get_text());
741         return 1;
746 PrefsRenderFarmMountpoint::PrefsRenderFarmMountpoint(PreferencesWindow *pwindow, 
747                 PerformancePrefs *subwindow, 
748                 int x, 
749                 int y)
750  : BC_TextBox(x, 
751         y, 
752         100,
753         1,
754         pwindow->thread->preferences->renderfarm_mountpoint)
756         this->pwindow = pwindow;
757         this->subwindow = subwindow;
759 PrefsRenderFarmMountpoint::~PrefsRenderFarmMountpoint()
762 int PrefsRenderFarmMountpoint::handle_event()
764         strcpy(pwindow->thread->preferences->renderfarm_mountpoint, get_text());
765         return 1;
771 PrefsRenderFarmVFS::PrefsRenderFarmVFS(PreferencesWindow *pwindow,
772         PerformancePrefs *subwindow,
773         int x,
774         int y)
775  : BC_CheckBox(x, y, pwindow->thread->preferences->renderfarm_vfs, _("Use virtual filesystem"))
777         this->pwindow = pwindow;
778         this->subwindow = subwindow;
781 int PrefsRenderFarmVFS::handle_event()
783         pwindow->thread->preferences->renderfarm_vfs = get_value();
784         return 1;