forked from bartvdbraak/blender
d279e8891f
=========================== - ColaMD moved from OpenNL to extern/. It'll be needed for libmv. Also, it's a bit updated from year 1999 to 2007. Need to be tested for regressions. - Updated bundling script for libmv. Now it uses fuller subset of this library. - Bundled new libmv. - Request from Keir: add command line argument to toggle logging stuff on. Currently, if Blender is launched with -d argument libmv would start printing logging messages. There's no argument to increase verbosity, but there's API in libmv-capi, so it'll be easy to add. - Finally fixed crash when ibuf is acquiring with user=NULL. - Added ActiveClip property to the scene. This clip is used as default value for new match-moving constraints. - Added some flags to Display panel of View3D. Related on displaying match-moving stuff. - Internal change: bundles data moved inside to MovieTrackingTrack. - Initial implementation of 3d reconstruction. - Added constraint "Camera Solver". This constraint is supposed to be used to make camera follow the reconstructed camera path. - Added "reference" property to "Follow Track" constraint. Now object could be "parented" to 2D track position or to 3D bundle position. The very quick guide: To use reconstruction you should have footage with tracked markers, choose two keyframes in "Tracking settings" panel. There should be quite noticeable parallax effect between this two frames. This is used to initialize reconstruction stuff. Camera data (focal length and optical center) should be filled in "Camera Data" panel. Optical center is often the center of image, so it'll be filled in automatically. You should also set values for undistortion (K1, K2 and K3). Currently, there's no any visualization for this parameters and approach of "change value -> reconstruct -> see what've changed" is the only way for now. Libmv team is working on auto-calibration tool, so it should be easier to gather this coefficients in nearest (i hope) future. There's also no scene orientation stuff. Basic workflow: - Open footage. - Set markers and track them. - Fill in camera data and keyframes. - Hit "Solve Camera" button. - Add "Camera Solver" constraint to camera in scene. - Choose movieclip in that constraint. - To see bundles in 3D viewport active clip should be set in scene buttons.
256 lines
8.5 KiB
C
256 lines
8.5 KiB
C
/* ========================================================================== */
|
|
/* === colamd/symamd prototypes and definitions ============================= */
|
|
/* ========================================================================== */
|
|
|
|
/* COLAMD / SYMAMD include file
|
|
|
|
You must include this file (colamd.h) in any routine that uses colamd,
|
|
symamd, or the related macros and definitions.
|
|
|
|
Authors:
|
|
|
|
The authors of the code itself are Stefan I. Larimore and Timothy A.
|
|
Davis (davis at cise.ufl.edu), University of Florida. The algorithm was
|
|
developed in collaboration with John Gilbert, Xerox PARC, and Esmond
|
|
Ng, Oak Ridge National Laboratory.
|
|
|
|
Acknowledgements:
|
|
|
|
This work was supported by the National Science Foundation, under
|
|
grants DMS-9504974 and DMS-9803599.
|
|
|
|
Notice:
|
|
|
|
Copyright (c) 1998-2007, Timothy A. Davis, All Rights Reserved.
|
|
|
|
THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY
|
|
EXPRESSED OR IMPLIED. ANY USE IS AT YOUR OWN RISK.
|
|
|
|
Permission is hereby granted to use, copy, modify, and/or distribute
|
|
this program, provided that the Copyright, this License, and the
|
|
Availability of the original version is retained on all copies and made
|
|
accessible to the end-user of any code or package that includes COLAMD
|
|
or any modified version of COLAMD.
|
|
|
|
Availability:
|
|
|
|
The colamd/symamd library is available at
|
|
|
|
http://www.cise.ufl.edu/research/sparse/colamd/
|
|
|
|
This is the http://www.cise.ufl.edu/research/sparse/colamd/colamd.h
|
|
file. It is required by the colamd.c, colamdmex.c, and symamdmex.c
|
|
files, and by any C code that calls the routines whose prototypes are
|
|
listed below, or that uses the colamd/symamd definitions listed below.
|
|
|
|
*/
|
|
|
|
#ifndef COLAMD_H
|
|
#define COLAMD_H
|
|
|
|
/* make it easy for C++ programs to include COLAMD */
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* ========================================================================== */
|
|
/* === Include files ======================================================== */
|
|
/* ========================================================================== */
|
|
|
|
#include <stdlib.h>
|
|
|
|
/* ========================================================================== */
|
|
/* === COLAMD version ======================================================= */
|
|
/* ========================================================================== */
|
|
|
|
/* COLAMD Version 2.4 and later will include the following definitions.
|
|
* As an example, to test if the version you are using is 2.4 or later:
|
|
*
|
|
* #ifdef COLAMD_VERSION
|
|
* if (COLAMD_VERSION >= COLAMD_VERSION_CODE (2,4)) ...
|
|
* #endif
|
|
*
|
|
* This also works during compile-time:
|
|
*
|
|
* #if defined(COLAMD_VERSION) && (COLAMD_VERSION >= COLAMD_VERSION_CODE (2,4))
|
|
* printf ("This is version 2.4 or later\n") ;
|
|
* #else
|
|
* printf ("This is an early version\n") ;
|
|
* #endif
|
|
*
|
|
* Versions 2.3 and earlier of COLAMD do not include a #define'd version number.
|
|
*/
|
|
|
|
#define COLAMD_DATE "Nov 1, 2007"
|
|
#define COLAMD_VERSION_CODE(main,sub) ((main) * 1000 + (sub))
|
|
#define COLAMD_MAIN_VERSION 2
|
|
#define COLAMD_SUB_VERSION 7
|
|
#define COLAMD_SUBSUB_VERSION 1
|
|
#define COLAMD_VERSION \
|
|
COLAMD_VERSION_CODE(COLAMD_MAIN_VERSION,COLAMD_SUB_VERSION)
|
|
|
|
/* ========================================================================== */
|
|
/* === Knob and statistics definitions ====================================== */
|
|
/* ========================================================================== */
|
|
|
|
/* size of the knobs [ ] array. Only knobs [0..1] are currently used. */
|
|
#define COLAMD_KNOBS 20
|
|
|
|
/* number of output statistics. Only stats [0..6] are currently used. */
|
|
#define COLAMD_STATS 20
|
|
|
|
/* knobs [0] and stats [0]: dense row knob and output statistic. */
|
|
#define COLAMD_DENSE_ROW 0
|
|
|
|
/* knobs [1] and stats [1]: dense column knob and output statistic. */
|
|
#define COLAMD_DENSE_COL 1
|
|
|
|
/* knobs [2]: aggressive absorption */
|
|
#define COLAMD_AGGRESSIVE 2
|
|
|
|
/* stats [2]: memory defragmentation count output statistic */
|
|
#define COLAMD_DEFRAG_COUNT 2
|
|
|
|
/* stats [3]: colamd status: zero OK, > 0 warning or notice, < 0 error */
|
|
#define COLAMD_STATUS 3
|
|
|
|
/* stats [4..6]: error info, or info on jumbled columns */
|
|
#define COLAMD_INFO1 4
|
|
#define COLAMD_INFO2 5
|
|
#define COLAMD_INFO3 6
|
|
|
|
/* error codes returned in stats [3]: */
|
|
#define COLAMD_OK (0)
|
|
#define COLAMD_OK_BUT_JUMBLED (1)
|
|
#define COLAMD_ERROR_A_not_present (-1)
|
|
#define COLAMD_ERROR_p_not_present (-2)
|
|
#define COLAMD_ERROR_nrow_negative (-3)
|
|
#define COLAMD_ERROR_ncol_negative (-4)
|
|
#define COLAMD_ERROR_nnz_negative (-5)
|
|
#define COLAMD_ERROR_p0_nonzero (-6)
|
|
#define COLAMD_ERROR_A_too_small (-7)
|
|
#define COLAMD_ERROR_col_length_negative (-8)
|
|
#define COLAMD_ERROR_row_index_out_of_bounds (-9)
|
|
#define COLAMD_ERROR_out_of_memory (-10)
|
|
#define COLAMD_ERROR_internal_error (-999)
|
|
|
|
|
|
/* ========================================================================== */
|
|
/* === Prototypes of user-callable routines ================================= */
|
|
/* ========================================================================== */
|
|
|
|
/* define UF_long */
|
|
#include "UFconfig.h"
|
|
|
|
size_t colamd_recommended /* returns recommended value of Alen, */
|
|
/* or 0 if input arguments are erroneous */
|
|
(
|
|
int nnz, /* nonzeros in A */
|
|
int n_row, /* number of rows in A */
|
|
int n_col /* number of columns in A */
|
|
) ;
|
|
|
|
size_t colamd_l_recommended /* returns recommended value of Alen, */
|
|
/* or 0 if input arguments are erroneous */
|
|
(
|
|
UF_long nnz, /* nonzeros in A */
|
|
UF_long n_row, /* number of rows in A */
|
|
UF_long n_col /* number of columns in A */
|
|
) ;
|
|
|
|
void colamd_set_defaults /* sets default parameters */
|
|
( /* knobs argument is modified on output */
|
|
double knobs [COLAMD_KNOBS] /* parameter settings for colamd */
|
|
) ;
|
|
|
|
void colamd_l_set_defaults /* sets default parameters */
|
|
( /* knobs argument is modified on output */
|
|
double knobs [COLAMD_KNOBS] /* parameter settings for colamd */
|
|
) ;
|
|
|
|
int colamd /* returns (1) if successful, (0) otherwise*/
|
|
( /* A and p arguments are modified on output */
|
|
int n_row, /* number of rows in A */
|
|
int n_col, /* number of columns in A */
|
|
int Alen, /* size of the array A */
|
|
int A [], /* row indices of A, of size Alen */
|
|
int p [], /* column pointers of A, of size n_col+1 */
|
|
double knobs [COLAMD_KNOBS],/* parameter settings for colamd */
|
|
int stats [COLAMD_STATS] /* colamd output statistics and error codes */
|
|
) ;
|
|
|
|
UF_long colamd_l /* returns (1) if successful, (0) otherwise*/
|
|
( /* A and p arguments are modified on output */
|
|
UF_long n_row, /* number of rows in A */
|
|
UF_long n_col, /* number of columns in A */
|
|
UF_long Alen, /* size of the array A */
|
|
UF_long A [], /* row indices of A, of size Alen */
|
|
UF_long p [], /* column pointers of A, of size n_col+1 */
|
|
double knobs [COLAMD_KNOBS],/* parameter settings for colamd */
|
|
UF_long stats [COLAMD_STATS]/* colamd output statistics and error codes */
|
|
) ;
|
|
|
|
int symamd /* return (1) if OK, (0) otherwise */
|
|
(
|
|
int n, /* number of rows and columns of A */
|
|
int A [], /* row indices of A */
|
|
int p [], /* column pointers of A */
|
|
int perm [], /* output permutation, size n_col+1 */
|
|
double knobs [COLAMD_KNOBS], /* parameters (uses defaults if NULL) */
|
|
int stats [COLAMD_STATS], /* output statistics and error codes */
|
|
void * (*allocate) (size_t, size_t),
|
|
/* pointer to calloc (ANSI C) or */
|
|
/* mxCalloc (for MATLAB mexFunction) */
|
|
void (*release) (void *)
|
|
/* pointer to free (ANSI C) or */
|
|
/* mxFree (for MATLAB mexFunction) */
|
|
) ;
|
|
|
|
UF_long symamd_l /* return (1) if OK, (0) otherwise */
|
|
(
|
|
UF_long n, /* number of rows and columns of A */
|
|
UF_long A [], /* row indices of A */
|
|
UF_long p [], /* column pointers of A */
|
|
UF_long perm [], /* output permutation, size n_col+1 */
|
|
double knobs [COLAMD_KNOBS], /* parameters (uses defaults if NULL) */
|
|
UF_long stats [COLAMD_STATS], /* output statistics and error codes */
|
|
void * (*allocate) (size_t, size_t),
|
|
/* pointer to calloc (ANSI C) or */
|
|
/* mxCalloc (for MATLAB mexFunction) */
|
|
void (*release) (void *)
|
|
/* pointer to free (ANSI C) or */
|
|
/* mxFree (for MATLAB mexFunction) */
|
|
) ;
|
|
|
|
void colamd_report
|
|
(
|
|
int stats [COLAMD_STATS]
|
|
) ;
|
|
|
|
void colamd_l_report
|
|
(
|
|
UF_long stats [COLAMD_STATS]
|
|
) ;
|
|
|
|
void symamd_report
|
|
(
|
|
int stats [COLAMD_STATS]
|
|
) ;
|
|
|
|
void symamd_l_report
|
|
(
|
|
UF_long stats [COLAMD_STATS]
|
|
) ;
|
|
|
|
#ifndef EXTERN
|
|
#define EXTERN extern
|
|
#endif
|
|
|
|
EXTERN int (*colamd_printf) (const char *, ...) ;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* COLAMD_H */
|