X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fpackagerenderer.C;h=4318bec73b9435f79713e3a45623b9901a1cfb55;hb=803cf48f8f7ee246eb5473e55fc2125e8b398250;hp=d4341493dce1a8d4b4bce441a3ea842383040a20;hpb=49f85559268fc040fe7ba5611cc0520793cf728b;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/packagerenderer.C b/cinelerra-5.1/cinelerra/packagerenderer.C index d4341493..4318bec7 100644 --- a/cinelerra-5.1/cinelerra/packagerenderer.C +++ b/cinelerra-5.1/cinelerra/packagerenderer.C @@ -105,6 +105,7 @@ PackageRenderer::~PackageRenderer() delete video_cache; delete vconfig; delete aconfig; + delete timer; } // PackageRenderer::initialize happens only once for every node when doing rendering session @@ -152,26 +153,20 @@ void PackageRenderer::create_output() asset = new Asset(*default_asset); if(!get_master() && preferences->renderfarm_vfs && preferences->use_renderfarm) - sprintf(asset->path, RENDERFARM_FS_PREFIX "%s", package->path); + snprintf(asset->path, sizeof(asset->path), + RENDERFARM_FS_PREFIX "%s", package->path); else - strcpy(asset->path, package->path); + strncpy(asset->path, package->path, sizeof(asset->path)); file = new File; - file->set_processors(preferences->processors); - -//printf("PackageRenderer::create_output %d\n", __LINE__); - result = file->open_file(preferences, - asset, - 0, - 1); -//printf("PackageRenderer::create_output %d %d\n", __LINE__, result); + result = file->open_file(preferences, asset, 0, 1); if(result && mwindow) { // open failed char string[BCTEXTLEN]; - sprintf(string, _("Couldn't open %s"), asset->path); + snprintf(string, sizeof(string), _("Couldn't open %s"), asset->path); ErrorBox error(_(PROGRAM_NAME ": Error"), mwindow->gui->get_abs_cursor_x(1), mwindow->gui->get_abs_cursor_y(1)); @@ -250,7 +245,12 @@ void PackageRenderer::create_engine() direct_frame_copying = 0; -//printf("PackageRenderer::create_engine %d\n", __LINE__); +//printf("PackageRenderer::create_engine %d video_write_length=%d\n", __LINE__, video_write_length); +// starting frames are corrupted if video_write_length > 2. Work around it, for now. + if(video_write_length > 2) + { + video_write_length = 2; + } file->start_video_thread(video_write_length, command->get_edl()->session->color_model, preferences->processors > 1 ? 2 : 1, @@ -415,7 +415,8 @@ void PackageRenderer::do_video() VFrame *preview_output; video_device->new_output_buffer(&preview_output, - command->get_edl()->session->color_model); + command->get_edl()->session->color_model, + command->get_edl()); preview_output->copy_from(video_output_ptr); video_device->write_buffer(preview_output, @@ -741,6 +742,7 @@ int PackageRenderer::direct_frame_copy(EDL *edl, //printf("Render::direct_frame_copy 2\n"); if(!package->use_brender) + { error |= ((VEdit*)playable_edit)->read_frame(compressed_output, video_position, PLAY_FORWARD, @@ -748,7 +750,9 @@ int PackageRenderer::direct_frame_copy(EDL *edl, 1, 0, 0); - +//printf("Render::direct_frame_copy %d %d\n", __LINE__, compressed_output->get_compressed_size()); + } + if(!error && video_preroll > 0) {