PANNINI,
CYLINDRICAL,
PERSPECTIVE,
+ TETRAHEDRON,
+ BARREL_SPLIT,
+ TSPYRAMID,
+ HEQUIRECTANGULAR,
+ EQUISOLID,
+ ORTHOGRAPHIC,
+ OCTAHEDRON,
NB_PROJECTIONS,
};
enum InterpMethod {
NEAREST,
BILINEAR,
+ LAGRANGE9,
BICUBIC,
LANCZOS,
SPLINE16,
GAUSSIAN,
+ MITCHELL,
NB_INTERP_METHODS,
};
float ker[4][4];
} XYRemap;
+typedef struct SliceXYRemap {
+ int16_t *u[2], *v[2];
+ int16_t *ker[2];
+ uint8_t *mask;
+} SliceXYRemap;
+
typedef struct V360Context {
const AVClass *class;
int in, out;
int interp;
+ int alpha;
int width, height;
char *in_forder;
char *out_forder;
float flat_range[2];
float iflat_range[2];
- float rot_mat[3][3];
+ float rot_quaternion[2][4];
- float input_mirror_modifier[2];
float output_mirror_modifier[3];
int in_width, in_height;
int nb_planes;
int nb_allocated;
int elements;
+ int mask_size;
+ int max_value;
+ int nb_threads;
- int16_t *u[2], *v[2];
- int16_t *ker[2];
+ SliceXYRemap *slice_remap;
unsigned map[4];
- void (*in_transform)(const struct V360Context *s,
- const float *vec, int width, int height,
- int16_t us[4][4], int16_t vs[4][4], float *du, float *dv);
+ int (*in_transform)(const struct V360Context *s,
+ const float *vec, int width, int height,
+ int16_t us[4][4], int16_t vs[4][4], float *du, float *dv);
- void (*out_transform)(const struct V360Context *s,
- int i, int j, int width, int height,
- float *vec);
+ int (*out_transform)(const struct V360Context *s,
+ int i, int j, int width, int height,
+ float *vec);
void (*calculate_kernel)(float du, float dv, const XYRemap *rmap,
int16_t *u, int16_t *v, int16_t *ker);