X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fvmodule.C;h=93d6f4d9e4fa73f782018ca5806db825312f43d3;hb=f30a92d2f983d5ec09c8fd8db48c9bcb7ec76763;hp=48f2643dafb6ecb42c1e1c488ebc12b04730d5bf;hpb=50a589b1decdd353a984d8a710e064ebaf8b4f7b;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/vmodule.C b/cinelerra-5.1/cinelerra/vmodule.C index 48f2643d..93d6f4d9 100644 --- a/cinelerra-5.1/cinelerra/vmodule.C +++ b/cinelerra-5.1/cinelerra/vmodule.C @@ -50,6 +50,7 @@ #include "vedit.h" #include "vframe.h" #include "videodevice.h" +#include "virtualvconsole.h" #include "vmodule.h" #include "vrender.h" #include "vplugin.h" @@ -232,11 +233,7 @@ int VModule::import_frame(VFrame *output, nested_command->get_edl()->copy_all(nested_edl); nested_command->change_type = CHANGE_ALL; nested_command->realtime = renderengine->command->realtime; - nested_renderengine = new RenderEngine(0, - get_preferences(), - 0, - renderengine ? renderengine->channeldb : 0, - 1); + nested_renderengine = new RenderEngine(0, get_preferences(), 0, 1); nested_renderengine->set_vcache(get_cache()); nested_renderengine->arm_command(nested_command); } @@ -452,7 +449,7 @@ int VModule::import_frame(VFrame *output, // current_edit->asset->interlace_fixmethod); // Determine the interlacing method to use. - int interlace_fixmethod = !current_edit->asset ? BC_ILACE_FIXMETHOD_NONE : + int interlace_fixmethod = !current_edit->asset ? ILACE_FIXMETHOD_NONE : ilaceautofixmethod2(get_edl()->session->interlace_mode, current_edit->asset->interlace_autofixoption, current_edit->asset->interlace_mode, @@ -464,13 +461,13 @@ int VModule::import_frame(VFrame *output, // Compensate for the said interlacing... switch (interlace_fixmethod) { - case BC_ILACE_FIXMETHOD_NONE: + case ILACE_FIXMETHOD_NONE: break; - case BC_ILACE_FIXMETHOD_UPONE: + case ILACE_FIXMETHOD_UPONE: out_y--; break; - case BC_ILACE_FIXMETHOD_DOWNONE: + case ILACE_FIXMETHOD_DOWNONE: out_y++; break; default: @@ -975,7 +972,7 @@ int VModule::render(VFrame *output, //printf("VModule::render %d %p %ld %d\n", __LINE__, current_edit, start_position_project, direction); if(debug_render) - printf(" VModule::render %d %d %ld %s transition=%p opengl=%d current_edit=%p output=%p\n", + printf(" VModule::render %d %d %jd %s transition=%p opengl=%d current_edit=%p output=%p\n", __LINE__, use_nudge, start_position_project, @@ -1083,21 +1080,34 @@ int VModule::render(VFrame *output, use_opengl); } - int64_t mask_position = !renderengine ? start_position : - renderengine->vrender->current_position; Auto *current = 0; MaskAutos *keyframe_set = (MaskAutos*)track->automation->autos[AUTOMATION_MASK]; - MaskAuto *keyframe = + int64_t mask_position = !renderengine ? start_position : + renderengine->vrender->current_position; + MaskAuto *keyframe = (MaskAuto*)keyframe_set->get_prev_auto(mask_position, direction, current); + if( keyframe->apply_before_plugins ) { - if( !masker ) { - int cpus = renderengine ? - renderengine->preferences->processors : - plugin_array->mwindow->preferences->processors; - masker = new MaskEngine(cpus); + VDeviceX11 *x11_device = 0; + if(use_opengl && renderengine && renderengine->video) { + x11_device = (VDeviceX11*)renderengine->video->get_output_base(); + if( !x11_device->can_mask(mask_position, keyframe_set) ) + use_opengl = 0; + } + if( use_opengl && x11_device ) { + x11_device->do_mask(output, mask_position, keyframe_set, + keyframe, keyframe); + } + else { + if( !masker ) { + int cpus = renderengine ? + renderengine->preferences->processors : + plugin_array->mwindow->preferences->processors; + masker = new MaskEngine(cpus); + } + masker->do_mask(output, mask_position, keyframe_set, keyframe, keyframe); } - masker->do_mask(output, mask_position, keyframe_set, keyframe, keyframe); } return result;