#include "clip.h"
#include "interpolatevideo.h"
+#include "motioncache-hv.h"
#include "motionscan-hv.h"
#include "opticflow.h"
{
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,
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],
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,
0,
0,
0);
+//printf("OpticFlowUnit::process_package 2\n", __LINE__);
mb->dx = motion->dx_result;
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);
}
}