It still doesn't work, resize event missing, and probably I must do i/o points just like labels - per job?
Also, interested parties can change BatchRenderJob::get_strategy for returning RANGE_PROJECT and not RANGE_SELECTION ... Not sure if we should make this GUI-configurable .....
diff --git a/cinelerra-5.1/cinelerra/batchrender.C b/cinelerra-5.1/cinelerra/batchrender.C index 8a89c925..825d6706 100644 --- a/cinelerra-5.1/cinelerra/batchrender.C +++ b/cinelerra-5.1/cinelerra/batchrender.C @@ -60,6 +60,7 @@ #include "dvdcreate.h" #include "bdcreate.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") @@ -74,16 +75,17 @@ BatchRenderMenuItem::BatchRenderMenuItem(MWindow *mwindow) int BatchRenderMenuItem::handle_event() { - mwindow->batch_render->start(1, 1); + mwindow->batch_render->start(1, 1, 0); return 1; } BatchRenderJob::BatchRenderJob(const char *tag, - Preferences *preferences, int labeled, int farmed) + Preferences *preferences, int labeled, int farmed, int iopointed) { this->tag = tag; this->preferences = preferences; this->labeled = labeled; + this->iopointed = iopointed; this->farmed = farmed >= 0 ? farmed : preferences->use_renderfarm; asset = new Asset; edl_path[0] = 0; @@ -91,8 +93,8 @@ BatchRenderJob::BatchRenderJob(const char *tag, elapsed = 0; } -BatchRenderJob::BatchRenderJob(Preferences *preferences, int labeled, int farmed) - : BatchRenderJob("JOB", preferences, labeled, farmed) +BatchRenderJob::BatchRenderJob(Preferences *preferences, int labeled, int farmed, int iopointed) + : BatchRenderJob("JOB", preferences, labeled, farmed, iopointed) { } @@ -106,6 +108,7 @@ void BatchRenderJob::copy_from(BatchRenderJob *src) enabled = src->enabled; farmed = src->farmed; labeled = src->labeled; + iopointed = src->iopointed; asset->copy_from(src->asset, 0); strcpy(edl_path, src->edl_path); elapsed = 0; @@ -113,7 +116,7 @@ void BatchRenderJob::copy_from(BatchRenderJob *src) BatchRenderJob *BatchRenderJob::copy() { - BatchRenderJob *t = new BatchRenderJob(tag, preferences, labeled, farmed); + BatchRenderJob *t = new BatchRenderJob(tag, preferences, labeled, farmed, iopointed); t->copy_from(this); return t; } @@ -127,6 +130,7 @@ void BatchRenderJob::load(FileXML *file) enabled = file->tag.get_property("ENABLED", enabled); farmed = file->tag.get_property("FARMED", farmed); labeled = file->tag.get_property("LABELED", labeled); + iopointed = file->tag.get_property("IOPOINTED", iopointed); edl_path[0] = 0; file->tag.get_property("EDL_PATH", edl_path); elapsed = file->tag.get_property("ELAPSED", elapsed); @@ -154,6 +158,7 @@ void BatchRenderJob::save(FileXML *file) file->tag.set_property("ENABLED", enabled); file->tag.set_property("FARMED", farmed); file->tag.set_property("LABELED", labeled); + file->tag.set_property("IOPOINTED", iopointed); file->tag.set_property("EDL_PATH", edl_path); file->tag.set_property("ELAPSED", elapsed); file->append_tag(); @@ -183,6 +188,11 @@ int BatchRenderJob::get_strategy() { int range = File::is_image_render(asset->format) ? RANGE_1FRAME : RANGE_SELECTION; + + if (iopointed) + range = RANGE_INOUT; + + printf("Range-strategy: %i \n", range); return Render::get_strategy(farmed, labeled, range); } @@ -202,6 +212,7 @@ BatchRenderThread::BatchRenderThread(MWindow *mwindow) batch_path[0] = 0; do_farmed = 0; do_labeled = 0; + do_iopointed = 0; } BatchRenderThread::~BatchRenderThread() @@ -225,8 +236,9 @@ void BatchRenderThread::reset(const char *path) jobs.remove_all_objects(); } -void BatchRenderThread::start(int do_farmed, int do_labeled) +void BatchRenderThread::start(int do_farmed, int do_labeled, int do_iopointed) { + this->do_iopointed = do_iopointed; this->do_farmed = do_farmed; this->do_labeled = do_labeled; BC_DialogThread::start(); @@ -244,7 +256,7 @@ BC_Window* BatchRenderThread::new_gui() { current_start = 0.0; current_end = 0.0; - default_job = new BatchRenderJob(mwindow->preferences, 0, -1); + default_job = new BatchRenderJob(mwindow->preferences, 0, -1, 0); load_jobs(batch_path, mwindow->preferences); load_defaults(mwindow->defaults); this->gui = new BatchRenderGUI(mwindow, this, @@ -254,27 +266,68 @@ BC_Window* BatchRenderThread::new_gui() return this->gui; } +int BatchRenderThread::probe(const char *path) +{ + FILE *fp = fopen(path, "rb"); + if( !fp ) return FILE_NOT_FOUND; + char data[16]; + memset(data,0,sizeof(data)); + int ret = fread(data, 1, 16, fp); + fclose(fp); + if( !ret ) return FILE_NOT_FOUND; + + + if ( !strncmp(&data[0],"<",1) && + ( !strncmp(&data[1],"EDL>",4) || + !strncmp(&data[1],"HTAL>",5) || + !strncmp(&data[1],"?xml",4) )) + return FILE_IS_XML; + return FILE_UNRECOGNIZED_CODEC; +} void BatchRenderThread::load_jobs(char *path, Preferences *preferences) { FileXML file; int result = 0; + jobs.remove_all_objects(); if( !path ) path = batch_path; if( !path[0] ) create_path(path); file.read_from_file(path); + int fileprobe = probe(path); + if (fileprobe == FILE_IS_XML) { + + + const char *cin_version = 0; + while( !file.read_tag() ) { + if( file.tag.title_is("EDL") ) { + cin_version = file.tag.get_property("VERSION"); + break; + } + } + + file.rewind(); + if( cin_version ) { + printf(_("XML file %s\n IS project from cinelerra. \n You need batchrender-specific XML as argument for -r !!!! \n"), path); + if (!mwindow) + exit(1); + } + + file.rewind(); + + while( !result ) { if( !(result = file.read_tag()) ) { if( file.tag.title_is("JOBS") ) { - if (mwindow->preferences->unsafe_gui) + if (mwindow && mwindow->preferences->unsafe_gui) warn = file.tag.get_property("WARN", 1); - if (!mwindow->preferences->unsafe_gui) + if (mwindow && !mwindow->preferences->unsafe_gui) warn = 0; } else if( file.tag.title_is("JOB") ) { - BatchRenderJob *job = new BatchRenderJob(preferences, 0,0); + BatchRenderJob *job = new BatchRenderJob(preferences, 0,0,0); jobs.append(job); job->load(&file); } @@ -290,13 +343,18 @@ void BatchRenderThread::load_jobs(char *path, Preferences *preferences) } } } + } + if (!mwindow && fileprobe != FILE_IS_XML) { + printf ("Not XML file! \n"); + exit(1); + } } void BatchRenderThread::save_jobs(char *path) { FileXML file; file.tag.set_title("JOBS"); - if (mwindow->preferences->unsafe_gui) + if (mwindow && mwindow->preferences->unsafe_gui) file.tag.set_property("WARN", warn); file.append_tag(); file.append_newline(); @@ -458,6 +516,9 @@ int BatchRenderThread::test_edl_files() int is_script = *path == '@' ? 1 : 0; if( is_script ) ++path; FILE *fp = fopen(path, "r"); + + int fileprobe = probe(path); + if( fp ) { if( mwindow && !is_script ) { char *bfr = 0; size_t sz = 0; @@ -470,7 +531,7 @@ int BatchRenderThread::test_edl_files() else bfr[sz] = 0; } - if( !ret ) { + if( !ret && fileprobe == FILE_IS_XML) { EDL *edl = new EDL; edl->create_objects(); XMLBuffer data(bfr, sz, 0); { FileXML file; @@ -764,7 +825,7 @@ void BatchRenderGUI::create_objects() int x = mwindow->theme->batchrender_x1; int y = ys5; int x1 = x, x2 = get_w()/2 + xs30; // mwindow->theme->batchrender_x2; - int y1 = ys5, y2 = ys5; + int y1 = ys5, y2 = ys5, y3 = ys5; // output file add_subwindow(output_path_title = new BC_Title(x1, y1, _("Output path:"))); @@ -786,6 +847,7 @@ void BatchRenderGUI::create_objects() use_renderfarm->disable(); } + // input EDL add_subwindow(edl_path_title = new BC_Title(x2, y2, _("EDL Path:"))); y2 += edl_path_title->get_h() + mwindow->theme->widget_border; @@ -819,8 +881,16 @@ void BatchRenderGUI::create_objects() 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; + + // add IOpoints checkbox + y3 += y1 + 1; + add_subwindow(use_iopoints = new BatchRenderUseIOpoints(thread, x1, y3)); + y = y1 + use_iopoints->get_h() + 10 + mwindow->theme->widget_border; + + add_subwindow(list_title = new BC_Title(x, y, _("Batches to render:"))); x1 = x + list_title->get_w() + mwindow->theme->widget_border;; @@ -1389,6 +1459,19 @@ int BatchRenderStop::handle_event() } +BatchRenderUseIOpoints::BatchRenderUseIOpoints(BatchRenderThread *thread, int x, int y) + : BC_CheckBox(x, y, thread->do_iopointed, _("Respect In/Out points in projects")) +{ + this->thread = thread; + set_tooltip(_("Respect In/Out points in projects")); +} + +int BatchRenderUseIOpoints::handle_event() +{ + thread->do_iopointed = get_value(); + return 1; +} + BatchRenderWarning::BatchRenderWarning(BatchRenderThread *thread, int x, int y) : BC_CheckBox(x, y, thread->warn, _("warn if jobs/session mismatched")) { diff --git a/cinelerra-5.1/cinelerra/batchrender.h b/cinelerra-5.1/cinelerra/batchrender.h index 57309895..f606c9bf 100644 --- a/cinelerra-5.1/cinelerra/batchrender.h +++ b/cinelerra-5.1/cinelerra/batchrender.h @@ -57,8 +57,8 @@ class BatchRenderJob { public: BatchRenderJob(const char *tag, - Preferences *preferences, int labeled, int farmed); - BatchRenderJob(Preferences *preferences, int labeled, int farmed); + Preferences *preferences, int labeled, int farmed, int iopointed); + BatchRenderJob(Preferences *preferences, int labeled, int farmed, int iopointed); BatchRenderJob(const char *tag); virtual ~BatchRenderJob(); virtual BatchRenderJob *copy(); @@ -73,7 +73,7 @@ public: char edl_path[BCTEXTLEN]; // Destination file for output Asset *asset; - int labeled, farmed; + int labeled, farmed, iopointed; int enabled; // Amount of time elapsed in last render operation double elapsed; @@ -116,6 +116,7 @@ public: void reset(const char *path=0); // Load batch rendering jobs void load_jobs(char *path, Preferences *preferences); + int probe(const char *path); // Not applicable to western civilizations void save_jobs(char *path=0); void load_defaults(BC_Hash *defaults); @@ -139,7 +140,7 @@ public: void update_active(int number); void update_done(int number, int create_list, double elapsed_time); void move_batch(int src, int dst); - void start(int do_farmed, int do_labeled); + void start(int do_farmed, int do_labeled, int do_iopointed); static void trap_hook(FILE *fp, void *vp); MWindow *mwindow; @@ -158,6 +159,7 @@ public: int list_width[BATCHRENDER_COLUMNS]; int do_farmed; int do_labeled; + int do_iopointed; // job being edited int current_job; // job being rendered @@ -314,6 +316,15 @@ public: int *output; }; +class BatchRenderUseIOpoints : public BC_CheckBox +{ +public: + BatchRenderUseIOpoints(BatchRenderThread *thread, int x, int y); + int handle_event(); + BatchRenderThread *thread; + +}; + class BatchRenderGUI : public BC_Window { @@ -363,6 +374,7 @@ public: BatchRenderCurrentEDL *use_current_edl; BatchRenderUpdateEDL *update_selected_edl; BatchRenderUseFarm *use_renderfarm; + BatchRenderUseIOpoints *use_iopoints; }; diff --git a/cinelerra-5.1/cinelerra/bdcreate.C b/cinelerra-5.1/cinelerra/bdcreate.C index 93794d51..fedc5648 100644 --- a/cinelerra-5.1/cinelerra/bdcreate.C +++ b/cinelerra-5.1/cinelerra/bdcreate.C @@ -94,7 +94,7 @@ int CreateBD_MenuItem::handle_event() } BD_BatchRenderJob::BD_BatchRenderJob(Preferences *preferences, int labeled, int farmed) - : BatchRenderJob("BD_JOB", preferences, labeled, farmed) + : BatchRenderJob("BD_JOB", preferences, labeled, farmed, iopointed) { } @@ -425,7 +425,7 @@ void CreateBD_Thread::handle_close_event(int result) mwindow->resync_guis(); if( ret ) return; mwindow->batch_render->save_jobs(); - mwindow->batch_render->start(-use_farmed, -use_labeled); + mwindow->batch_render->start(-use_farmed, -use_labeled, 0); } BC_Window* CreateBD_Thread::new_gui() diff --git a/cinelerra-5.1/cinelerra/dvdcreate.C b/cinelerra-5.1/cinelerra/dvdcreate.C index 4c8ab188..5b0e335f 100644 --- a/cinelerra-5.1/cinelerra/dvdcreate.C +++ b/cinelerra-5.1/cinelerra/dvdcreate.C @@ -98,7 +98,7 @@ int CreateDVD_MenuItem::handle_event() DVD_BatchRenderJob::DVD_BatchRenderJob(Preferences *preferences, int labeled, int farmed, int standard, int muxed) - : BatchRenderJob("DVD_JOB", preferences, labeled, farmed) + : BatchRenderJob("DVD_JOB", preferences, labeled, farmed, iopointed) { this->standard = standard; this->muxed = muxed; @@ -412,7 +412,7 @@ int CreateDVD_Thread::create_dvd_jobs(ArrayList<BatchRenderJob*> *jobs, const ch asset->ff_video_quality = -1; use_farmed = job->farmed; - job = new BatchRenderJob(mwindow->preferences, 0, 0); + job = new BatchRenderJob(mwindow->preferences, 0, 0, 0); jobs->append(job); strcpy(&job->edl_path[0], xml_filename); asset = job->asset; @@ -441,7 +441,7 @@ int CreateDVD_Thread::create_dvd_jobs(ArrayList<BatchRenderJob*> *jobs, const ch asset->vmpeg_field_order = 0; asset->vmpeg_pframe_distance = 0; use_farmed = job->farmed; - job = new BatchRenderJob(mwindow->preferences, 0, 0); + job = new BatchRenderJob(mwindow->preferences, 0, 0, 0); jobs->append(job); strcpy(&job->edl_path[0], xml_filename); asset = job->asset; @@ -547,7 +547,7 @@ void CreateDVD_Thread::handle_close_event(int result) mwindow->resync_guis(); if( ret ) return; mwindow->batch_render->save_jobs(); - mwindow->batch_render->start(-use_farmed, -use_labeled); + mwindow->batch_render->start(-use_farmed, -use_labeled, 0); } BC_Window* CreateDVD_Thread::new_gui()
-- Cin mailing list Cin@lists.cinelerra-gg.org https://lists.cinelerra-gg.org/mailman/listinfo/cin