24 : user_data_(user_data),
25 get_image_callback_(get_image_callback),
26 release_image_callback_(release_image_callback),
27 get_mask_for_track_callback_(get_mask_for_track_callback),
28 release_mask_callback_(release_mask_callback) {}
30 virtual ~LibmvFrameAccessor() {}
34#define CHECK_INPUT_MODE(mode) \
35 case mode: return LIBMV_IMAGE_MODE_##mode;
38#undef CHECK_INPUT_MODE
40 assert(!
"unknown input mode passed from Libmv.");
45 void get_libmv_region(
const Region& region,
libmv_Region* libmv_region) {
46 libmv_region->
min[0] = region.min(0);
47 libmv_region->
min[1] = region.min(1);
48 libmv_region->
max[0] = region.max(0);
49 libmv_region->
max[1] = region.max(1);
52 Key GetImage(
int clip,
60 int width, height, channels;
63 get_libmv_region(*region, &libmv_region);
65 Key cache_key = get_image_callback_(user_data_,
68 get_libmv_input_mode(input_mode),
70 region != NULL ? &libmv_region : NULL,
78 FloatImage temp_image(float_buffer, height, width, channels);
84 void ReleaseImage(
Key cache_key) { release_image_callback_(cache_key); }
86 Key GetMaskForTrack(
int clip,
95 get_libmv_region(*region, &libmv_region);
98 get_mask_for_track_callback_(user_data_,
102 region != NULL ? &libmv_region : NULL,
107 if (cache_key == NULL) {
113 FloatImage temp_image(float_buffer, height, width, 1);
119 void ReleaseMask(
Key key) { release_mask_callback_(key); }
121 bool GetClipDimensions(
int ,
int* ,
int* ) {
125 int NumClips() {
return 1; }
127 int NumFrames(
int ) {
return 0; }
147 release_image_callback,
148 get_mask_for_track_callback,
149 release_mask_callback);
173 output_image->
buffer =
new float[num_pixels];
174 memcpy(output_image->
buffer,
output.Data(), num_pixels *
sizeof(
float));
SIMD_FORCE_INLINE btVector3 transform(const btVector3 &point) const
void CopyFrom(const ArrayND< D, N > &other)
void libmv_FrameAccessorDestroy(libmv_FrameAccessor *frame_accessor)
#define CHECK_INPUT_MODE(mode)
void libmv_frameAccessorgetTransformRun(const libmv_FrameTransform *transform, const libmv_FloatImage *input_image, libmv_FloatImage *output_image)
int64_t libmv_frameAccessorgetTransformKey(const libmv_FrameTransform *transform)
libmv_FrameAccessor * libmv_FrameAccessorNew(libmv_FrameAccessorUserData *user_data, libmv_GetImageCallback get_image_callback, libmv_ReleaseImageCallback release_image_callback, libmv_GetMaskForTrackCallback get_mask_for_track_callback, libmv_ReleaseMaskCallback release_mask_callback)
#define assert(assertion)
struct libmv_FrameTransform libmv_FrameTransform
libmv_CacheKey(* libmv_GetImageCallback)(libmv_FrameAccessorUserData *user_data, int clip, int frame, libmv_InputMode input_mode, int downscale, const libmv_Region *region, const libmv_FrameTransform *transform, float **destination, int *width, int *height, int *channels)
struct libmv_FrameAccessorUserData libmv_FrameAccessorUserData
libmv_CacheKey(* libmv_GetMaskForTrackCallback)(libmv_FrameAccessorUserData *user_data, int clip, int frame, int track, const libmv_Region *region, float **destination, int *width, int *height)
void(* libmv_ReleaseImageCallback)(libmv_CacheKey cache_key)
void(* libmv_ReleaseMaskCallback)(libmv_CacheKey cache_key)
struct libmv_FrameAccessor libmv_FrameAccessor
struct libmv_Region libmv_Region
#define LIBMV_OBJECT_NEW(type,...)
#define LIBMV_OBJECT_DELETE(what, type)