X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;ds=sidebyside;f=cinelerra-5.1%2Fplugins%2Finterpolatevideo%2Fopticflow.C;h=83414c07115f62db3c316d28634ed152f2de8444;hb=9d832a1fff11b11aaa1108c460690ed05e2bdc05;hp=9f94d6be6a7c872876391e5a02b6ca729d53974e;hpb=1e154071bd323f756625f8172ef67133a561450a;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/plugins/interpolatevideo/opticflow.C b/cinelerra-5.1/plugins/interpolatevideo/opticflow.C index 9f94d6be..83414c07 100644 --- a/cinelerra-5.1/plugins/interpolatevideo/opticflow.C +++ b/cinelerra-5.1/plugins/interpolatevideo/opticflow.C @@ -24,6 +24,7 @@ #include "clip.h" #include "interpolatevideo.h" +#include "motioncache-hv.h" #include "motionscan-hv.h" #include "opticflow.h" @@ -87,14 +88,16 @@ void OpticFlowUnit::process_package(LoadPackage *package) { OpticFlowPackage *pkg = (OpticFlowPackage*)package; InterpolateVideo *plugin = server->plugin; - int w = plugin->frames[0]->get_w(); - int h = plugin->frames[0]->get_h(); + //int w = plugin->frames[0]->get_w(); + //int h = plugin->frames[0]->get_h(); struct timeval start_time; gettimeofday(&start_time, 0); - if(!motion) motion = new MotionScan(1, 1); + if(!motion) motion = new MotionHVScan(1, 1); motion->set_test_match(0); + motion->set_cache(server->downsample_cache); + // printf("OpticFlowUnit::process_package %d %d %d\n", // __LINE__, // pkg->macroblock0, @@ -103,6 +106,7 @@ void OpticFlowUnit::process_package(LoadPackage *package) for(int i = pkg->macroblock0; i < pkg->macroblock1; i++) { OpticFlowMacroblock *mb = plugin->macroblocks.get(i); +//printf("OpticFlowUnit::process_package %d i=%d x=%d y=%d\n", __LINE__, i, mb->x, mb->y); motion->scan_frame(plugin->frames[0], // Frame after motion plugin->frames[1], @@ -112,10 +116,10 @@ void OpticFlowUnit::process_package(LoadPackage *package) plugin->config.macroblock_size, mb->x, mb->y, - MotionScan::TRACK_PREVIOUS, - MotionScan::CALCULATE, + MotionHVScan::TRACK_PREVIOUS, + MotionHVScan::CALCULATE, // Get it to do the subpixel step - MotionScan::STABILIZE, + MotionHVScan::STABILIZE, 0, 0, 0, @@ -127,6 +131,7 @@ void OpticFlowUnit::process_package(LoadPackage *package) 0, 0, 0); +//printf("OpticFlowUnit::process_package 2\n", __LINE__); mb->dx = motion->dx_result; @@ -157,21 +162,39 @@ OpticFlow::OpticFlow(InterpolateVideo *plugin, total_packages) { this->plugin = plugin; + downsample_cache = 0; } OpticFlow::~OpticFlow() { + if(downsample_cache) + { +//printf("OpticFlow::~OpticFlow %d %p\n", __LINE__, downsample_cache); + delete downsample_cache; + } } void OpticFlow::init_packages() { -//printf("OpticFlow::init_packages %d %d\n", __LINE__, get_total_packages()); + if(!downsample_cache) + { + downsample_cache = new MotionHVCache(); + } + + downsample_cache->clear(); + for(int i = 0; i < get_total_packages(); i++) { OpticFlowPackage *pkg = (OpticFlowPackage*)get_package(i); pkg->macroblock0 = plugin->total_macroblocks * i / get_total_packages(); pkg->macroblock1 = plugin->total_macroblocks * (i + 1) / get_total_packages(); +// printf("OpticFlow::init_packages %d %d %d %d %d\n", +// __LINE__, +// plugin->total_macroblocks, +// get_total_packages(), +// pkg->macroblock0, +// pkg->macroblock1); } }