Compositor: Speedup movie (un)distortion operation
Avoid per-pixel camera intrincs object construction and synchronization. Here on a bit synthetic file it gives about 40% speedup with a single node.
This commit is contained in:
@@ -264,33 +264,23 @@ void libmv_cameraIntrinsicsDistortFloat(
|
||||
}
|
||||
|
||||
void libmv_cameraIntrinsicsApply(
|
||||
const libmv_CameraIntrinsicsOptions* libmv_camera_intrinsics_options,
|
||||
const struct libmv_CameraIntrinsics* libmv_intrinsics,
|
||||
double x,
|
||||
double y,
|
||||
double* x1,
|
||||
double* y1) {
|
||||
/* Do a lens distortion if focal length is non-zero only. */
|
||||
if (libmv_camera_intrinsics_options->focal_length) {
|
||||
CameraIntrinsics* camera_intrinsics =
|
||||
libmv_cameraIntrinsicsCreateFromOptions(libmv_camera_intrinsics_options);
|
||||
camera_intrinsics->ApplyIntrinsics(x, y, x1, y1);
|
||||
LIBMV_OBJECT_DELETE(camera_intrinsics, CameraIntrinsics);
|
||||
}
|
||||
CameraIntrinsics *intrinsics = (CameraIntrinsics *) libmv_intrinsics;
|
||||
intrinsics->ApplyIntrinsics(x, y, x1, y1);
|
||||
}
|
||||
|
||||
void libmv_cameraIntrinsicsInvert(
|
||||
const libmv_CameraIntrinsicsOptions* libmv_camera_intrinsics_options,
|
||||
const struct libmv_CameraIntrinsics* libmv_intrinsics,
|
||||
double x,
|
||||
double y,
|
||||
double* x1,
|
||||
double* y1) {
|
||||
/* Do a lens un-distortion if focal length is non-zero only/ */
|
||||
if (libmv_camera_intrinsics_options->focal_length) {
|
||||
CameraIntrinsics *camera_intrinsics =
|
||||
libmv_cameraIntrinsicsCreateFromOptions(libmv_camera_intrinsics_options);
|
||||
camera_intrinsics->InvertIntrinsics(x, y, x1, y1);
|
||||
LIBMV_OBJECT_DELETE(camera_intrinsics, CameraIntrinsics);
|
||||
}
|
||||
CameraIntrinsics *intrinsics = (CameraIntrinsics *) libmv_intrinsics;
|
||||
intrinsics->InvertIntrinsics(x, y, x1, y1);
|
||||
}
|
||||
|
||||
static void libmv_cameraIntrinsicsFillFromOptions(
|
||||
|
@@ -108,14 +108,14 @@ void libmv_cameraIntrinsicsDistortFloat(
|
||||
float* destination_image);
|
||||
|
||||
void libmv_cameraIntrinsicsApply(
|
||||
const libmv_CameraIntrinsicsOptions* libmv_camera_intrinsics_options,
|
||||
const struct libmv_CameraIntrinsics* libmv_intrinsics,
|
||||
double x,
|
||||
double y,
|
||||
double* x1,
|
||||
double* y1);
|
||||
|
||||
void libmv_cameraIntrinsicsInvert(
|
||||
const libmv_CameraIntrinsicsOptions* libmv_camera_intrinsics_options,
|
||||
const struct libmv_CameraIntrinsics* libmv_intrinsics,
|
||||
double x,
|
||||
double y,
|
||||
double* x1,
|
||||
|
@@ -303,29 +303,23 @@ void libmv_cameraIntrinsicsDistortFloat(
|
||||
/* ************ utils ************ */
|
||||
|
||||
void libmv_cameraIntrinsicsApply(
|
||||
const libmv_CameraIntrinsicsOptions* libmv_camera_intrinsics_options,
|
||||
double x,
|
||||
double y,
|
||||
const struct libmv_CameraIntrinsics* /*libmv_intrinsics*/,
|
||||
double /*x*/,
|
||||
double /*y*/,
|
||||
double* x1,
|
||||
double* y1) {
|
||||
double focal_length = libmv_camera_intrinsics_options->focal_length;
|
||||
double principal_x = libmv_camera_intrinsics_options->principal_point_x;
|
||||
double principal_y = libmv_camera_intrinsics_options->principal_point_y;
|
||||
*x1 = x * focal_length + principal_x;
|
||||
*y1 = y * focal_length + principal_y;
|
||||
*x1 = 0.0;
|
||||
*y1 = 0.0;
|
||||
}
|
||||
|
||||
void libmv_cameraIntrinsicsInvert(
|
||||
const libmv_CameraIntrinsicsOptions* libmv_camera_intrinsics_options,
|
||||
double x,
|
||||
double y,
|
||||
const struct libmv_CameraIntrinsics* /*libmv_intrinsics*/,
|
||||
double /*x*/,
|
||||
double /*y*/,
|
||||
double* x1,
|
||||
double* y1) {
|
||||
double focal_length = libmv_camera_intrinsics_options->focal_length;
|
||||
double principal_x = libmv_camera_intrinsics_options->principal_point_x;
|
||||
double principal_y = libmv_camera_intrinsics_options->principal_point_y;
|
||||
*x1 = (x - principal_x) / focal_length;
|
||||
*y1 = (y - principal_y) / focal_length;
|
||||
*x1 = 0.0;
|
||||
*y1 = 0.0;
|
||||
}
|
||||
|
||||
void libmv_homography2DFromCorrespondencesEuc(/* const */ double (* /*x1*/)[2],
|
||||
|
Reference in New Issue
Block a user