Update Ceres to latest upstream version
[blender.git] / extern / libmv / libmv-capi_stub.cc
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2013 Blender Foundation.
19  * All rights reserved.
20  *
21  * Contributor(s): Blender Foundation,
22  *                 Sergey Sharybin
23  *
24  * ***** END GPL LICENSE BLOCK *****
25  */
26
27 #ifndef WITH_LIBMV
28
29 #include "libmv-capi.h"
30
31 #include <cstdlib>
32 #include <cstring>
33
34 /* ************ Logging ************ */
35
36 void libmv_initLogging(const char * /*argv0*/)
37 {
38 }
39
40 void libmv_startDebugLogging(void)
41 {
42 }
43
44 void libmv_setLoggingVerbosity(int /*verbosity*/)
45 {
46 }
47
48 /* ************ Planar tracker ************ */
49
50 /* TrackRegion (new planar tracker) */
51 int libmv_trackRegion(const libmv_TrackRegionOptions * /*options*/,
52                       const float * /*image1*/, int /*image1_width*/, int /*image1_height*/,
53                       const float * /*image2*/, int /*image2_width*/, int /*image2_height*/,
54                       const double *x1, const double *y1,
55                       libmv_TrackRegionResult *result,
56                       double *x2, double *y2)
57 {
58         /* Convert to doubles for the libmv api. The four corners and the center. */
59         for (int i = 0; i < 5; ++i) {
60                 x2[i] = x1[i];
61                 y2[i] = y1[i];
62         }
63
64         result->termination = -1;
65         result->termination_reason = "Built without libmv support";
66         result->correlation = 0.0;
67
68         return false;
69 }
70
71 void libmv_samplePlanarPatch(const float *image, int width, int height,
72                              int channels, const double *xs, const double *ys,
73                              int num_samples_x, int num_samples_y,
74                              const float *mask, float *patch,
75                              double *warped_position_x, double *warped_position_y)
76 {
77         /* TODO(sergey): implement */
78 }
79
80 /* ************ Tracks ************ */
81
82 struct libmv_Tracks *libmv_tracksNew(void)
83 {
84         return NULL;
85 }
86
87 void libmv_tracksInsert(struct libmv_Tracks * /*libmv_tracks*/, int /*image*/,
88                         int /*track*/, double /*x*/, double /*y*/, double /*weight*/)
89 {
90 }
91
92 void libmv_tracksDestroy(struct libmv_Tracks * /*libmv_tracks*/)
93 {
94 }
95
96 /* ************ Reconstruction solver ************ */
97
98 struct libmv_Reconstruction *libmv_solveReconstruction(const struct libmv_Tracks * /*libmv_tracks*/,
99                 const libmv_CameraIntrinsicsOptions * /*libmv_camera_intrinsics_options*/,
100                 libmv_ReconstructionOptions * /*libmv_reconstruction_options*/,
101                 reconstruct_progress_update_cb /*progress_update_callback*/,
102                 void * /*callback_customdata*/)
103 {
104         return NULL;
105 }
106
107 struct libmv_Reconstruction *libmv_solveModal(const struct libmv_Tracks * /*libmv_tracks*/,
108                 const libmv_CameraIntrinsicsOptions * /*libmv_camera_intrinsics_options*/,
109                 const libmv_ReconstructionOptions * /*libmv_reconstruction_options*/,
110                 reconstruct_progress_update_cb /*progress_update_callback*/,
111                 void * /*callback_customdata*/)
112 {
113         return NULL;
114 }
115
116 int libmv_reprojectionPointForTrack(const struct libmv_Reconstruction * /*libmv_reconstruction*/,
117                                      int /*track*/, double /*pos*/[3])
118 {
119         return 0;
120 }
121
122 double libmv_reprojectionErrorForTrack(const struct libmv_Reconstruction * /*libmv_reconstruction*/, int /*track*/)
123 {
124         return 0.0;
125 }
126
127 double libmv_reprojectionErrorForImage(const struct libmv_Reconstruction * /*libmv_reconstruction*/, int /*image*/)
128 {
129         return 0.0;
130 }
131
132 int libmv_reprojectionCameraForImage(const struct libmv_Reconstruction * /*libmv_reconstruction*/, int /*image*/,
133                                       double /*mat*/[4][4])
134 {
135         return 0;
136 }
137
138 double libmv_reprojectionError(const struct libmv_Reconstruction * /*libmv_reconstruction*/)
139 {
140         return 0.0;
141 }
142
143 void libmv_reconstructionDestroy(struct libmv_Reconstruction * /*libmv_reconstruction*/)
144 {
145 }
146
147 /* ************ feature detector ************ */
148
149 struct libmv_Features *libmv_detectFeaturesFAST(const unsigned char * /*data*/, int /*width*/, int /*height*/,
150                                                 int /*stride*/, int /*margin*/, int /*min_trackness*/,
151                                                 int /*min_distance*/)
152 {
153         return NULL;
154 }
155
156 struct libmv_Features *libmv_detectFeaturesMORAVEC(const unsigned char * /*data*/, int /*width*/, int /*height*/,
157                                                    int /*stride*/, int /*margin*/, int /*count*/, int /*min_distance*/)
158 {
159         return NULL;
160 }
161
162 int libmv_countFeatures(const struct libmv_Features * /*libmv_features*/)
163 {
164         return 0;
165 }
166
167 void libmv_getFeature(const struct libmv_Features * /*libmv_features*/, int /*number*/,
168                       double *x, double *y, double *score, double *size)
169 {
170         *x = 0.0;
171         *y = 0.0;
172         *score = 0.0;
173         *size = 0.0;
174 }
175
176 void libmv_featuresDestroy(struct libmv_Features * /*libmv_features*/)
177 {
178 }
179
180 /* ************ camera intrinsics ************ */
181
182 struct libmv_CameraIntrinsics *libmv_reconstructionExtractIntrinsics(
183                 struct libmv_Reconstruction * /*libmv_reconstruction*/)
184 {
185         return NULL;
186 }
187
188 struct libmv_CameraIntrinsics *libmv_cameraIntrinsicsNewEmpty(void)
189 {
190         return NULL;
191 }
192
193 struct libmv_CameraIntrinsics *libmv_cameraIntrinsicsNew(
194                 const libmv_CameraIntrinsicsOptions * /*libmv_camera_intrinsics_options*/)
195 {
196         return NULL;
197 }
198
199 struct libmv_CameraIntrinsics *libmv_cameraIntrinsicsCopy(const libmv_CameraIntrinsics * /*libmvIntrinsics*/)
200 {
201         return NULL;
202 }
203
204 void libmv_cameraIntrinsicsDestroy(struct libmv_CameraIntrinsics * /*libmvIntrinsics*/)
205 {
206 }
207
208 void libmv_cameraIntrinsicsUpdate(const libmv_CameraIntrinsicsOptions * /*libmv_camera_intrinsics_options*/,
209                                   struct libmv_CameraIntrinsics * /*libmv_intrinsics*/)
210 {
211 }
212
213 void libmv_cameraIntrinsicsSetThreads(struct libmv_CameraIntrinsics * /*libmv_intrinsics*/, int /*threads*/)
214 {
215 }
216
217 void libmv_cameraIntrinsicsExtract(const struct libmv_CameraIntrinsics * /*libmv_intrinsics*/, double * focal_length,
218                                    double * principal_x, double *principal_y, double *k1, double *k2, double *k3,
219                                    int *width, int *height)
220 {
221         *focal_length = 1.0;
222         *principal_x = 0.0;
223         *principal_y = 0.0;
224         *k1 = 0.0;
225         *k2 = 0.0;
226         *width = 0.0;
227         *height = 0.0;
228 }
229
230 void libmv_cameraIntrinsicsUndistortByte(const struct libmv_CameraIntrinsics * /*libmv_intrinsics*/,
231                                          unsigned char *src, unsigned char *dst, int width, int height,
232                                          float overscan, int channels)
233 {
234         memcpy(dst, src, channels * width * height * sizeof(unsigned char));
235 }
236
237 void libmv_cameraIntrinsicsUndistortFloat(const struct libmv_CameraIntrinsics * /*libmvIntrinsics*/,
238                                           float *src, float *dst, int width, int height, float overscan, int channels)
239 {
240         memcpy(dst, src, channels * width * height * sizeof(float));
241 }
242
243 void libmv_cameraIntrinsicsDistortByte(const struct libmv_CameraIntrinsics *libmvIntrinsics,
244                                        unsigned char *src, unsigned char *dst, int width, int height,
245                                        float overscan, int channels)
246 {
247         memcpy(dst, src, channels * width * height * sizeof(unsigned char));
248 }
249
250 void libmv_cameraIntrinsicsDistortFloat(const struct libmv_CameraIntrinsics *libmvIntrinsics,
251                                         float *src, float *dst, int width, int height, float overscan, int channels)
252 {
253         memcpy(dst, src, channels * width * height * sizeof(float));
254 }
255
256 /* ************ utils ************ */
257
258 void libmv_cameraIntrinsicsApply(const libmv_CameraIntrinsicsOptions *libmv_camera_intrinsics_options,
259                                  double x, double y, double *x1, double *y1)
260 {
261         double focal_length = libmv_camera_intrinsics_options->focal_length;
262         double principal_x = libmv_camera_intrinsics_options->principal_point_x;
263         double principal_y = libmv_camera_intrinsics_options->principal_point_y;
264
265         *x1 = x * focal_length + principal_x;
266         *y1 = y * focal_length + principal_y;
267 }
268
269 void libmv_cameraIntrinsicsInvert(const libmv_CameraIntrinsicsOptions *libmv_camera_intrinsics_options,
270                                   double x, double y, double *x1, double *y1)
271 {
272         double focal_length = libmv_camera_intrinsics_options->focal_length;
273         double principal_x = libmv_camera_intrinsics_options->principal_point_x;
274         double principal_y = libmv_camera_intrinsics_options->principal_point_y;
275
276         *x1 = (x - principal_x) / focal_length;
277         *y1 = (y - principal_y) / focal_length;
278 }
279
280 void libmv_homography2DFromCorrespondencesEuc(double (* /* x1 */)[2], double (* /* x2 */)[2], int /* num_points */,
281                                               double H[3][3])
282 {
283         memset(H, 0, sizeof(double[3][3]));
284         H[0][0] = 1.0f;
285         H[1][1] = 1.0f;
286         H[2][2] = 1.0f;
287 }
288
289 #endif  // ifndef WITH_LIBMV