8 #include "bcdisplayinfo.inc"
10 #include "filexml.inc"
11 #include "keyframe.inc"
12 #include "loadbalance.h"
13 #include "overlayframe.inc"
14 #include "pluginvclient.h"
30 int equivalent(MotionConfig
&that
);
31 void copy_from(MotionConfig
&that
);
32 void interpolate(MotionConfig
&prev
,
36 int64_t current_frame
);
53 class MotionSearchRadius
: public BC_IPot
56 MotionSearchRadius(MotionMain
*plugin
,
63 class MotionBlockSize
: public BC_IPot
66 MotionBlockSize(MotionMain
*plugin
,
73 class MotionMagnitude
: public BC_IPot
76 MotionMagnitude(MotionMain
*plugin
,
83 class MotionReturnSpeed
: public BC_IPot
86 MotionReturnSpeed(MotionMain
*plugin
,
93 class MotionStabilize
: public BC_Radial
96 MotionStabilize(MotionMain
*plugin
,
105 class MotionTrack
: public BC_Radial
108 MotionTrack(MotionMain
*plugin
,
117 class MotionDrawVectors
: public BC_Radial
120 MotionDrawVectors(MotionMain
*plugin
,
129 class MotionWindow
: public BC_Window
132 MotionWindow(MotionMain
*plugin
, int x
, int y
);
135 int create_objects();
139 MotionSearchRadius
*radius
;
140 MotionBlockSize
*block_size
;
141 MotionMagnitude
*magnitude
;
142 MotionReturnSpeed
*return_speed
;
143 MotionStabilize
*stabilize
;
145 MotionDrawVectors
*vectors
;
151 PLUGIN_THREAD_HEADER(MotionMain
, MotionThread
, MotionWindow
)
164 class MotionMain
: public PluginVClient
167 MotionMain(PluginServer
*server
);
170 int process_realtime(VFrame
**input_ptr
, VFrame
**output_ptr
);
171 int is_multichannel();
175 void save_data(KeyFrame
*keyframe
);
176 void read_data(KeyFrame
*keyframe
);
179 PLUGIN_CLASS_MEMBERS(MotionConfig
, MotionThread
)
181 static void oversample(int32_t *dst
,
189 static void draw_pixel(VFrame
*frame
, int x
, int y
);
190 static void draw_line(VFrame
*frame
, int x1
, int y1
, int x2
, int y2
);
193 VFrame
*current_frame
;
195 MotionEngine
*engine
;
196 OverlayFrame
*overlayer
;
197 macroblock_t
*macroblocks
;
198 int total_macroblocks
;
200 // Absolute position of current frame relative to center * OVERSAMPLE
203 // Oversampled current frame for motion estimation
204 int32_t *search_area
;
209 class MotionPackage
: public LoadPackage
213 macroblock_t
*macroblock
;
216 class MotionUnit
: public LoadClient
219 MotionUnit(MotionEngine
*server
, MotionMain
*plugin
);
222 void process_package(LoadPackage
*package
);
223 int64_t abs_diff(int32_t *search_pixel
,
224 int32_t *block_pixel
,
228 MotionEngine
*server
;
230 // Oversampled macroblock in previous frame
233 // Results of scan go here so the same places don't need to be scanned twice.
234 int64_t *scan_result
;
235 int scan_result_size
;
238 class MotionEngine
: public LoadServer
241 MotionEngine(MotionMain
*plugin
,
244 void init_packages();
245 LoadClient
* new_client();
246 LoadPackage
* new_package();