X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fbatchrender.C;h=6f1129f0afcee60f51c86c9c45ae89d7327b0845;hp=e3ff86e127727d2d10141e12769fa50eea9ed89e;hb=721a106de35567bcab14a0e92718767189acf176;hpb=8b315b1f6c8c44d65132cbbd558180ab03a585c0 diff --git a/cinelerra-5.1/cinelerra/batchrender.C b/cinelerra-5.1/cinelerra/batchrender.C index e3ff86e1..6f1129f0 100644 --- a/cinelerra-5.1/cinelerra/batchrender.C +++ b/cinelerra-5.1/cinelerra/batchrender.C @@ -409,6 +409,26 @@ char* BatchRenderThread::get_current_edl() return get_current_job()->edl_path; } +int BatchRenderThread::test_errmsg(BatchRenderWarnJobs &err_jobs, const char *msg, int *warn) +{ + int count = err_jobs.size(); + if( !count ) return 0; + fprintf(stderr, msg, count); + char string[BCTEXTLEN], *sp = string, *ep = sp+sizeof(string)-1; + sp += snprintf(sp,ep-sp, msg,count); + for( int i=0; ishow_warning(warn, string); + if( mwindow->wait_warning() ) { + gui->button_enable(); + } + return 1; +} // Test EDL files for existence int BatchRenderThread::test_edl_files() @@ -417,10 +437,12 @@ int BatchRenderThread::test_edl_files() const char *path = 0; BatchRenderWarnJobs not_equiv; BatchRenderWarnJobs empty_jobs; + BatchRenderWarnJobs no_labels; + BatchRenderWarnJobs no_rendering; for( int i=0; !ret && ienabled ) continue; - path = jobs.values[i]->edl_path; + path = jobs[i]->edl_path; int is_script = *path == '@' ? 1 : 0; if( is_script ) ++path; FILE *fp = fopen(path, "r"); @@ -443,10 +465,17 @@ int BatchRenderThread::test_edl_files() file.set_shared_input(&data); edl->load_xml(&file, LOAD_ALL); } double pos = edl->equivalent_output(mwindow->edl); - if( pos >= 0 ) not_equiv.add(i+1, path); + if( pos >= 0 ) + not_equiv.add(i+1, path); double length = edl->tracks->total_playable_length(); double start = edl->local_session->get_selectionstart(1); - if( start >= length ) empty_jobs.add(i+1, path); + if( start >= length ) + empty_jobs.add(i+1, path); + if( jobs[i]->labeled && !edl->labels->first) + no_labels.add(i+1,path); + Asset *asset = jobs[i]->asset; + if( !asset->audio_data && !asset->video_data ) + no_rendering.add(i+1,path); edl->remove_user(); } delete [] bfr; @@ -472,47 +501,21 @@ int BatchRenderThread::test_edl_files() fprintf(stderr, "%s", string); } is_rendering = 0; + ret = 1; } - int mismatched = not_equiv.size(); - if( is_rendering && warn && mwindow && mismatched > 0 ) { - fprintf(stderr, _("%d job EDLs do not match session edl\n"), mismatched); - char string[BCTEXTLEN], *sp = string, *ep = sp+sizeof(string)-1; - sp += snprintf(sp,ep-sp, _("%d job EDLs do not match session edl\n"),mismatched); - for( int i=0; ishow_warning(&warn, string); - if( mwindow->wait_warning() ) { - gui->button_enable(); - is_rendering = 0; - ret = 1; - } - gui->warning->update(warn); + if( !ret && warn && mwindow ) { + ret = test_errmsg(not_equiv, _("%d job EDLs do not match session edl\n"), &warn); + if( !warn ) gui->warning->update(0); } - - int empty = empty_jobs.size(); - if( is_rendering && empty > 0 ) { - fprintf(stderr, _("%d job EDLs begin position beyond end of media\n"), empty); - char string[BCTEXTLEN], *sp = string, *ep = sp+sizeof(string)-1; - sp += snprintf(sp,ep-sp, _("%d job EDLs begin position beyond end of media\n"), empty); - for( int i=0; ishow_warning(0, string); - if( mwindow->wait_warning() ) { - gui->button_enable(); - is_rendering = 0; - ret = 1; - } - } - + if( !ret && mwindow ) + ret = test_errmsg(empty_jobs, _("%d job EDLs begin position beyond end of media\n"), 0); + if( !ret && mwindow ) + ret = test_errmsg(no_rendering, _("%d job EDLs no audio or video in render asset format\n"), 0); + if( !ret && mwindow ) + ret = test_errmsg(no_labels, _("%d job EDLs render file per label and no labels\n"), 0); + if( ret ) + is_rendering = 0; return ret; } @@ -538,12 +541,13 @@ void BatchRenderThread::calculate_dest_paths(ArrayList *paths, command->playback_range_adjust_inout(); // Create test packages - packages->create_packages(mwindow, command->get_edl(), + int result = packages->create_packages(mwindow, command->get_edl(), preferences, job->get_strategy(), job->asset, command->start_position, command->end_position, 0); + if( !result ) + packages->get_package_paths(paths); // Append output paths allocated to total - packages->get_package_paths(paths); // Delete package harness delete packages;