FFmpeg  4.4.4
v360.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2019 Eugene Lyapustin
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #ifndef AVFILTER_V360_H
22 #define AVFILTER_V360_H
23 #include "avfilter.h"
24 
30 };
31 
58 };
59 
70 };
71 
72 enum Faces {
80 };
81 
82 enum Direction {
83  RIGHT, ///< Axis +X
84  LEFT, ///< Axis -X
85  UP, ///< Axis +Y
86  DOWN, ///< Axis -Y
87  FRONT, ///< Axis -Z
88  BACK, ///< Axis +Z
90 };
91 
92 enum Rotation {
98 };
99 
105 };
106 
107 typedef struct XYRemap {
108  int16_t u[4][4];
109  int16_t v[4][4];
110  float ker[4][4];
111 } XYRemap;
112 
113 typedef struct SliceXYRemap {
114  int16_t *u[2], *v[2];
115  int16_t *ker[2];
117 } SliceXYRemap;
118 
119 typedef struct V360Context {
120  const AVClass *class;
121  int in, out;
122  int interp;
123  int alpha;
124  int width, height;
125  char *in_forder;
126  char *out_forder;
127  char *in_frot;
128  char *out_frot;
129  char *rorder;
130 
136 
138 
139  float in_pad, out_pad;
141 
142  float yaw, pitch, roll;
143 
147 
148  float h_fov, v_fov, d_fov;
150  float flat_range[2];
151  float iflat_range[2];
152 
153  float rot_quaternion[2][4];
154 
156 
159 
160  int pr_width[4], pr_height[4];
161 
164 
167  int uv_linesize[4];
170  int elements;
174 
176  unsigned map[4];
177 
178  int (*in_transform)(const struct V360Context *s,
179  const float *vec, int width, int height,
180  int16_t us[4][4], int16_t vs[4][4], float *du, float *dv);
181 
182  int (*out_transform)(const struct V360Context *s,
183  int i, int j, int width, int height,
184  float *vec);
185 
186  void (*calculate_kernel)(float du, float dv, const XYRemap *rmap,
187  int16_t *u, int16_t *v, int16_t *ker);
188 
189  int (*remap_slice)(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs);
190 
191  void (*remap_line)(uint8_t *dst, int width, const uint8_t *const src, ptrdiff_t in_linesize,
192  const int16_t *const u, const int16_t *const v, const int16_t *const ker);
193 } V360Context;
194 
195 void ff_v360_init(V360Context *s, int depth);
196 void ff_v360_init_x86(V360Context *s, int depth);
197 
198 #endif /* AVFILTER_V360_H */
uint8_t
Main libavfilter public API header.
#define u(width, name, range_min, range_max)
Definition: cbs_h2645.c:264
#define us(width, name, range_min, range_max, subs,...)
Definition: cbs_h2645.c:278
#define s(width, name)
Definition: cbs_vp9.c:257
int
int i
Definition: input.c:407
const char * arg
Definition: jacosubdec.c:66
typedef void(RENAME(mix_any_func_type))
Describe the class of an AVClass context structure.
Definition: log.h:67
An instance of a filter.
Definition: avfilter.h:341
uint8_t * mask
Definition: v360.h:116
int16_t * u[2]
Definition: v360.h:114
int16_t * v[2]
Definition: v360.h:114
int16_t * ker[2]
Definition: v360.h:115
int in_stereo
Definition: v360.h:137
int out_offset_h[4]
Definition: v360.h:163
int pr_width[4]
Definition: v360.h:160
int v_flip
Definition: v360.h:145
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)
Definition: v360.h:178
float yaw
Definition: v360.h:142
int in_cubemap_face_order[6]
Definition: v360.h:131
int nb_allocated
Definition: v360.h:169
int h_flip
Definition: v360.h:145
int uv_linesize[4]
Definition: v360.h:167
int width
Definition: v360.h:124
int planeheight[4]
Definition: v360.h:165
float d_fov
Definition: v360.h:148
char * out_forder
Definition: v360.h:126
int in_offset_w[4]
Definition: v360.h:162
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)
Definition: v360.h:191
float roll
Definition: v360.h:142
float h_fov
Definition: v360.h:148
float rot_quaternion[2][4]
Definition: v360.h:153
int rotation_order[3]
Definition: v360.h:135
SliceXYRemap * slice_remap
Definition: v360.h:175
char * out_frot
Definition: v360.h:128
int fin_pad
Definition: v360.h:140
int interp
Definition: v360.h:122
float in_pad
Definition: v360.h:139
char * rorder
Definition: v360.h:129
int in_height
Definition: v360.h:157
int out_width
Definition: v360.h:158
int d_flip
Definition: v360.h:145
int out
Definition: v360.h:121
int out_cubemap_face_rotation[6]
Definition: v360.h:134
void(* calculate_kernel)(float du, float dv, const XYRemap *rmap, int16_t *u, int16_t *v, int16_t *ker)
Definition: v360.h:186
int planewidth[4]
Definition: v360.h:165
int in_offset_h[4]
Definition: v360.h:162
float iv_fov
Definition: v360.h:149
int in_transpose
Definition: v360.h:146
int iv_flip
Definition: v360.h:144
int out_offset_w[4]
Definition: v360.h:163
int nb_planes
Definition: v360.h:168
float pitch
Definition: v360.h:142
int ih_flip
Definition: v360.h:144
float ih_fov
Definition: v360.h:149
int inplanewidth[4]
Definition: v360.h:166
int mask_size
Definition: v360.h:171
int max_value
Definition: v360.h:172
float id_fov
Definition: v360.h:149
int in_width
Definition: v360.h:157
int nb_threads
Definition: v360.h:173
int in
Definition: v360.h:121
float v_fov
Definition: v360.h:148
int inplaneheight[4]
Definition: v360.h:166
float out_pad
Definition: v360.h:139
float iflat_range[2]
Definition: v360.h:151
int height
Definition: v360.h:124
int out_transpose
Definition: v360.h:146
int(* remap_slice)(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
Definition: v360.h:189
char * in_forder
Definition: v360.h:125
int out_height
Definition: v360.h:158
int pr_height[4]
Definition: v360.h:160
int alpha
Definition: v360.h:123
float output_mirror_modifier[3]
Definition: v360.h:155
int out_cubemap_direction_order[6]
Definition: v360.h:132
unsigned map[4]
Definition: v360.h:176
int(* out_transform)(const struct V360Context *s, int i, int j, int width, int height, float *vec)
Definition: v360.h:182
float flat_range[2]
Definition: v360.h:150
int fout_pad
Definition: v360.h:140
int elements
Definition: v360.h:170
int out_stereo
Definition: v360.h:137
char * in_frot
Definition: v360.h:127
int in_cubemap_face_rotation[6]
Definition: v360.h:133
Definition: v360.h:107
int16_t u[4][4]
Definition: v360.h:108
float ker[4][4]
Definition: v360.h:110
int16_t v[4][4]
Definition: v360.h:109
#define src
Definition: vp8dsp.c:255
AVFormatContext * ctx
Definition: movenc.c:48
Faces
Definition: v360.h:72
@ NB_FACES
Definition: v360.h:79
@ TOP_MIDDLE
Definition: v360.h:74
@ BOTTOM_RIGHT
Definition: v360.h:78
@ TOP_LEFT
Definition: v360.h:73
@ BOTTOM_LEFT
Definition: v360.h:76
@ TOP_RIGHT
Definition: v360.h:75
@ BOTTOM_MIDDLE
Definition: v360.h:77
Direction
Definition: v360.h:82
@ FRONT
Axis -Z.
Definition: v360.h:87
@ DOWN
Axis -Y.
Definition: v360.h:86
@ NB_DIRECTIONS
Definition: v360.h:89
@ UP
Axis +Y.
Definition: v360.h:85
@ BACK
Axis +Z.
Definition: v360.h:88
@ LEFT
Axis -X.
Definition: v360.h:84
@ RIGHT
Axis +X.
Definition: v360.h:83
Rotation
Definition: v360.h:92
@ ROT_90
Definition: v360.h:94
@ ROT_270
Definition: v360.h:96
@ ROT_0
Definition: v360.h:93
@ ROT_180
Definition: v360.h:95
@ NB_ROTATIONS
Definition: v360.h:97
void ff_v360_init(V360Context *s, int depth)
Definition: vf_v360.c:369
InterpMethod
Definition: v360.h:60
@ SPLINE16
Definition: v360.h:66
@ NEAREST
Definition: v360.h:61
@ NB_INTERP_METHODS
Definition: v360.h:69
@ LAGRANGE9
Definition: v360.h:63
@ MITCHELL
Definition: v360.h:68
@ BILINEAR
Definition: v360.h:62
@ BICUBIC
Definition: v360.h:64
@ LANCZOS
Definition: v360.h:65
@ GAUSSIAN
Definition: v360.h:67
void ff_v360_init_x86(V360Context *s, int depth)
Definition: vf_v360_init.c:44
Projections
Definition: v360.h:32
@ EQUISOLID
Definition: v360.h:54
@ FLAT
Definition: v360.h:37
@ FISHEYE
Definition: v360.h:46
@ DUAL_FISHEYE
Definition: v360.h:38
@ EQUIRECTANGULAR
Definition: v360.h:33
@ PERSPECTIVE
Definition: v360.h:49
@ TSPYRAMID
Definition: v360.h:52
@ CUBEMAP_3_2
Definition: v360.h:34
@ CUBEMAP_6_1
Definition: v360.h:35
@ SINUSOIDAL
Definition: v360.h:45
@ HEQUIRECTANGULAR
Definition: v360.h:53
@ OCTAHEDRON
Definition: v360.h:56
@ HAMMER
Definition: v360.h:44
@ CUBEMAP_1_6
Definition: v360.h:40
@ STEREOGRAPHIC
Definition: v360.h:41
@ CYLINDRICAL
Definition: v360.h:48
@ BALL
Definition: v360.h:43
@ PANNINI
Definition: v360.h:47
@ BARREL_SPLIT
Definition: v360.h:51
@ EQUIANGULAR
Definition: v360.h:36
@ BARREL
Definition: v360.h:39
@ NB_PROJECTIONS
Definition: v360.h:57
@ TETRAHEDRON
Definition: v360.h:50
@ MERCATOR
Definition: v360.h:42
@ ORTHOGRAPHIC
Definition: v360.h:55
StereoFormats
Definition: v360.h:25
@ STEREO_SBS
Definition: v360.h:27
@ STEREO_TB
Definition: v360.h:28
@ STEREO_2D
Definition: v360.h:26
@ NB_STEREO_FMTS
Definition: v360.h:29
RotationOrder
Definition: v360.h:100
@ ROLL
Definition: v360.h:103
@ NB_RORDERS
Definition: v360.h:104
@ YAW
Definition: v360.h:101
@ PITCH
Definition: v360.h:102