r602: Fix baver's code... don't insert timecode when show_tc is not set
[cinelerra_cv/mob.git] / cinelerra / performanceprefs.C
blob9dfdbb75a5e19e43bd64e05a4bfdc293e96729e7
1 #include "clip.h"
2 #include "edl.h"
3 #include "edlsession.h"
4 #include "formattools.h"
5 #include "language.h"
6 #include "mwindow.h"
7 #include "performanceprefs.h"
8 #include "preferences.h"
9 #include <string.h>
12 PerformancePrefs::PerformancePrefs(MWindow *mwindow, PreferencesWindow *pwindow)
13  : PreferencesDialog(mwindow, pwindow)
15         hot_node = -1;
18 PerformancePrefs::~PerformancePrefs()
20         delete brender_tools;
21         nodes[0].remove_all_objects();
22         nodes[1].remove_all_objects();
23         nodes[2].remove_all_objects();
24         nodes[3].remove_all_objects();
27 int PerformancePrefs::create_objects()
29         int x = 5, y = 5;
30         int xmargin1 = 5;
31         int xmargin2 = 170;
32         int xmargin3 = 250;
33         int xmargin4 = 380;
34         char string[BCTEXTLEN];
36         node_list = 0;
37         generate_node_list();
39 //      add_border(get_resources()->get_bg_shadow1(),
40 //              get_resources()->get_bg_shadow2(),
41 //              get_resources()->get_bg_color(),
42 //              get_resources()->get_bg_light2(),
43 //              get_resources()->get_bg_light1());
44         add_subwindow(new BC_Title(x, y, _("Performance"), LARGEFONT, BLACK));
46         y += 30;
47         add_subwindow(new BC_Title(x, y + 5, _("Cache size (MB):"), MEDIUMFONT, BLACK));
48         cache_size = new CICacheSize(x + 230, 
49                 y, 
50                 pwindow, 
51                 this);
52         cache_size->create_objects();
54         y += 30;
55         add_subwindow(new BC_Title(x, y + 5, _("Seconds to preroll renders:")));
56         PrefsRenderPreroll *preroll = new PrefsRenderPreroll(pwindow, 
57                 this, 
58                 x + 230, 
59                 y);
60         preroll->create_objects();
61         y += 30;
62         add_subwindow(new PrefsForceUniprocessor(pwindow, x, y));
64         y += 35;
67         add_subwindow(new BC_Title(x, y, _("Background Rendering"), LARGEFONT, BLACK));
68         y += 30;
70         add_subwindow(new PrefsUseBRender(pwindow, 
71                 x,
72                 y));
75         add_subwindow(new BC_Title(x, y + 40, _("Frames per background rendering job:")));
76         PrefsBRenderFragment *brender_fragment = new PrefsBRenderFragment(pwindow, 
77                 this, 
78                 x, 
79                 y + 60);
80         brender_fragment->create_objects();
81         add_subwindow(new BC_Title(x, y + 95, _("Frames to preroll background:")));
82         PrefsBRenderPreroll *bpreroll = new PrefsBRenderPreroll(pwindow, 
83                 this, 
84                 x + xmargin3, 
85                 y + 90);
86         bpreroll->create_objects();
89         x += xmargin4;
90         add_subwindow(new BC_Title(x, y, _("Output for background rendering:")));
91         y += 20;
92         brender_tools = 
93                 new FormatTools(mwindow,
94                         this, 
95                         pwindow->thread->preferences->brender_asset);
96         brender_tools->create_objects(x, 
97                 y, 
98                 0,    // Include tools for audio
99                 1,   // Include tools for video
100                 0,  // Include checkbox for audio
101                 0,  // Include checkbox for video
102                 0,
103                 1,
104                 0,  // Select compressors to be offered
105                 0, // Change captions for recording
106                 0, // If nonzero, prompt for insertion strategy
107                 1); // Supply file formats for background rendering
108         x = xmargin1;
110         add_subwindow(new BC_Title(x, y, _("Render Farm"), LARGEFONT, BLACK));
111         y += 25;
113         add_subwindow(new PrefsRenderFarm(pwindow, x, y));
114         add_subwindow(new BC_Title(x + xmargin4, y, _("Nodes:")));
115         y += 30;
116         add_subwindow(new BC_Title(x, y, _("Hostname:")));
117         add_subwindow(new BC_Title(x + xmargin3, y, _("Port:")));
118         add_subwindow(node_list = new PrefsRenderFarmNodes(pwindow, 
119                 this, 
120                 x + xmargin4, 
121                 y - 5));
122 #if 0
123 N_("Master node framerate: %0.3f")
124 #endif
125 #define MASTER_NODE_FRAMERATE_TEXT "Master node framerate: %0.3f"
126         sprintf(string, _(MASTER_NODE_FRAMERATE_TEXT), 
127                 pwindow->thread->preferences->local_rate);
128         add_subwindow(master_rate = new BC_Title(x + xmargin4, y + node_list->get_h(), string));
130         y += 25;
131         add_subwindow(edit_node = new PrefsRenderFarmEditNode(pwindow, 
132                 this, 
133                 x, 
134                 y));
135         edit_port = new PrefsRenderFarmPort(pwindow, 
136                 this, 
137                 x + xmargin3, 
138                 y);
139         edit_port->create_objects();
141         y += 30;
144         add_subwindow(new PrefsRenderFarmReplaceNode(pwindow, 
145                 this, 
146                 x, 
147                 y));
148         add_subwindow(new PrefsRenderFarmNewNode(pwindow, 
149                 this, 
150                 x + xmargin2, 
151                 y));
152         y += 30;
153         add_subwindow(new PrefsRenderFarmDelNode(pwindow, 
154                 this, 
155                 x + xmargin2, 
156                 y));
157         add_subwindow(new PrefsRenderFarmSortNodes(pwindow, 
158                 this, 
159                 x, 
160                 y));
161         y += 30;
162         add_subwindow(new PrefsRenderFarmReset(pwindow, 
163                 this, 
164                 x, 
165                 y));
166         y += 35;
167         add_subwindow(new BC_Title(x, 
168                 y, 
169                 _("Total jobs to create:")));
170         add_subwindow(new BC_Title(x, 
171                 y + 30, 
172                 _("(overridden if new file at each label is checked)")));
173         PrefsRenderFarmJobs *jobs = new PrefsRenderFarmJobs(pwindow, 
174                 this, 
175                 x + xmargin3, 
176                 y);
177         jobs->create_objects();
178         y += 55;
179         add_subwindow(new PrefsRenderFarmVFS(pwindow,
180                 this,
181                 x,
182                 y));
183 //      add_subwindow(new BC_Title(x, 
184 //              y, 
185 //              _("Filesystem prefix on remote nodes:")));
186 //      add_subwindow(new PrefsRenderFarmMountpoint(pwindow, 
187 //              this, 
188 //              x + xmargin3, 
189 //              y));
190 //      y += 30;
192         return 0;
195 void PerformancePrefs::generate_node_list()
197         int selected_row = node_list ? node_list->get_selection_number(0, 0) : -1;
198         nodes[0].remove_all_objects();
199         nodes[1].remove_all_objects();
200         nodes[2].remove_all_objects();
201         nodes[3].remove_all_objects();
202         for(int i = 0; 
203                 i < pwindow->thread->preferences->renderfarm_nodes.total; 
204                 i++)
205         {
206                 BC_ListBoxItem *item;
207                 nodes[0].append(item = new BC_ListBoxItem(
208                         (char*)(pwindow->thread->preferences->renderfarm_enabled.values[i] ? "X" : " ")));
209                 if(i == selected_row) item->set_selected(1);
211                 nodes[1].append(item = new BC_ListBoxItem(
212                         pwindow->thread->preferences->renderfarm_nodes.values[i]));
213                 if(i == selected_row) item->set_selected(1);
215                 char string[BCTEXTLEN];
216                 sprintf(string, "%d", pwindow->thread->preferences->renderfarm_ports.values[i]);
217                 nodes[2].append(item = new BC_ListBoxItem(string));
218                 if(i == selected_row) item->set_selected(1);
220                 sprintf(string, "%0.3f", pwindow->thread->preferences->renderfarm_rate.values[i]);
221                 nodes[3].append(item = new BC_ListBoxItem(string));
222                 if(i == selected_row) item->set_selected(1);
223         }
226 static char *titles[] = 
228         N_("On"),
229         N_("Hostname"),
230         N_("Port"),
231         N_("Framerate")
234 static int widths[] = 
236         30,
237         150,
238         50,
239         50
243 void PerformancePrefs::update_node_list()
245         node_list->update(nodes,
246                                                 titles,
247                                                 widths,
248                                                 4,
249                                                 node_list->get_xposition(),
250                                                 node_list->get_yposition(),
251                                                 node_list->get_selection_number(0, 0));
256 PrefsUseBRender::PrefsUseBRender(PreferencesWindow *pwindow, 
257         int x,
258         int y)
259  : BC_CheckBox(x, 
260         y, 
261         pwindow->thread->preferences->use_brender, 
262         _("Use background rendering"))
264         this->pwindow = pwindow;
267 int PrefsUseBRender::handle_event()
269         pwindow->thread->redraw_overlays = 1;
270         pwindow->thread->redraw_times = 1;
271         pwindow->thread->preferences->use_brender = get_value();
272         return 1;
280 PrefsBRenderFragment::PrefsBRenderFragment(PreferencesWindow *pwindow, 
281         PerformancePrefs *subwindow, 
282         int x, 
283         int y)
284  : BC_TumbleTextBox(subwindow, 
285         (int64_t)pwindow->thread->preferences->brender_fragment,
286         (int64_t)1, 
287         (int64_t)65535,
288         x,
289         y,
290         100)
292         this->pwindow = pwindow;
294 int PrefsBRenderFragment::handle_event()
296         pwindow->thread->preferences->brender_fragment = atol(get_text());
297         return 1;
310 CICacheSize::CICacheSize(int x, 
311         int y, 
312         PreferencesWindow *pwindow, 
313         PerformancePrefs *subwindow)
314  : BC_TumbleTextBox(subwindow,
315         (int64_t)pwindow->thread->preferences->cache_size / 0x100000,
316         (int64_t)MIN_CACHE_SIZE / 0x100000,
317         (int64_t)MAX_CACHE_SIZE / 0x100000,
318         x, 
319         y, 
320         100)
322         this->pwindow = pwindow;
323         set_increment(1);
326 int CICacheSize::handle_event()
328         int64_t result;
329         result = (int64_t)atol(get_text()) * 0x100000;
330         CLAMP(result, MIN_CACHE_SIZE, MAX_CACHE_SIZE);
331         pwindow->thread->preferences->cache_size = result;
332         return 0;
336 PrefsRenderPreroll::PrefsRenderPreroll(PreferencesWindow *pwindow, 
337                 PerformancePrefs *subwindow, 
338                 int x, 
339                 int y)
340  : BC_TumbleTextBox(subwindow, 
341         (float)pwindow->thread->preferences->render_preroll,
342         (float)0, 
343         (float)100,
344         x,
345         y,
346         100)
348         this->pwindow = pwindow;
350 PrefsRenderPreroll::~PrefsRenderPreroll()
353 int PrefsRenderPreroll::handle_event()
355         pwindow->thread->preferences->render_preroll = atof(get_text());
356         return 1;
360 PrefsBRenderPreroll::PrefsBRenderPreroll(PreferencesWindow *pwindow, 
361                 PerformancePrefs *subwindow, 
362                 int x, 
363                 int y)
364  : BC_TumbleTextBox(subwindow, 
365         (int64_t)pwindow->thread->preferences->brender_preroll,
366         (int64_t)0, 
367         (int64_t)100,
368         x,
369         y,
370         100)
372         this->pwindow = pwindow;
374 int PrefsBRenderPreroll::handle_event()
376         pwindow->thread->preferences->brender_preroll = atol(get_text());
377         return 1;
390 PrefsRenderFarm::PrefsRenderFarm(PreferencesWindow *pwindow, int x, int y)
391  : BC_CheckBox(x, 
392         y, 
393         pwindow->thread->preferences->use_renderfarm,
394         _("Use render farm"))
396         this->pwindow = pwindow;
398 PrefsRenderFarm::~PrefsRenderFarm()
401 int PrefsRenderFarm::handle_event()
403         pwindow->thread->preferences->use_renderfarm = get_value();
404         return 1;
410 PrefsForceUniprocessor::PrefsForceUniprocessor(PreferencesWindow *pwindow, int x, int y)
411  : BC_CheckBox(x, 
412         y, 
413         pwindow->thread->preferences->force_uniprocessor,
414         _("Force single processor use"))
416         this->pwindow = pwindow;
418 PrefsForceUniprocessor::~PrefsForceUniprocessor()
421 int PrefsForceUniprocessor::handle_event()
423         pwindow->thread->preferences->force_uniprocessor = get_value();
424         return 1;
433 PrefsRenderFarmConsolidate::PrefsRenderFarmConsolidate(PreferencesWindow *pwindow, int x, int y)
434  : BC_CheckBox(x, 
435         y, 
436         pwindow->thread->preferences->renderfarm_consolidate,
437         _("Consolidate output files on completion"))
439         this->pwindow = pwindow;
441 PrefsRenderFarmConsolidate::~PrefsRenderFarmConsolidate()
444 int PrefsRenderFarmConsolidate::handle_event()
446         pwindow->thread->preferences->renderfarm_consolidate = get_value();
447         return 1;
454 PrefsRenderFarmPort::PrefsRenderFarmPort(PreferencesWindow *pwindow, 
455         PerformancePrefs *subwindow, 
456         int x, 
457         int y)
458  : BC_TumbleTextBox(subwindow, 
459         (int64_t)pwindow->thread->preferences->renderfarm_port,
460         (int64_t)1, 
461         (int64_t)65535,
462         x,
463         y,
464         100)
466         this->pwindow = pwindow;
469 PrefsRenderFarmPort::~PrefsRenderFarmPort()
473 int PrefsRenderFarmPort::handle_event()
475         pwindow->thread->preferences->renderfarm_port = atol(get_text());
476         return 1;
481 PrefsRenderFarmNodes::PrefsRenderFarmNodes(PreferencesWindow *pwindow, 
482         PerformancePrefs *subwindow, int x, int y)
483  : BC_ListBox(x, 
484                 y, 
485                 340, 
486                 230,
487                 LISTBOX_TEXT,                         // Display text list or icons
488                 subwindow->nodes,
489                 titles,
490                 widths,
491                 4)
493         this->subwindow = subwindow;
494         this->pwindow = pwindow;
496 PrefsRenderFarmNodes::~PrefsRenderFarmNodes()
500 int PrefsRenderFarmNodes::column_resize_event()
502         for(int i = 0; i < 3; i++)
503                 widths[i] = get_column_width(i);
504         return 1;
507 int PrefsRenderFarmNodes::handle_event()
509         if(get_selection_number(0, 0) >= 0)
510         {
511                 subwindow->hot_node = get_selection_number(1, 0);
512                 subwindow->edit_node->update(get_selection(1, 0)->get_text());
513                 subwindow->edit_port->update(get_selection(2, 0)->get_text());
514                 if(get_cursor_x() < widths[0])
515                 {
516                         pwindow->thread->preferences->renderfarm_enabled.values[subwindow->hot_node] = 
517                                 !pwindow->thread->preferences->renderfarm_enabled.values[subwindow->hot_node];
518                         subwindow->generate_node_list();
519                         subwindow->update_node_list();
520                 }
521         }
522         else
523         {
524                 subwindow->hot_node = -1;
525                 subwindow->edit_node->update("");
526         }
527         return 1;
528 }       
529 int PrefsRenderFarmNodes::selection_changed()
531         handle_event();
532         return 1;
541 PrefsRenderFarmEditNode::PrefsRenderFarmEditNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
542  : BC_TextBox(x, y, 240, 1, "")
544         this->pwindow = pwindow;
545         this->subwindow = subwindow;
548 PrefsRenderFarmEditNode::~PrefsRenderFarmEditNode()
552 int PrefsRenderFarmEditNode::handle_event()
554         return 1;
562 PrefsRenderFarmNewNode::PrefsRenderFarmNewNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
563  : BC_GenericButton(x, y, _("Add Node"))
565         this->pwindow = pwindow;
566         this->subwindow = subwindow;
568 PrefsRenderFarmNewNode::~PrefsRenderFarmNewNode()
571 int PrefsRenderFarmNewNode::handle_event()
573         pwindow->thread->preferences->add_node(subwindow->edit_node->get_text(),
574                 pwindow->thread->preferences->renderfarm_port,
575                 1,
576                 0.0);
577         pwindow->thread->preferences->reset_rates();
578         subwindow->generate_node_list();
579         subwindow->update_node_list();
580         subwindow->hot_node = -1;
581         return 1;
590 PrefsRenderFarmReplaceNode::PrefsRenderFarmReplaceNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
591  : BC_GenericButton(x, y, _("Apply Changes"))
593         this->pwindow = pwindow;
594         this->subwindow = subwindow;
596 PrefsRenderFarmReplaceNode::~PrefsRenderFarmReplaceNode()
599 int PrefsRenderFarmReplaceNode::handle_event()
601         if(subwindow->hot_node >= 0)
602         {
603                 pwindow->thread->preferences->edit_node(subwindow->hot_node, 
604                         subwindow->edit_node->get_text(),
605                         pwindow->thread->preferences->renderfarm_port,
606                         pwindow->thread->preferences->renderfarm_enabled.values[subwindow->hot_node]);
607                 subwindow->generate_node_list();
608                 subwindow->update_node_list();
609         }
610         return 1;
617 PrefsRenderFarmDelNode::PrefsRenderFarmDelNode(PreferencesWindow *pwindow, PerformancePrefs *subwindow, int x, int y)
618  : BC_GenericButton(x, y, _("Delete Node"))
620         this->pwindow = pwindow;
621         this->subwindow = subwindow;
623 PrefsRenderFarmDelNode::~PrefsRenderFarmDelNode()
626 int PrefsRenderFarmDelNode::handle_event()
628         if(strlen(subwindow->edit_node->get_text()))
629         {
630                 pwindow->thread->preferences->delete_node(subwindow->hot_node);
631                 subwindow->generate_node_list();
632                 subwindow->update_node_list();
633                 subwindow->hot_node = -1;
634         }
635         return 1;
642 PrefsRenderFarmSortNodes::PrefsRenderFarmSortNodes(PreferencesWindow *pwindow, 
643         PerformancePrefs *subwindow, 
644         int x, 
645         int y)
646  : BC_GenericButton(x, y, _("Sort nodes"))
648         this->pwindow = pwindow;
649         this->subwindow = subwindow;
652 PrefsRenderFarmSortNodes::~PrefsRenderFarmSortNodes()
656 int PrefsRenderFarmSortNodes::handle_event()
658         pwindow->thread->preferences->sort_nodes();
659         subwindow->generate_node_list();
660         subwindow->update_node_list();
661         subwindow->hot_node = -1;
662         return 1;
669 PrefsRenderFarmReset::PrefsRenderFarmReset(PreferencesWindow *pwindow, 
670         PerformancePrefs *subwindow, 
671         int x, 
672         int y)
673  : BC_GenericButton(x, y, _("Reset rates"))
675         this->pwindow = pwindow;
676         this->subwindow = subwindow;
679 int PrefsRenderFarmReset::handle_event()
681         pwindow->thread->preferences->reset_rates();
682         subwindow->generate_node_list();
683         subwindow->update_node_list();
685         char string[BCTEXTLEN];
686         sprintf(string, 
687                 MASTER_NODE_FRAMERATE_TEXT, 
688                 pwindow->thread->preferences->local_rate);
689         subwindow->master_rate->update(string);
690         subwindow->hot_node = -1;
691         return 1;
700 PrefsRenderFarmJobs::PrefsRenderFarmJobs(PreferencesWindow *pwindow, 
701                 PerformancePrefs *subwindow, 
702                 int x, 
703                 int y)
704  : BC_TumbleTextBox(subwindow, 
705         (int64_t)pwindow->thread->preferences->renderfarm_job_count,
706         (int64_t)1, 
707         (int64_t)100,
708         x,
709         y,
710         100)
712         this->pwindow = pwindow;
714 PrefsRenderFarmJobs::~PrefsRenderFarmJobs()
717 int PrefsRenderFarmJobs::handle_event()
719         pwindow->thread->preferences->renderfarm_job_count = atol(get_text());
720         return 1;
725 PrefsRenderFarmMountpoint::PrefsRenderFarmMountpoint(PreferencesWindow *pwindow, 
726                 PerformancePrefs *subwindow, 
727                 int x, 
728                 int y)
729  : BC_TextBox(x, 
730         y, 
731         100,
732         1,
733         pwindow->thread->preferences->renderfarm_mountpoint)
735         this->pwindow = pwindow;
736         this->subwindow = subwindow;
738 PrefsRenderFarmMountpoint::~PrefsRenderFarmMountpoint()
741 int PrefsRenderFarmMountpoint::handle_event()
743         strcpy(pwindow->thread->preferences->renderfarm_mountpoint, get_text());
744         return 1;
750 PrefsRenderFarmVFS::PrefsRenderFarmVFS(PreferencesWindow *pwindow,
751         PerformancePrefs *subwindow,
752         int x,
753         int y)
754  : BC_CheckBox(x, y, pwindow->thread->preferences->renderfarm_vfs, _("Use virtual filesystem"))
756         this->pwindow = pwindow;
757         this->subwindow = subwindow;
760 int PrefsRenderFarmVFS::handle_event()
762         pwindow->thread->preferences->renderfarm_vfs = get_value();
763         return 1;