X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Fv360.h;h=87770664a359e801073cddef528b08635de0ec84;hb=0c90377a402d10279a4133034d8dd66c1809d42c;hp=4d78543f602cf73b493dbbf11928bcd9d58cb4d2;hpb=0d05aa052cdd11706c4461b6b2e733e1d65525d6;p=ffmpeg diff --git a/libavfilter/v360.h b/libavfilter/v360.h index 4d78543f602..87770664a35 100644 --- a/libavfilter/v360.h +++ b/libavfilter/v360.h @@ -43,14 +43,29 @@ enum Projections { BALL, HAMMER, SINUSOIDAL, + FISHEYE, + 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, }; @@ -90,15 +105,22 @@ enum RotationOrder { }; typedef struct XYRemap { - uint16_t u[4][4]; - uint16_t v[4][4]; + int16_t u[4][4]; + int16_t v[4][4]; 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; @@ -124,11 +146,12 @@ typedef struct V360Context { int in_transpose, out_transpose; float h_fov, v_fov, d_fov; + float ih_fov, iv_fov, id_fov; 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; @@ -145,26 +168,28 @@ typedef struct V360Context { int nb_planes; int nb_allocated; int elements; + int mask_size; + int max_value; + int nb_threads; - uint16_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, - uint16_t us[4][4], uint16_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, - uint16_t *u, uint16_t *v, int16_t *ker); + int16_t *u, int16_t *v, int16_t *ker); int (*remap_slice)(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs); - void (*remap_line)(uint8_t *dst, int width, const uint8_t *src, ptrdiff_t in_linesize, - const uint16_t *u, const uint16_t *v, const int16_t *ker); + void (*remap_line)(uint8_t *dst, int width, const uint8_t *const src, ptrdiff_t in_linesize, + const int16_t *const u, const int16_t *const v, const int16_t *const ker); } V360Context; void ff_v360_init(V360Context *s, int depth);