int Commercials:: read_ads(const char *filename) { char index_filename[BCTEXTLEN], source_filename[BCTEXTLEN]; IndexFile::get_index_filename(source_filename, mwindow->preferences->index_directory, index_filename, filename, ".ads"); tracks.remove_all_objects(); FileXML xml; if( xml.read_from_file(index_filename, 1) ) return 1; do { if( xml.read_tag() ) return 1; } while( !xml.tag.title_is("ADS") ); for(;;) { if( xml.read_tag() ) return 1; if( xml.tag.title_is("/ADS") ) break; if( xml.tag.title_is("CLIPS") ) { int pid = xml.tag.get_property("PID", (int)0); Clips *clips = new Clips(pid); tracks.append(clips); if( clips->load(xml) ) return 1; if( !xml.tag.title_is("/CLIPS") ) break; } } return 0; }
void ChannelDB::load(const char *filename) { if( !filename ) return; FileXML file; char path[BCTEXTLEN]; prefix_to_path(path, filename); channels.remove_all_objects(); int done = file.read_from_file(path, 1); channels.remove_all_objects(); // Load channels while(!done) { Channel *channel = new Channel; if(!(done = channel->load(&file))) channels.append(channel); else { delete channel; } } }
void BatchRenderThread::load_jobs(char *path, Preferences *preferences) { FileXML file; int result = 0; jobs.remove_all_objects(); if(path[0]) file.read_from_file(path); else file.read_from_file(create_path(path)); while(!result) { if(!(result = file.read_tag())) { if(file.tag.title_is("JOB")) { BatchRenderJob *job; jobs.append(job = new BatchRenderJob(preferences)); job->load(&file); } } } }
void BatchRenderThread::calculate_dest_paths(ArrayList<char*> *paths, Preferences *preferences) { for(int i = 0; i < jobs.total; i++) { BatchRenderJob *job = jobs.values[i]; if(job->enabled && *job->edl_path != '@') { PackageDispatcher *packages = new PackageDispatcher; // Load EDL TransportCommand *command = new TransportCommand; FileXML *file = new FileXML; file->read_from_file(job->edl_path); // Use command to calculate range. command->command = NORMAL_FWD; command->get_edl()->load_xml(file, LOAD_ALL); command->change_type = CHANGE_ALL; command->set_playback_range(); command->adjust_playback_range(); // Create test packages packages->create_packages(mwindow, command->get_edl(), preferences, job->strategy, job->asset, command->start_position, command->end_position, 0); // Append output paths allocated to total for(int j = 0; j < packages->get_total_packages(); j++) { RenderPackage *package = packages->get_package(j); paths->append(cstrdup(package->path)); } // Delete package harness delete packages; delete command; delete file; } } }
void RenderThread::run() { if(render->mode == Render::INTERACTIVE) { render_single(1, render->asset, mwindow->edl, render->strategy); } else if(render->mode == Render::BATCH) { // PRINT_TRACE // printf("RenderThread::run %d %d %d\n", // __LINE__, // render->jobs->total, // render->result); for(int i = 0; i < render->jobs->total && !render->result; i++) { //PRINT_TRACE BatchRenderJob *job = render->jobs->values[i]; //PRINT_TRACE if(job->enabled) { if(mwindow) { mwindow->batch_render->update_active(i); } else { printf("Render::run: %s\n", job->edl_path); } //PRINT_TRACE FileXML *file = new FileXML; EDL *edl = new EDL; edl->create_objects(); file->read_from_file(job->edl_path); edl->load_xml(file, LOAD_ALL); //PRINT_TRACE render_single(0, job->asset, edl, job->strategy); //PRINT_TRACE edl->Garbage::remove_user(); delete file; if(!render->result) { if(mwindow) mwindow->batch_render->update_done(i, 1, render->elapsed_time); else { char string[BCTEXTLEN]; render->elapsed_time = (double)render->progress_timer->get_scaled_difference(1); Units::totext(string, render->elapsed_time, TIME_HMS2); printf("Render::run: done in %s\n", string); } } else { if(mwindow) mwindow->batch_render->update_active(-1); else printf("Render::run: failed\n"); } } //PRINT_TRACE } if(mwindow) { mwindow->batch_render->update_active(-1); mwindow->batch_render->update_done(-1, 0, 0); } } }
void Render::run() { int format_error; result = 0; if(mode == Render::INTERACTIVE) { // Fix the asset for rendering printf("Render::run 1\n"); Asset *asset = new Asset; load_defaults(asset); printf("Render::run 2\n"); check_asset(mwindow->edl, *asset); printf("Render::run 3\n"); // Get format from user if(!result) { printf("Render::run 4\n"); do { format_error = 0; result = 0; { printf("Render::run 5\n"); RenderWindow window(mwindow, this, asset); printf("Render::run 6\n"); window.create_objects(); printf("Render::run 7\n"); result = window.run_window(); printf("Render::run 8\n"); if (! result) { // add to recentlist only on OK window.format_tools->path_recent->add_item(FILE_FORMAT_PREFIX(asset->format), asset->path); } } if(!result) { printf("Render::run 8.1\n"); // Check the asset format for errors. FormatCheck format_check(asset); printf("Render::run 8.2\n"); format_error = format_check.check_format(); printf("Render::run 8.3\n"); } }while(format_error && !result); } printf("Render::run 9\n"); save_defaults(asset); mwindow->save_defaults(); printf("Render::run 10\n"); if(!result) render(1, asset, mwindow->edl, strategy, range_type); printf("Render::run 11\n"); Garbage::delete_object(asset); printf("Render::run 12\n"); } else if(mode == Render::BATCH) { for(int i = 0; i < jobs->total && !result; i++) { BatchRenderJob *job = jobs->values[i]; if(job->enabled) { if(mwindow) { mwindow->batch_render->update_active(i); } else { printf("Render::run: %s\n", job->edl_path); } FileXML *file = new FileXML; EDL *edl = new EDL; edl->create_objects(); file->read_from_file(job->edl_path); if(!plugindb && mwindow) plugindb = mwindow->plugindb; edl->load_xml(plugindb, file, LOAD_ALL); check_asset(edl, *job->asset); render(0, job->asset, edl, job->strategy, RANGE_BACKCOMPAT); delete edl; delete file; if(!result) { if(mwindow) mwindow->batch_render->update_done(i, 1, elapsed_time); else { char string[BCTEXTLEN]; elapsed_time = (double)progress_timer->get_scaled_difference(1); Units::totext(string, elapsed_time, TIME_HMS2); printf("Render::run: done in %s\n", string); } } else { if(mwindow) mwindow->batch_render->update_active(-1); else printf("Render::run: failed\n"); } } } if(mwindow) { mwindow->batch_render->update_active(-1); mwindow->batch_render->update_done(-1, 0, 0); } } printf("Render::run 100\n"); }