Credit Andrew - fix vorbis audio which was scratchy and ensure aging plugin does...
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / batchrender.C
index 6dcdbc62f69fd7bf8fcd0015f011de87b2e93786..c010f18567a36df5a66f98078c489eb59fefda02 100644 (file)
@@ -2,6 +2,7 @@
 /*
  * CINELERRA
  * Copyright (C) 2011 Adam Williams <broadcast at earthling dot net>
+ * Copyright (C) 2003-2016 Cinelerra CV contributors
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -60,6 +61,8 @@
 #include "dvdcreate.h"
 #include "bdcreate.h"
 
+#include <stdlib.h>
+
 int BatchRenderThread::column_widths[] = { 42, 42, 42, 222, 222, 150 };
 const char *BatchRenderThread::column_titles[] = {
        N_("Enabled"), N_("Labeled"), N_("Farmed"), N_("Output"), N_("EDL"), N_("Elapsed")
@@ -197,7 +200,7 @@ BatchRenderThread::BatchRenderThread(MWindow *mwindow)
        default_job = 0;
        boot_defaults = 0;
        preferences = 0;
-       warn = 1;
+       warn = 0;
        render = 0;
        batch_path[0] = 0;
        do_farmed = 0;
@@ -268,7 +271,10 @@ void BatchRenderThread::load_jobs(char *path, Preferences *preferences)
        while( !result ) {
                if( !(result = file.read_tag()) ) {
                        if( file.tag.title_is("JOBS") ) {
+                               if (mwindow && mwindow->preferences->unsafe_gui)
                                warn = file.tag.get_property("WARN", 1);
+                               if (mwindow && !mwindow->preferences->unsafe_gui)
+                               warn = 0;
                        }
                        else if( file.tag.title_is("JOB") ) {
                                BatchRenderJob *job =  new BatchRenderJob(preferences, 0,0);
@@ -293,6 +299,7 @@ void BatchRenderThread::save_jobs(char *path)
 {
        FileXML file;
        file.tag.set_title("JOBS");
+       if (mwindow && mwindow->preferences->unsafe_gui)
        file.tag.set_property("WARN", warn);
        file.append_tag();
        file.append_newline();
@@ -387,6 +394,9 @@ void BatchRenderThread::update_selected_edl()
         FileXML xml_file;
        char *path = get_current_edl();
        EDL *edl = mwindow->edl;
+       // result = 1 if user cancelled operation
+       int result = ConfirmSave::test_file(mwindow, path);
+       if (!result) {
         edl->save_xml(&xml_file, path);
         xml_file.terminate_string();
         if( xml_file.write_to_file(path) ) {
@@ -394,6 +404,7 @@ void BatchRenderThread::update_selected_edl()
                sprintf(msg, _("Unable to save: %s"), path);
                MainError::show_error(msg);
        }
+       }
 }
 
 BatchRenderJob* BatchRenderThread::get_current_job()
@@ -532,7 +543,7 @@ void BatchRenderThread::calculate_dest_paths(ArrayList<char*> *paths,
                        PackageDispatcher *packages = new PackageDispatcher;
 
 // Load EDL
-                       TransportCommand *command = new TransportCommand;
+                       TransportCommand *command = new TransportCommand(preferences);
                        FileXML *file = new FileXML;
                        file->read_from_file(job->edl_path);
 
@@ -587,8 +598,10 @@ void BatchRenderThread::start_rendering(char *config_path,
        else {
                BC_Trace::disable_locks();
        }
-
+// In batch mode there is no mwindow, so init_plugins is called with
+// mwindow* = NULL.
        MWindow::init_plugins(0, preferences);
+       MWindow::init_ladspa_plugins(0, preferences);  
        char font_path[BCTEXTLEN];
        strcpy(font_path, preferences->plugin_dir);
        strcat(font_path, "/" FONT_SEARCHPATH);
@@ -733,6 +746,8 @@ BatchRenderGUI::BatchRenderGUI(MWindow *mwindow,
        this->mwindow = mwindow;
        this->thread = thread;
        use_renderfarm = 0;
+// *** CONTEXT_HELP ***
+       context_help_set_keyword("Batch Rendering");
 }
 
 BatchRenderGUI::~BatchRenderGUI()
@@ -792,8 +807,10 @@ void BatchRenderGUI::create_objects()
        y2 = y + edl_path_browse->get_h() + mwindow->theme->widget_border;
 
        x = x2;  y = y2;
+       if (mwindow->preferences->unsafe_gui) {
        add_subwindow(update_selected_edl = new BatchRenderUpdateEDL(thread, x, y));
        y += update_selected_edl->get_h() + mwindow->theme->widget_border;
+       }
        add_subwindow(use_current_edl = new BatchRenderCurrentEDL(thread, x, y));
        y += use_current_edl->get_h() + mwindow->theme->widget_border;
        if( !mwindow->edl || !mwindow->edl->path[0] ) use_current_edl->disable();
@@ -805,8 +822,10 @@ void BatchRenderGUI::create_objects()
        x += savelist_batch->get_w() + mwindow->theme->widget_border;
        add_subwindow(loadlist_batch = new BatchRenderLoadList(thread, x, y));
        y += loadlist_batch->get_h() + mwindow->theme->widget_border;
+       if (mwindow->preferences->unsafe_gui) {
        add_subwindow(warning = new BatchRenderWarning(thread, x2, y));
        y2 = y + warning->get_h() + mwindow->theme->widget_border;
+       }
        if( y2 > y1 ) y1 = y2;
        x = mwindow->theme->batchrender_x1, y = y1;
 
@@ -821,8 +840,10 @@ void BatchRenderGUI::create_objects()
        y += batch_list->get_h() + mwindow->theme->widget_border;
 
        add_subwindow(start_button = new BatchRenderStart(thread, x, y));
-       x = get_w() / 2 - BC_GenericButton::calculate_w(this, _("Stop")) / 2;
+       x = get_w() / 3 - BC_GenericButton::calculate_w(this, _("Stop")) / 3;
        add_subwindow(stop_button = new BatchRenderStop(thread, x, y));
+       x = get_w() / 1.5 - BC_GenericButton::calculate_w(this, _("?")) / 1.5;
+       add_subwindow(help_button = new BatchRenderHelp(thread, x, y));
        x = get_w() - BC_GenericButton::calculate_w(this, _("Close")) - xs10;
        add_subwindow(cancel_button = new BatchRenderCancel(thread, x, y));
 
@@ -835,6 +856,7 @@ void BatchRenderGUI::button_disable()
        new_batch->disable();
        delete_batch->disable();
        use_current_edl->disable();
+       if (mwindow->preferences->unsafe_gui)
        update_selected_edl->disable();
 }
 
@@ -844,6 +866,7 @@ void BatchRenderGUI::button_enable()
        delete_batch->enable();
        if( mwindow->edl && mwindow->edl->path[0] )
                use_current_edl->enable();
+       if (mwindow->preferences->unsafe_gui)
        update_selected_edl->enable();
 }
 
@@ -876,8 +899,10 @@ int BatchRenderGUI::resize_event(int w, int h)
        y2 = y + edl_path_browse->get_h() + mwindow->theme->widget_border;
 
        x = x2;  y = y2;
+       if (mwindow->preferences->unsafe_gui) {
        update_selected_edl->reposition_window(x, y);
        y += update_selected_edl->get_h() + mwindow->theme->widget_border;
+       }
        use_current_edl->reposition_window(x, y);
        y += use_current_edl->get_h() + mwindow->theme->widget_border;
        new_batch->reposition_window(x, y);
@@ -889,8 +914,9 @@ int BatchRenderGUI::resize_event(int w, int h)
        x += savelist_batch->get_w() + mwindow->theme->widget_border;
        loadlist_batch->reposition_window(x, y);
        y += loadlist_batch->get_h() + mwindow->theme->widget_border;
+       if (mwindow->preferences->unsafe_gui) {
        warning->reposition_window(x2, y);
-
+       }
        y1 = ys15 + BC_GenericButton::calculate_h() + mwindow->theme->widget_border;
        y2 = get_h() - y1 - batch_list->get_h();
        y2 -= list_title->get_h() + mwindow->theme->widget_border;
@@ -902,10 +928,12 @@ int BatchRenderGUI::resize_event(int w, int h)
        y += batch_list->get_h() + mwindow->theme->widget_border;
 
        start_button->reposition_window(x, y);
-       x = w / 2 - stop_button->get_w() / 2;
+       x = w / 3 - stop_button->get_w() / 3;
        stop_button->reposition_window(x, y);
        x = w - cancel_button->get_w() - xs10;
        cancel_button->reposition_window(x, y);
+       x = w / 1.5 - help_button->get_w() / 1.5;
+       help_button->reposition_window(x, y);
        return 1;
 }
 
@@ -1044,6 +1072,7 @@ BatchRenderNew::BatchRenderNew(BatchRenderThread *thread,
  : BC_GenericButton(x, y, _("New"))
 {
        this->thread = thread;
+       set_tooltip(_("Create a new batch"));
 }
 
 int BatchRenderNew::handle_event()
@@ -1056,6 +1085,7 @@ BatchRenderDelete::BatchRenderDelete(BatchRenderThread *thread, int x, int y)
  : BC_GenericButton(x, y, _("Delete"))
 {
        this->thread = thread;
+       set_tooltip(_("Delete loaded (highlighted) batch"));
 }
 
 int BatchRenderDelete::handle_event()
@@ -1138,7 +1168,7 @@ void BatchRenderSaveList::run()
 int BatchRenderSaveList::keypress_event() {
        if( get_keypress() == 's' ||
            get_keypress() == 'S' ) return handle_event();
-       return 0;
+       return context_help_check_and_show();
 }
 
 
@@ -1219,7 +1249,7 @@ void BatchRenderLoadList::run()
 int BatchRenderLoadList::keypress_event() {
        if( get_keypress() == 'o' ||
            get_keypress() == 'O' ) return handle_event();
-       return 0;
+       return context_help_check_and_show();
 }
 
 BatchRenderCurrentEDL::BatchRenderCurrentEDL(BatchRenderThread *thread,
@@ -1228,6 +1258,7 @@ BatchRenderCurrentEDL::BatchRenderCurrentEDL(BatchRenderThread *thread,
  : BC_GenericButton(x, y, _("Use Current EDL"))
 {
        this->thread = thread;
+       set_tooltip(_("Replaces highlighted batch job with session currently on timeline. File on disk NOT changed!"));
 }
 
 int BatchRenderCurrentEDL::handle_event()
@@ -1242,6 +1273,7 @@ BatchRenderUpdateEDL::BatchRenderUpdateEDL(BatchRenderThread *thread,
  : BC_GenericButton(x, y, _("Save to EDL Path"))
 {
        this->thread = thread;
+       set_tooltip(_("WARNING - saves to loaded (highlighted) EDL, *overwrites* highlighted project!"));
 }
 
 int BatchRenderUpdateEDL::handle_event()
@@ -1343,6 +1375,7 @@ BatchRenderStart::BatchRenderStart(BatchRenderThread *thread, int x, int y)
  : BC_GenericButton(x, y, _("Start"))
 {
        this->thread = thread;
+       set_tooltip(_("Start batch rendering"));
 }
 
 int BatchRenderStart::handle_event()
@@ -1355,6 +1388,7 @@ BatchRenderStop::BatchRenderStop(BatchRenderThread *thread, int x, int y)
  : BC_GenericButton(x, y, _("Stop"))
 {
        this->thread = thread;
+       set_tooltip(_("Stops currently active batch rendering"));
 }
 
 int BatchRenderStop::handle_event()
@@ -1370,6 +1404,7 @@ BatchRenderWarning::BatchRenderWarning(BatchRenderThread *thread, int x, int y)
  : BC_CheckBox(x, y, thread->warn, _("warn if jobs/session mismatched"))
 {
        this->thread = thread;
+       set_tooltip(_("Prevents rendering if loaded session and batch job(s) differ"));
 }
 
 int BatchRenderWarning::handle_event()
@@ -1382,6 +1417,7 @@ BatchRenderCancel::BatchRenderCancel(BatchRenderThread *thread, int x, int y)
  : BC_GenericButton(x, y, _("Close"))
 {
        this->thread = thread;
+       set_tooltip(_("Closes this window"));
 }
 
 int BatchRenderCancel::handle_event()
@@ -1402,6 +1438,20 @@ int BatchRenderCancel::keypress_event()
                thread->gui->set_done(1);
                return 1;
        }
+       return context_help_check_and_show();
+}
+
+//new help button
+BatchRenderHelp::BatchRenderHelp(BatchRenderThread *thread, int x, int y)
+ : BC_GenericButton(x, y, _("?"))
+{
+       this->thread = thread;
+       set_tooltip(_("Open quick start guide in default browser"));
+}
+
+int BatchRenderHelp::handle_event()
+{
+       system("xdg-open file://$CIN_DAT/doc/help_br_index.html");
        return 0;
 }