FFmpeg
Data Structures | Macros | Functions | Variables
vf_v360.c File Reference
#include <math.h>
#include "libavutil/avassert.h"
#include "libavutil/mem.h"
#include "libavutil/pixdesc.h"
#include "libavutil/opt.h"
#include "avfilter.h"
#include "filters.h"
#include "formats.h"
#include "video.h"
#include "v360.h"

Go to the source code of this file.

Data Structures

struct  ThreadData
 Used for passing data between threads. More...
 

Macros

#define OFFSET(x)   offsetof(V360Context, x)
 
#define FLAGS   AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
 
#define TFLAGS   AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
 
#define DEFINE_REMAP1_LINE(bits, div)
 
#define DEFINE_REMAP(ws, bits)
 Generate remapping function with a given window size and pixel depth. More...
 
#define DEFINE_REMAP_LINE(ws, bits, div)
 

Functions

 AVFILTER_DEFINE_CLASS (v360)
 
static int query_formats (const AVFilterContext *ctx, AVFilterFormatsConfig **cfg_in, AVFilterFormatsConfig **cfg_out)
 
void ff_v360_init (V360Context *s, int depth)
 
static void nearest_kernel (float du, float dv, const XYRemap *rmap, int16_t *u, int16_t *v, int16_t *ker)
 Save nearest pixel coordinates for remapping. More...
 
static void bilinear_kernel (float du, float dv, const XYRemap *rmap, int16_t *u, int16_t *v, int16_t *ker)
 Calculate kernel for bilinear interpolation. More...
 
static void calculate_lagrange_coeffs (float t, float *coeffs)
 Calculate 1-dimensional lagrange coefficients. More...
 
static void lagrange_kernel (float du, float dv, const XYRemap *rmap, int16_t *u, int16_t *v, int16_t *ker)
 Calculate kernel for lagrange interpolation. More...
 
static void calculate_bicubic_coeffs (float t, float *coeffs)
 Calculate 1-dimensional cubic coefficients. More...
 
static void bicubic_kernel (float du, float dv, const XYRemap *rmap, int16_t *u, int16_t *v, int16_t *ker)
 Calculate kernel for bicubic interpolation. More...
 
static void calculate_lanczos_coeffs (float t, float *coeffs)
 Calculate 1-dimensional lanczos coefficients. More...
 
static void lanczos_kernel (float du, float dv, const XYRemap *rmap, int16_t *u, int16_t *v, int16_t *ker)
 Calculate kernel for lanczos interpolation. More...
 
static void calculate_spline16_coeffs (float t, float *coeffs)
 Calculate 1-dimensional spline16 coefficients. More...
 
static void spline16_kernel (float du, float dv, const XYRemap *rmap, int16_t *u, int16_t *v, int16_t *ker)
 Calculate kernel for spline16 interpolation. More...
 
static void calculate_gaussian_coeffs (float t, float *coeffs)
 Calculate 1-dimensional gaussian coefficients. More...
 
static void gaussian_kernel (float du, float dv, const XYRemap *rmap, int16_t *u, int16_t *v, int16_t *ker)
 Calculate kernel for gaussian interpolation. More...
 
static void calculate_cubic_bc_coeffs (float t, float *coeffs, float b, float c)
 Calculate 1-dimensional cubic_bc_spline coefficients. More...
 
static void mitchell_kernel (float du, float dv, const XYRemap *rmap, int16_t *u, int16_t *v, int16_t *ker)
 Calculate kernel for mitchell interpolation. More...
 
static int mod (int a, int b)
 Modulo operation with only positive remainders. More...
 
static int reflecty (int y, int h)
 Reflect y operation. More...
 
static int ereflectx (int x, int y, int w, int h)
 Reflect x operation for equirect. More...
 
static int reflectx (int x, int y, int w, int h)
 Reflect x operation. More...
 
static int get_direction (char c)
 Convert char to corresponding direction. More...
 
static int get_rotation (char c)
 Convert char to corresponding rotation angle. More...
 
static int get_rorder (char c)
 Convert char to corresponding rotation order. More...
 
static int prepare_cube_in (AVFilterContext *ctx)
 Prepare data for processing cubemap input format. More...
 
static int prepare_cube_out (AVFilterContext *ctx)
 Prepare data for processing cubemap output format. More...
 
static void rotate_cube_face (float *uf, float *vf, int rotation)
 
static void rotate_cube_face_inverse (float *uf, float *vf, int rotation)
 
static void offset_vector (float *vec, float h_offset, float v_offset)
 Offset vector. More...
 
static void normalize_vector (float *vec)
 Normalize vector. More...
 
static void cube_to_xyz (const V360Context *s, float uf, float vf, int face, float *vec, float scalew, float scaleh)
 Calculate 3D coordinates on sphere for corresponding cubemap position. More...
 
static void xyz_to_cube (const V360Context *s, const float *vec, float *uf, float *vf, int *direction)
 Calculate cubemap position for corresponding 3D coordinates on sphere. More...
 
static void process_cube_coordinates (const V360Context *s, float uf, float vf, int direction, float *new_uf, float *new_vf, int *face)
 Find position on another cube face in case of overflow/underflow. More...
 
static av_always_inline float scale (float x, float s)
 
static av_always_inline float rescale (int x, float s)
 
static int cube3x2_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in cubemap3x2 format. More...
 
static int xyz_to_cube3x2 (const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 Calculate frame position in cubemap3x2 format for corresponding 3D coordinates on sphere. More...
 
static int cube1x6_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in cubemap1x6 format. More...
 
static int cube6x1_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in cubemap6x1 format. More...
 
static int xyz_to_cube1x6 (const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 Calculate frame position in cubemap1x6 format for corresponding 3D coordinates on sphere. More...
 
static int xyz_to_cube6x1 (const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 Calculate frame position in cubemap6x1 format for corresponding 3D coordinates on sphere. More...
 
static int prepare_equirect_out (AVFilterContext *ctx)
 Prepare data for processing equirectangular output format. More...
 
static int equirect_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in equirectangular format. More...
 
static int hequirect_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in half equirectangular format. More...
 
static int prepare_stereographic_out (AVFilterContext *ctx)
 Prepare data for processing stereographic output format. More...
 
static int stereographic_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in stereographic format. More...
 
static int prepare_stereographic_in (AVFilterContext *ctx)
 Prepare data for processing stereographic input format. More...
 
static int xyz_to_stereographic (const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 Calculate frame position in stereographic format for corresponding 3D coordinates on sphere. More...
 
static int prepare_equisolid_out (AVFilterContext *ctx)
 Prepare data for processing equisolid output format. More...
 
static int equisolid_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in equisolid format. More...
 
static int prepare_equisolid_in (AVFilterContext *ctx)
 Prepare data for processing equisolid input format. More...
 
static int xyz_to_equisolid (const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 Calculate frame position in equisolid format for corresponding 3D coordinates on sphere. More...
 
static int prepare_orthographic_out (AVFilterContext *ctx)
 Prepare data for processing orthographic output format. More...
 
static int orthographic_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in orthographic format. More...
 
static int prepare_orthographic_in (AVFilterContext *ctx)
 Prepare data for processing orthographic input format. More...
 
static int xyz_to_orthographic (const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 Calculate frame position in orthographic format for corresponding 3D coordinates on sphere. More...
 
static int prepare_equirect_in (AVFilterContext *ctx)
 Prepare data for processing equirectangular input format. More...
 
static int xyz_to_equirect (const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 Calculate frame position in equirectangular format for corresponding 3D coordinates on sphere. More...
 
static int xyz_to_hequirect (const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 Calculate frame position in half equirectangular format for corresponding 3D coordinates on sphere. More...
 
static int prepare_flat_in (AVFilterContext *ctx)
 Prepare data for processing flat input format. More...
 
static int xyz_to_flat (const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 Calculate frame position in flat format for corresponding 3D coordinates on sphere. More...
 
static int xyz_to_mercator (const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 Calculate frame position in mercator format for corresponding 3D coordinates on sphere. More...
 
static int mercator_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in mercator format. More...
 
static int xyz_to_ball (const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 Calculate frame position in ball format for corresponding 3D coordinates on sphere. More...
 
static int ball_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in ball format. More...
 
static int hammer_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in hammer format. More...
 
static int xyz_to_hammer (const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 Calculate frame position in hammer format for corresponding 3D coordinates on sphere. More...
 
static int sinusoidal_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in sinusoidal format. More...
 
static int xyz_to_sinusoidal (const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 Calculate frame position in sinusoidal format for corresponding 3D coordinates on sphere. More...
 
static int prepare_eac_in (AVFilterContext *ctx)
 Prepare data for processing equi-angular cubemap input format. More...
 
static int prepare_eac_out (AVFilterContext *ctx)
 Prepare data for processing equi-angular cubemap output format. More...
 
static int eac_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in equi-angular cubemap format. More...
 
static int xyz_to_eac (const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 Calculate frame position in equi-angular cubemap format for corresponding 3D coordinates on sphere. More...
 
static int prepare_flat_out (AVFilterContext *ctx)
 Prepare data for processing flat output format. More...
 
static int flat_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in flat format. More...
 
static int prepare_fisheye_out (AVFilterContext *ctx)
 Prepare data for processing fisheye output format. More...
 
static int fisheye_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in fisheye format. More...
 
static int prepare_fisheye_in (AVFilterContext *ctx)
 Prepare data for processing fisheye input format. More...
 
static int xyz_to_fisheye (const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 Calculate frame position in fisheye format for corresponding 3D coordinates on sphere. More...
 
static int pannini_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in pannini format. More...
 
static int xyz_to_pannini (const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 Calculate frame position in pannini format for corresponding 3D coordinates on sphere. More...
 
static int prepare_cylindrical_out (AVFilterContext *ctx)
 Prepare data for processing cylindrical output format. More...
 
static int cylindrical_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in cylindrical format. More...
 
static int prepare_cylindrical_in (AVFilterContext *ctx)
 Prepare data for processing cylindrical input format. More...
 
static int xyz_to_cylindrical (const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 Calculate frame position in cylindrical format for corresponding 3D coordinates on sphere. More...
 
static int prepare_cylindricalea_out (AVFilterContext *ctx)
 Prepare data for processing cylindrical equal area output format. More...
 
static int prepare_cylindricalea_in (AVFilterContext *ctx)
 Prepare data for processing cylindrical equal area input format. More...
 
static int cylindricalea_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in cylindrical equal area format. More...
 
static int xyz_to_cylindricalea (const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 Calculate frame position in cylindrical equal area format for corresponding 3D coordinates on sphere. More...
 
static int perspective_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in perspective format. More...
 
static int tetrahedron_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in tetrahedron format. More...
 
static int xyz_to_tetrahedron (const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 Calculate frame position in tetrahedron format for corresponding 3D coordinates on sphere. More...
 
static int prepare_dfisheye_in (AVFilterContext *ctx)
 Prepare data for processing double fisheye input format. More...
 
static int dfisheye_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in dual fisheye format. More...
 
static int xyz_to_dfisheye (const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 Calculate frame position in dual fisheye format for corresponding 3D coordinates on sphere. More...
 
static int barrel_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in barrel facebook's format. More...
 
static int xyz_to_barrel (const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 Calculate frame position in barrel facebook's format for corresponding 3D coordinates on sphere. More...
 
static int xyz_to_barrelsplit (const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 Calculate frame position in barrel split facebook's format for corresponding 3D coordinates on sphere. More...
 
static int barrelsplit_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in barrel split facebook's format. More...
 
static int tspyramid_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in tspyramid format. More...
 
static int xyz_to_tspyramid (const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 Calculate frame position in tspyramid format for corresponding 3D coordinates on sphere. More...
 
static int octahedron_to_xyz (const V360Context *s, int i, int j, int width, int height, float *vec)
 Calculate 3D coordinates on sphere for corresponding frame position in octahedron format. More...
 
static int xyz_to_octahedron (const V360Context *s, const float *vec, int width, int height, int16_t us[4][4], int16_t vs[4][4], float *du, float *dv)
 Calculate frame position in octahedron format for corresponding 3D coordinates on sphere. More...
 
static void multiply_quaternion (float c[4], const float a[4], const float b[4])
 
static void conjugate_quaternion (float d[4], const float q[4])
 
static void calculate_rotation (float yaw, float pitch, float roll, float rot_quaternion[2][4], const int rotation_order[3])
 Calculate rotation quaternion for yaw/pitch/roll angles. More...
 
static void rotate (const float rot_quaternion[2][4], float *vec)
 Rotate vector with given rotation quaternion. More...
 
static void set_mirror_modifier (int h_flip, int v_flip, int d_flip, float *modifier)
 
static void mirror (const float *modifier, float *vec)
 
static void input_flip (int16_t u[4][4], int16_t v[4][4], int w, int h, int hflip, int vflip)
 
static int allocate_plane (V360Context *s, int sizeof_uv, int sizeof_ker, int sizeof_mask, int p)
 
static void fov_from_dfov (int format, float d_fov, float w, float h, float *h_fov, float *v_fov)
 
static void set_dimensions (int *outw, int *outh, int w, int h, const AVPixFmtDescriptor *desc)
 
static int v360_slice (AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
 
static int config_output (AVFilterLink *outlink)
 
static int filter_frame (AVFilterLink *inlink, AVFrame *in)
 
static void reset_rot (V360Context *s)
 
static int process_command (AVFilterContext *ctx, const char *cmd, const char *args, char *res, int res_len, int flags)
 
static av_cold int init (AVFilterContext *ctx)
 
static av_cold void uninit (AVFilterContext *ctx)
 

Variables

static const AVOption v360_options []
 
static const AVFilterPad inputs []
 
static const AVFilterPad outputs []
 
const AVFilter ff_vf_v360
 

Detailed Description

360 video conversion filter. Principle of operation:

(for each pixel in output frame) 1) Calculate OpenGL-like coordinates (x, y, z) for pixel position (i, j) 2) Apply 360 operations (rotation, mirror) to (x, y, z) 3) Calculate pixel position (u, v) in input frame 4) Calculate interpolation window and weight for each pixel

(for each frame) 5) Remap input frame to output frame using precalculated data

Definition in file vf_v360.c.

Macro Definition Documentation

◆ OFFSET

#define OFFSET (   x)    offsetof(V360Context, x)

Definition at line 53 of file vf_v360.c.

◆ FLAGS

Definition at line 54 of file vf_v360.c.

◆ TFLAGS

Definition at line 55 of file vf_v360.c.

◆ DEFINE_REMAP1_LINE

#define DEFINE_REMAP1_LINE (   bits,
  div 
)
Value:
static void remap1_##bits##bit_line_c(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) \
{ \
const uint##bits##_t *const s = (const uint##bits##_t *const)src; \
uint##bits##_t *d = (uint##bits##_t *)dst; \
\
in_linesize /= div; \
for (int x = 0; x < width; x++) \
d[x] = s[v[x] * in_linesize + u[x]]; \
}

Definition at line 259 of file vf_v360.c.

◆ DEFINE_REMAP

#define DEFINE_REMAP (   ws,
  bits 
)

Generate remapping function with a given window size and pixel depth.

Parameters
wssize of interpolation window
bitsnumber of bits per pixel

Definition at line 283 of file vf_v360.c.

◆ DEFINE_REMAP_LINE

#define DEFINE_REMAP_LINE (   ws,
  bits,
  div 
)
Value:
static void remap##ws##_##bits##bit_line_c(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) \
{ \
const uint##bits##_t *const s = (const uint##bits##_t *const)src; \
uint##bits##_t *d = (uint##bits##_t *)dst; \
\
in_linesize /= div; \
for (int x = 0; x < width; x++) { \
const int16_t *const uu = u + x * ws * ws; \
const int16_t *const vv = v + x * ws * ws; \
const int16_t *const kker = ker + x * ws * ws; \
int tmp = 0; \
for (int i = 0; i < ws; i++) { \
const int iws = i * ws; \
for (int j = 0; j < ws; j++) { \
tmp += kker[iws + j] * s[vv[iws + j] * in_linesize + uu[iws + j]]; \
} \
} \
\
d[x] = av_clip_uint##bits(tmp >> 14); \
} \
}

Definition at line 341 of file vf_v360.c.

Function Documentation

◆ AVFILTER_DEFINE_CLASS()

AVFILTER_DEFINE_CLASS ( v360  )

◆ query_formats()

static int query_formats ( const AVFilterContext ctx,
AVFilterFormatsConfig **  cfg_in,
AVFilterFormatsConfig **  cfg_out 
)
static

Definition at line 175 of file vf_v360.c.

◆ ff_v360_init()

void ff_v360_init ( V360Context s,
int  depth 
)

Definition at line 376 of file vf_v360.c.

Referenced by config_output().

◆ nearest_kernel()

static void nearest_kernel ( float  du,
float  dv,
const XYRemap rmap,
int16_t *  u,
int16_t *  v,
int16_t *  ker 
)
static

Save nearest pixel coordinates for remapping.

Parameters
duhorizontal relative coordinate
dvvertical relative coordinate
rmapcalculated 4x4 window
uu remap data
vv remap data
kerker remap data

Definition at line 412 of file vf_v360.c.

Referenced by config_output().

◆ bilinear_kernel()

static void bilinear_kernel ( float  du,
float  dv,
const XYRemap rmap,
int16_t *  u,
int16_t *  v,
int16_t *  ker 
)
static

Calculate kernel for bilinear interpolation.

Parameters
duhorizontal relative coordinate
dvvertical relative coordinate
rmapcalculated 4x4 window
uu remap data
vv remap data
kerker remap data

Definition at line 432 of file vf_v360.c.

Referenced by config_output().

◆ calculate_lagrange_coeffs()

static void calculate_lagrange_coeffs ( float  t,
float coeffs 
)
inlinestatic

Calculate 1-dimensional lagrange coefficients.

Parameters
trelative coordinate
coeffscoefficients

Definition at line 454 of file vf_v360.c.

Referenced by lagrange_kernel().

◆ lagrange_kernel()

static void lagrange_kernel ( float  du,
float  dv,
const XYRemap rmap,
int16_t *  u,
int16_t *  v,
int16_t *  ker 
)
static

Calculate kernel for lagrange interpolation.

Parameters
duhorizontal relative coordinate
dvvertical relative coordinate
rmapcalculated 4x4 window
uu remap data
vv remap data
kerker remap data

Definition at line 471 of file vf_v360.c.

Referenced by config_output().

◆ calculate_bicubic_coeffs()

static void calculate_bicubic_coeffs ( float  t,
float coeffs 
)
inlinestatic

Calculate 1-dimensional cubic coefficients.

Parameters
trelative coordinate
coeffscoefficients

Definition at line 495 of file vf_v360.c.

Referenced by bicubic_kernel().

◆ bicubic_kernel()

static void bicubic_kernel ( float  du,
float  dv,
const XYRemap rmap,
int16_t *  u,
int16_t *  v,
int16_t *  ker 
)
static

Calculate kernel for bicubic interpolation.

Parameters
duhorizontal relative coordinate
dvvertical relative coordinate
rmapcalculated 4x4 window
uu remap data
vv remap data
kerker remap data

Definition at line 516 of file vf_v360.c.

Referenced by config_output().

◆ calculate_lanczos_coeffs()

static void calculate_lanczos_coeffs ( float  t,
float coeffs 
)
inlinestatic

Calculate 1-dimensional lanczos coefficients.

Parameters
trelative coordinate
coeffscoefficients

Definition at line 540 of file vf_v360.c.

Referenced by lanczos_kernel().

◆ lanczos_kernel()

static void lanczos_kernel ( float  du,
float  dv,
const XYRemap rmap,
int16_t *  u,
int16_t *  v,
int16_t *  ker 
)
static

Calculate kernel for lanczos interpolation.

Parameters
duhorizontal relative coordinate
dvvertical relative coordinate
rmapcalculated 4x4 window
uu remap data
vv remap data
kerker remap data

Definition at line 569 of file vf_v360.c.

Referenced by config_output().

◆ calculate_spline16_coeffs()

static void calculate_spline16_coeffs ( float  t,
float coeffs 
)
static

Calculate 1-dimensional spline16 coefficients.

Parameters
trelative coordinate
coeffscoefficients

Definition at line 593 of file vf_v360.c.

Referenced by spline16_kernel().

◆ spline16_kernel()

static void spline16_kernel ( float  du,
float  dv,
const XYRemap rmap,
int16_t *  u,
int16_t *  v,
int16_t *  ker 
)
static

Calculate kernel for spline16 interpolation.

Parameters
duhorizontal relative coordinate
dvvertical relative coordinate
rmapcalculated 4x4 window
uu remap data
vv remap data
kerker remap data

Definition at line 611 of file vf_v360.c.

Referenced by config_output().

◆ calculate_gaussian_coeffs()

static void calculate_gaussian_coeffs ( float  t,
float coeffs 
)
static

Calculate 1-dimensional gaussian coefficients.

Parameters
trelative coordinate
coeffscoefficients

Definition at line 635 of file vf_v360.c.

Referenced by gaussian_kernel().

◆ gaussian_kernel()

static void gaussian_kernel ( float  du,
float  dv,
const XYRemap rmap,
int16_t *  u,
int16_t *  v,
int16_t *  ker 
)
static

Calculate kernel for gaussian interpolation.

Parameters
duhorizontal relative coordinate
dvvertical relative coordinate
rmapcalculated 4x4 window
uu remap data
vv remap data
kerker remap data

Definition at line 664 of file vf_v360.c.

Referenced by config_output().

◆ calculate_cubic_bc_coeffs()

static void calculate_cubic_bc_coeffs ( float  t,
float coeffs,
float  b,
float  c 
)
static

Calculate 1-dimensional cubic_bc_spline coefficients.

Parameters
trelative coordinate
coeffscoefficients

Definition at line 688 of file vf_v360.c.

Referenced by mitchell_kernel().

◆ mitchell_kernel()

static void mitchell_kernel ( float  du,
float  dv,
const XYRemap rmap,
int16_t *  u,
int16_t *  v,
int16_t *  ker 
)
static

Calculate kernel for mitchell interpolation.

Parameters
duhorizontal relative coordinate
dvvertical relative coordinate
rmapcalculated 4x4 window
uu remap data
vv remap data
kerker remap data

Definition at line 729 of file vf_v360.c.

Referenced by config_output().

◆ mod()

static int mod ( int  a,
int  b 
)
inlinestatic

Modulo operation with only positive remainders.

Parameters
adividend
bdivisor
Returns
positive remainder of (a / b)

Definition at line 755 of file vf_v360.c.

Referenced by av_compare_mod(), check_extensions(), choose_vlc_set(), create_shader_module(), draw_sierpinski(), ereflectx(), ff_aac_ldp_parse_channel_stream(), ff_vk_shader_link(), filter(), init_compute_pipeline(), l1_unscale(), l2_unscale_group(), mpegaudiodec_common_init_static(), reflectx(), and request_frame().

◆ reflecty()

static int reflecty ( int  y,
int  h 
)
inlinestatic

Reflect y operation.

Parameters
yinput vertical position
hinput height

Definition at line 771 of file vf_v360.c.

Referenced by xyz_to_equirect(), xyz_to_tetrahedron(), and xyz_to_tspyramid().

◆ ereflectx()

static int ereflectx ( int  x,
int  y,
int  w,
int  h 
)
inlinestatic

Reflect x operation for equirect.

Parameters
xinput horizontal position
yinput vertical position
winput width
hinput height

Definition at line 790 of file vf_v360.c.

Referenced by xyz_to_equirect().

◆ reflectx()

static int reflectx ( int  x,
int  y,
int  w,
int  h 
)
inlinestatic

Reflect x operation.

Parameters
xinput horizontal position
yinput vertical position
winput width
hinput height

Definition at line 806 of file vf_v360.c.

Referenced by xyz_to_tetrahedron(), and xyz_to_tspyramid().

◆ get_direction()

static int get_direction ( char  c)
static

Convert char to corresponding direction.

Used for cubemap options.

Definition at line 818 of file vf_v360.c.

Referenced by prepare_cube_in(), and prepare_cube_out().

◆ get_rotation()

static int get_rotation ( char  c)
static

Convert char to corresponding rotation angle.

Used for cubemap options.

Definition at line 842 of file vf_v360.c.

Referenced by prepare_cube_in(), and prepare_cube_out().

◆ get_rorder()

static int get_rorder ( char  c)
static

Convert char to corresponding rotation order.

Definition at line 861 of file vf_v360.c.

Referenced by config_output().

◆ prepare_cube_in()

static int prepare_cube_in ( AVFilterContext ctx)
static

Prepare data for processing cubemap input format.

Parameters
ctxfilter context
Returns
error code

Definition at line 885 of file vf_v360.c.

Referenced by config_output().

◆ prepare_cube_out()

static int prepare_cube_out ( AVFilterContext ctx)
static

Prepare data for processing cubemap output format.

Parameters
ctxfilter context
Returns
error code

Definition at line 939 of file vf_v360.c.

Referenced by config_output().

◆ rotate_cube_face()

static void rotate_cube_face ( float uf,
float vf,
int  rotation 
)
inlinestatic

Definition at line 986 of file vf_v360.c.

Referenced by process_cube_coordinates(), and xyz_to_cube().

◆ rotate_cube_face_inverse()

static void rotate_cube_face_inverse ( float uf,
float vf,
int  rotation 
)
inlinestatic

Definition at line 1012 of file vf_v360.c.

Referenced by cube_to_xyz(), and process_cube_coordinates().

◆ offset_vector()

static void offset_vector ( float vec,
float  h_offset,
float  v_offset 
)
static

Offset vector.

Parameters
vecvector

Definition at line 1043 of file vf_v360.c.

Referenced by v360_slice().

◆ normalize_vector()

static void normalize_vector ( float vec)
static

Normalize vector.

Parameters
vecvector

Definition at line 1054 of file vf_v360.c.

Referenced by v360_slice().

◆ cube_to_xyz()

static void cube_to_xyz ( const V360Context s,
float  uf,
float  vf,
int  face,
float vec,
float  scalew,
float  scaleh 
)
static

Calculate 3D coordinates on sphere for corresponding cubemap position.

Common operation for every cubemap.

Parameters
sfilter private context
ufhorizontal cubemap coordinate [0, 1)
vfvertical cubemap coordinate [0, 1)
faceface of cubemap
veccoordinates on sphere
scalewscale for uf
scalehscale for vf

Definition at line 1075 of file vf_v360.c.

Referenced by cube1x6_to_xyz(), cube3x2_to_xyz(), and cube6x1_to_xyz().

◆ xyz_to_cube()

static void xyz_to_cube ( const V360Context s,
const float vec,
float uf,
float vf,
int *  direction 
)
static

Calculate cubemap position for corresponding 3D coordinates on sphere.

Common operation for every cubemap.

Parameters
sfilter private context
veccoordinated on sphere
ufhorizontal cubemap coordinate [0, 1)
vfvertical cubemap coordinate [0, 1)
directiondirection of view

Definition at line 1137 of file vf_v360.c.

Referenced by xyz_to_cube1x6(), xyz_to_cube3x2(), xyz_to_cube6x1(), xyz_to_eac(), and xyz_to_tspyramid().

◆ process_cube_coordinates()

static void process_cube_coordinates ( const V360Context s,
float  uf,
float  vf,
int  direction,
float new_uf,
float new_vf,
int *  face 
)
static

Find position on another cube face in case of overflow/underflow.

Used for calculation of interpolation window.

Parameters
sfilter private context
ufhorizontal cubemap coordinate
vfvertical cubemap coordinate
directiondirection of view
new_ufnew horizontal cubemap coordinate
new_vfnew vertical cubemap coordinate
faceface position on cubemap

Definition at line 1212 of file vf_v360.c.

Referenced by xyz_to_cube1x6(), xyz_to_cube3x2(), and xyz_to_cube6x1().

◆ scale()

static av_always_inline float scale ( float  x,
float  s 
)
static

◆ rescale()

static av_always_inline float rescale ( int  x,
float  s 
)
static

◆ cube3x2_to_xyz()

static int cube3x2_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in cubemap3x2 format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 1414 of file vf_v360.c.

Referenced by config_output().

◆ xyz_to_cube3x2()

static int xyz_to_cube3x2 ( const V360Context s,
const float vec,
int  width,
int  height,
int16_t  us[4][4],
int16_t  vs[4][4],
float du,
float dv 
)
static

Calculate frame position in cubemap3x2 format for corresponding 3D coordinates on sphere.

Parameters
sfilter private context
veccoordinates on sphere
widthframe width
heightframe height
ushorizontal coordinates for interpolation window
vsvertical coordinates for interpolation window
duhorizontal relative coordinate
dvvertical relative coordinate

Definition at line 1453 of file vf_v360.c.

Referenced by config_output().

◆ cube1x6_to_xyz()

static int cube1x6_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in cubemap1x6 format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 1542 of file vf_v360.c.

Referenced by config_output().

◆ cube6x1_to_xyz()

static int cube6x1_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in cubemap6x1 format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 1575 of file vf_v360.c.

Referenced by config_output().

◆ xyz_to_cube1x6()

static int xyz_to_cube1x6 ( const V360Context s,
const float vec,
int  width,
int  height,
int16_t  us[4][4],
int16_t  vs[4][4],
float du,
float dv 
)
static

Calculate frame position in cubemap1x6 format for corresponding 3D coordinates on sphere.

Parameters
sfilter private context
veccoordinates on sphere
widthframe width
heightframe height
ushorizontal coordinates for interpolation window
vsvertical coordinates for interpolation window
duhorizontal relative coordinate
dvvertical relative coordinate

Definition at line 1610 of file vf_v360.c.

Referenced by config_output().

◆ xyz_to_cube6x1()

static int xyz_to_cube6x1 ( const V360Context s,
const float vec,
int  width,
int  height,
int16_t  us[4][4],
int16_t  vs[4][4],
float du,
float dv 
)
static

Calculate frame position in cubemap6x1 format for corresponding 3D coordinates on sphere.

Parameters
sfilter private context
veccoordinates on sphere
widthframe width
heightframe height
ushorizontal coordinates for interpolation window
vsvertical coordinates for interpolation window
duhorizontal relative coordinate
dvvertical relative coordinate

Definition at line 1690 of file vf_v360.c.

Referenced by config_output().

◆ prepare_equirect_out()

static int prepare_equirect_out ( AVFilterContext ctx)
static

Prepare data for processing equirectangular output format.

Parameters
ctxfilter context
Returns
error code

Definition at line 1765 of file vf_v360.c.

Referenced by config_output().

◆ equirect_to_xyz()

static int equirect_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in equirectangular format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 1785 of file vf_v360.c.

Referenced by config_output().

◆ hequirect_to_xyz()

static int hequirect_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in half equirectangular format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 1814 of file vf_v360.c.

Referenced by config_output().

◆ prepare_stereographic_out()

static int prepare_stereographic_out ( AVFilterContext ctx)
static

Prepare data for processing stereographic output format.

Parameters
ctxfilter context
Returns
error code

Definition at line 1840 of file vf_v360.c.

Referenced by config_output().

◆ stereographic_to_xyz()

static int stereographic_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in stereographic format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 1860 of file vf_v360.c.

Referenced by config_output().

◆ prepare_stereographic_in()

static int prepare_stereographic_in ( AVFilterContext ctx)
static

Prepare data for processing stereographic input format.

Parameters
ctxfilter context
Returns
error code

Definition at line 1884 of file vf_v360.c.

Referenced by config_output().

◆ xyz_to_stereographic()

static int xyz_to_stereographic ( const V360Context s,
const float vec,
int  width,
int  height,
int16_t  us[4][4],
int16_t  vs[4][4],
float du,
float dv 
)
static

Calculate frame position in stereographic format for corresponding 3D coordinates on sphere.

Parameters
sfilter private context
veccoordinates on sphere
widthframe width
heightframe height
ushorizontal coordinates for interpolation window
vsvertical coordinates for interpolation window
duhorizontal relative coordinate
dvvertical relative coordinate

Definition at line 1906 of file vf_v360.c.

Referenced by config_output().

◆ prepare_equisolid_out()

static int prepare_equisolid_out ( AVFilterContext ctx)
static

Prepare data for processing equisolid output format.

Parameters
ctxfilter context
Returns
error code

Definition at line 1944 of file vf_v360.c.

Referenced by config_output().

◆ equisolid_to_xyz()

static int equisolid_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in equisolid format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 1964 of file vf_v360.c.

Referenced by config_output().

◆ prepare_equisolid_in()

static int prepare_equisolid_in ( AVFilterContext ctx)
static

Prepare data for processing equisolid input format.

Parameters
ctxfilter context
Returns
error code

Definition at line 1988 of file vf_v360.c.

Referenced by config_output().

◆ xyz_to_equisolid()

static int xyz_to_equisolid ( const V360Context s,
const float vec,
int  width,
int  height,
int16_t  us[4][4],
int16_t  vs[4][4],
float du,
float dv 
)
static

Calculate frame position in equisolid format for corresponding 3D coordinates on sphere.

Parameters
sfilter private context
veccoordinates on sphere
widthframe width
heightframe height
ushorizontal coordinates for interpolation window
vsvertical coordinates for interpolation window
duhorizontal relative coordinate
dvvertical relative coordinate

Definition at line 2010 of file vf_v360.c.

Referenced by config_output().

◆ prepare_orthographic_out()

static int prepare_orthographic_out ( AVFilterContext ctx)
static

Prepare data for processing orthographic output format.

Parameters
ctxfilter context
Returns
error code

Definition at line 2048 of file vf_v360.c.

Referenced by config_output().

◆ orthographic_to_xyz()

static int orthographic_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in orthographic format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 2068 of file vf_v360.c.

Referenced by config_output().

◆ prepare_orthographic_in()

static int prepare_orthographic_in ( AVFilterContext ctx)
static

Prepare data for processing orthographic input format.

Parameters
ctxfilter context
Returns
error code

Definition at line 2099 of file vf_v360.c.

Referenced by config_output().

◆ xyz_to_orthographic()

static int xyz_to_orthographic ( const V360Context s,
const float vec,
int  width,
int  height,
int16_t  us[4][4],
int16_t  vs[4][4],
float du,
float dv 
)
static

Calculate frame position in orthographic format for corresponding 3D coordinates on sphere.

Parameters
sfilter private context
veccoordinates on sphere
widthframe width
heightframe height
ushorizontal coordinates for interpolation window
vsvertical coordinates for interpolation window
duhorizontal relative coordinate
dvvertical relative coordinate

Definition at line 2121 of file vf_v360.c.

Referenced by config_output().

◆ prepare_equirect_in()

static int prepare_equirect_in ( AVFilterContext ctx)
static

Prepare data for processing equirectangular input format.

Parameters
ctxfilter context
Returns
error code

Definition at line 2159 of file vf_v360.c.

Referenced by config_output().

◆ xyz_to_equirect()

static int xyz_to_equirect ( const V360Context s,
const float vec,
int  width,
int  height,
int16_t  us[4][4],
int16_t  vs[4][4],
float du,
float dv 
)
static

Calculate frame position in equirectangular format for corresponding 3D coordinates on sphere.

Parameters
sfilter private context
veccoordinates on sphere
widthframe width
heightframe height
ushorizontal coordinates for interpolation window
vsvertical coordinates for interpolation window
duhorizontal relative coordinate
dvvertical relative coordinate

Definition at line 2181 of file vf_v360.c.

Referenced by config_output().

◆ xyz_to_hequirect()

static int xyz_to_hequirect ( const V360Context s,
const float vec,
int  width,
int  height,
int16_t  us[4][4],
int16_t  vs[4][4],
float du,
float dv 
)
static

Calculate frame position in half equirectangular format for corresponding 3D coordinates on sphere.

Parameters
sfilter private context
veccoordinates on sphere
widthframe width
heightframe height
ushorizontal coordinates for interpolation window
vsvertical coordinates for interpolation window
duhorizontal relative coordinate
dvvertical relative coordinate

Definition at line 2222 of file vf_v360.c.

Referenced by config_output().

◆ prepare_flat_in()

static int prepare_flat_in ( AVFilterContext ctx)
static

Prepare data for processing flat input format.

Parameters
ctxfilter context
Returns
error code

Definition at line 2257 of file vf_v360.c.

Referenced by config_output().

◆ xyz_to_flat()

static int xyz_to_flat ( const V360Context s,
const float vec,
int  width,
int  height,
int16_t  us[4][4],
int16_t  vs[4][4],
float du,
float dv 
)
static

Calculate frame position in flat format for corresponding 3D coordinates on sphere.

Parameters
sfilter private context
veccoordinates on sphere
widthframe width
heightframe height
ushorizontal coordinates for interpolation window
vsvertical coordinates for interpolation window
duhorizontal relative coordinate
dvvertical relative coordinate

Definition at line 2279 of file vf_v360.c.

Referenced by config_output().

◆ xyz_to_mercator()

static int xyz_to_mercator ( const V360Context s,
const float vec,
int  width,
int  height,
int16_t  us[4][4],
int16_t  vs[4][4],
float du,
float dv 
)
static

Calculate frame position in mercator format for corresponding 3D coordinates on sphere.

Parameters
sfilter private context
veccoordinates on sphere
widthframe width
heightframe height
ushorizontal coordinates for interpolation window
vsvertical coordinates for interpolation window
duhorizontal relative coordinate
dvvertical relative coordinate

Definition at line 2326 of file vf_v360.c.

Referenced by config_output().

◆ mercator_to_xyz()

static int mercator_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in mercator format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 2362 of file vf_v360.c.

Referenced by config_output().

◆ xyz_to_ball()

static int xyz_to_ball ( const V360Context s,
const float vec,
int  width,
int  height,
int16_t  us[4][4],
int16_t  vs[4][4],
float du,
float dv 
)
static

Calculate frame position in ball format for corresponding 3D coordinates on sphere.

Parameters
sfilter private context
veccoordinates on sphere
widthframe width
heightframe height
ushorizontal coordinates for interpolation window
vsvertical coordinates for interpolation window
duhorizontal relative coordinate
dvvertical relative coordinate

Definition at line 2394 of file vf_v360.c.

Referenced by config_output().

◆ ball_to_xyz()

static int ball_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in ball format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 2431 of file vf_v360.c.

Referenced by config_output().

◆ hammer_to_xyz()

static int hammer_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in hammer format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 2465 of file vf_v360.c.

Referenced by config_output().

◆ xyz_to_hammer()

static int xyz_to_hammer ( const V360Context s,
const float vec,
int  width,
int  height,
int16_t  us[4][4],
int16_t  vs[4][4],
float du,
float dv 
)
static

Calculate frame position in hammer format for corresponding 3D coordinates on sphere.

Parameters
sfilter private context
veccoordinates on sphere
widthframe width
heightframe height
ushorizontal coordinates for interpolation window
vsvertical coordinates for interpolation window
duhorizontal relative coordinate
dvvertical relative coordinate

Definition at line 2504 of file vf_v360.c.

Referenced by config_output().

◆ sinusoidal_to_xyz()

static int sinusoidal_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in sinusoidal format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 2543 of file vf_v360.c.

Referenced by config_output().

◆ xyz_to_sinusoidal()

static int xyz_to_sinusoidal ( const V360Context s,
const float vec,
int  width,
int  height,
int16_t  us[4][4],
int16_t  vs[4][4],
float du,
float dv 
)
static

Calculate frame position in sinusoidal format for corresponding 3D coordinates on sphere.

Parameters
sfilter private context
veccoordinates on sphere
widthframe width
heightframe height
ushorizontal coordinates for interpolation window
vsvertical coordinates for interpolation window
duhorizontal relative coordinate
dvvertical relative coordinate

Definition at line 2574 of file vf_v360.c.

Referenced by config_output().

◆ prepare_eac_in()

static int prepare_eac_in ( AVFilterContext ctx)
static

Prepare data for processing equi-angular cubemap input format.

Parameters
ctxfilter context
Returns
error code

Definition at line 2607 of file vf_v360.c.

Referenced by config_output().

◆ prepare_eac_out()

static int prepare_eac_out ( AVFilterContext ctx)
static

Prepare data for processing equi-angular cubemap output format.

Parameters
ctxfilter context
Returns
error code

Definition at line 2635 of file vf_v360.c.

Referenced by config_output().

◆ eac_to_xyz()

static int eac_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in equi-angular cubemap format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 2666 of file vf_v360.c.

Referenced by config_output().

◆ xyz_to_eac()

static int xyz_to_eac ( const V360Context s,
const float vec,
int  width,
int  height,
int16_t  us[4][4],
int16_t  vs[4][4],
float du,
float dv 
)
static

Calculate frame position in equi-angular cubemap format for corresponding 3D coordinates on sphere.

Parameters
sfilter private context
veccoordinates on sphere
widthframe width
heightframe height
ushorizontal coordinates for interpolation window
vsvertical coordinates for interpolation window
duhorizontal relative coordinate
dvvertical relative coordinate

Definition at line 2769 of file vf_v360.c.

Referenced by config_output().

◆ prepare_flat_out()

static int prepare_flat_out ( AVFilterContext ctx)
static

Prepare data for processing flat output format.

Parameters
ctxfilter context
Returns
error code

Definition at line 2824 of file vf_v360.c.

Referenced by config_output().

◆ flat_to_xyz()

static int flat_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in flat format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 2844 of file vf_v360.c.

Referenced by config_output().

◆ prepare_fisheye_out()

static int prepare_fisheye_out ( AVFilterContext ctx)
static

Prepare data for processing fisheye output format.

Parameters
ctxfilter context
Returns
error code

Definition at line 2865 of file vf_v360.c.

Referenced by config_output().

◆ fisheye_to_xyz()

static int fisheye_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in fisheye format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 2885 of file vf_v360.c.

Referenced by config_output().

◆ prepare_fisheye_in()

static int prepare_fisheye_in ( AVFilterContext ctx)
static

Prepare data for processing fisheye input format.

Parameters
ctxfilter context
Returns
error code

Definition at line 2914 of file vf_v360.c.

Referenced by config_output().

◆ xyz_to_fisheye()

static int xyz_to_fisheye ( const V360Context s,
const float vec,
int  width,
int  height,
int16_t  us[4][4],
int16_t  vs[4][4],
float du,
float dv 
)
static

Calculate frame position in fisheye format for corresponding 3D coordinates on sphere.

Parameters
sfilter private context
veccoordinates on sphere
widthframe width
heightframe height
ushorizontal coordinates for interpolation window
vsvertical coordinates for interpolation window
duhorizontal relative coordinate
dvvertical relative coordinate

Definition at line 2936 of file vf_v360.c.

Referenced by config_output().

◆ pannini_to_xyz()

static int pannini_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in pannini format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 2979 of file vf_v360.c.

Referenced by config_output().

◆ xyz_to_pannini()

static int xyz_to_pannini ( const V360Context s,
const float vec,
int  width,
int  height,
int16_t  us[4][4],
int16_t  vs[4][4],
float du,
float dv 
)
static

Calculate frame position in pannini format for corresponding 3D coordinates on sphere.

Parameters
sfilter private context
veccoordinates on sphere
widthframe width
heightframe height
ushorizontal coordinates for interpolation window
vsvertical coordinates for interpolation window
duhorizontal relative coordinate
dvvertical relative coordinate

Definition at line 3013 of file vf_v360.c.

Referenced by config_output().

◆ prepare_cylindrical_out()

static int prepare_cylindrical_out ( AVFilterContext ctx)
static

Prepare data for processing cylindrical output format.

Parameters
ctxfilter context
Returns
error code

Definition at line 3054 of file vf_v360.c.

Referenced by config_output().

◆ cylindrical_to_xyz()

static int cylindrical_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in cylindrical format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 3074 of file vf_v360.c.

Referenced by config_output().

◆ prepare_cylindrical_in()

static int prepare_cylindrical_in ( AVFilterContext ctx)
static

Prepare data for processing cylindrical input format.

Parameters
ctxfilter context
Returns
error code

Definition at line 3103 of file vf_v360.c.

Referenced by config_output().

◆ xyz_to_cylindrical()

static int xyz_to_cylindrical ( const V360Context s,
const float vec,
int  width,
int  height,
int16_t  us[4][4],
int16_t  vs[4][4],
float du,
float dv 
)
static

Calculate frame position in cylindrical format for corresponding 3D coordinates on sphere.

Parameters
sfilter private context
veccoordinates on sphere
widthframe width
heightframe height
ushorizontal coordinates for interpolation window
vsvertical coordinates for interpolation window
duhorizontal relative coordinate
dvvertical relative coordinate

Definition at line 3125 of file vf_v360.c.

Referenced by config_output().

◆ prepare_cylindricalea_out()

static int prepare_cylindricalea_out ( AVFilterContext ctx)
static

Prepare data for processing cylindrical equal area output format.

Parameters
ctxfilter context
Returns
error code

Definition at line 3162 of file vf_v360.c.

Referenced by config_output().

◆ prepare_cylindricalea_in()

static int prepare_cylindricalea_in ( AVFilterContext ctx)
static

Prepare data for processing cylindrical equal area input format.

Parameters
ctxfilter context
Returns
error code

Definition at line 3179 of file vf_v360.c.

Referenced by config_output().

◆ cylindricalea_to_xyz()

static int cylindricalea_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in cylindrical equal area format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 3199 of file vf_v360.c.

Referenced by config_output().

◆ xyz_to_cylindricalea()

static int xyz_to_cylindricalea ( const V360Context s,
const float vec,
int  width,
int  height,
int16_t  us[4][4],
int16_t  vs[4][4],
float du,
float dv 
)
static

Calculate frame position in cylindrical equal area format for corresponding 3D coordinates on sphere.

Parameters
sfilter private context
veccoordinates on sphere
widthframe width
heightframe height
ushorizontal coordinates for interpolation window
vsvertical coordinates for interpolation window
duhorizontal relative coordinate
dvvertical relative coordinate

Definition at line 3233 of file vf_v360.c.

Referenced by config_output().

◆ perspective_to_xyz()

static int perspective_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in perspective format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 3273 of file vf_v360.c.

Referenced by config_output().

◆ tetrahedron_to_xyz()

static int tetrahedron_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in tetrahedron format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 3319 of file vf_v360.c.

Referenced by config_output().

◆ xyz_to_tetrahedron()

static int xyz_to_tetrahedron ( const V360Context s,
const float vec,
int  width,
int  height,
int16_t  us[4][4],
int16_t  vs[4][4],
float du,
float dv 
)
static

Calculate frame position in tetrahedron format for corresponding 3D coordinates on sphere.

Parameters
sfilter private context
veccoordinates on sphere
widthframe width
heightframe height
ushorizontal coordinates for interpolation window
vsvertical coordinates for interpolation window
duhorizontal relative coordinate
dvvertical relative coordinate

Definition at line 3345 of file vf_v360.c.

Referenced by config_output().

◆ prepare_dfisheye_in()

static int prepare_dfisheye_in ( AVFilterContext ctx)
static

Prepare data for processing double fisheye input format.

Parameters
ctxfilter context
Returns
error code

Definition at line 3397 of file vf_v360.c.

Referenced by config_output().

◆ dfisheye_to_xyz()

static int dfisheye_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in dual fisheye format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 3417 of file vf_v360.c.

Referenced by config_output().

◆ xyz_to_dfisheye()

static int xyz_to_dfisheye ( const V360Context s,
const float vec,
int  width,
int  height,
int16_t  us[4][4],
int16_t  vs[4][4],
float du,
float dv 
)
static

Calculate frame position in dual fisheye format for corresponding 3D coordinates on sphere.

Parameters
sfilter private context
veccoordinates on sphere
widthframe width
heightframe height
ushorizontal coordinates for interpolation window
vsvertical coordinates for interpolation window
duhorizontal relative coordinate
dvvertical relative coordinate

Definition at line 3456 of file vf_v360.c.

Referenced by config_output().

◆ barrel_to_xyz()

static int barrel_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in barrel facebook's format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 3506 of file vf_v360.c.

Referenced by config_output().

◆ xyz_to_barrel()

static int xyz_to_barrel ( const V360Context s,
const float vec,
int  width,
int  height,
int16_t  us[4][4],
int16_t  vs[4][4],
float du,
float dv 
)
static

Calculate frame position in barrel facebook's format for corresponding 3D coordinates on sphere.

Parameters
sfilter private context
veccoordinates on sphere
widthframe width
heightframe height
ushorizontal coordinates for interpolation window
vsvertical coordinates for interpolation window
duhorizontal relative coordinate
dvvertical relative coordinate

Definition at line 3578 of file vf_v360.c.

Referenced by config_output().

◆ xyz_to_barrelsplit()

static int xyz_to_barrelsplit ( const V360Context s,
const float vec,
int  width,
int  height,
int16_t  us[4][4],
int16_t  vs[4][4],
float du,
float dv 
)
static

Calculate frame position in barrel split facebook's format for corresponding 3D coordinates on sphere.

Parameters
sfilter private context
veccoordinates on sphere
widthframe width
heightframe height
ushorizontal coordinates for interpolation window
vsvertical coordinates for interpolation window
duhorizontal relative coordinate
dvvertical relative coordinate

Definition at line 3650 of file vf_v360.c.

Referenced by config_output().

◆ barrelsplit_to_xyz()

static int barrelsplit_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in barrel split facebook's format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 3746 of file vf_v360.c.

Referenced by config_output().

◆ tspyramid_to_xyz()

static int tspyramid_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in tspyramid format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 3821 of file vf_v360.c.

Referenced by config_output().

◆ xyz_to_tspyramid()

static int xyz_to_tspyramid ( const V360Context s,
const float vec,
int  width,
int  height,
int16_t  us[4][4],
int16_t  vs[4][4],
float du,
float dv 
)
static

Calculate frame position in tspyramid format for corresponding 3D coordinates on sphere.

Parameters
sfilter private context
veccoordinates on sphere
widthframe width
heightframe height
ushorizontal coordinates for interpolation window
vsvertical coordinates for interpolation window
duhorizontal relative coordinate
dvvertical relative coordinate

Definition at line 3879 of file vf_v360.c.

Referenced by config_output().

◆ octahedron_to_xyz()

static int octahedron_to_xyz ( const V360Context s,
int  i,
int  j,
int  width,
int  height,
float vec 
)
static

Calculate 3D coordinates on sphere for corresponding frame position in octahedron format.

Parameters
sfilter private context
ihorizontal position on frame [0, width)
jvertical position on frame [0, height)
widthframe width
heightframe height
veccoordinates on sphere

Definition at line 3947 of file vf_v360.c.

Referenced by config_output().

◆ xyz_to_octahedron()

static int xyz_to_octahedron ( const V360Context s,
const float vec,
int  width,
int  height,
int16_t  us[4][4],
int16_t  vs[4][4],
float du,
float dv 
)
static

Calculate frame position in octahedron format for corresponding 3D coordinates on sphere.

Parameters
sfilter private context
veccoordinates on sphere
widthframe width
heightframe height
ushorizontal coordinates for interpolation window
vsvertical coordinates for interpolation window
duhorizontal relative coordinate
dvvertical relative coordinate

Definition at line 3980 of file vf_v360.c.

Referenced by config_output().

◆ multiply_quaternion()

static void multiply_quaternion ( float  c[4],
const float  a[4],
const float  b[4] 
)
static

Definition at line 4017 of file vf_v360.c.

Referenced by calculate_rotation(), and rotate().

◆ conjugate_quaternion()

static void conjugate_quaternion ( float  d[4],
const float  q[4] 
)
static

Definition at line 4025 of file vf_v360.c.

Referenced by calculate_rotation().

◆ calculate_rotation()

static void calculate_rotation ( float  yaw,
float  pitch,
float  roll,
float  rot_quaternion[2][4],
const int  rotation_order[3] 
)
inlinestatic

Calculate rotation quaternion for yaw/pitch/roll angles.

Definition at line 4036 of file vf_v360.c.

Referenced by config_output().

◆ rotate()

static void rotate ( const float  rot_quaternion[2][4],
float vec 
)
inlinestatic

Rotate vector with given rotation quaternion.

Parameters
rot_quaternionrotation quaternion
vecvector

Definition at line 4071 of file vf_v360.c.

Referenced by hq3x_interp_2x1(), and v360_slice().

◆ set_mirror_modifier()

static void set_mirror_modifier ( int  h_flip,
int  v_flip,
int  d_flip,
float modifier 
)
inlinestatic

Definition at line 4089 of file vf_v360.c.

Referenced by config_output().

◆ mirror()

static void mirror ( const float modifier,
float vec 
)
inlinestatic

◆ input_flip()

static void input_flip ( int16_t  u[4][4],
int16_t  v[4][4],
int  w,
int  h,
int  hflip,
int  vflip 
)
inlinestatic

Definition at line 4104 of file vf_v360.c.

Referenced by v360_slice().

◆ allocate_plane()

static int allocate_plane ( V360Context s,
int  sizeof_uv,
int  sizeof_ker,
int  sizeof_mask,
int  p 
)
static

Definition at line 4121 of file vf_v360.c.

Referenced by config_output().

◆ fov_from_dfov()

static void fov_from_dfov ( int  format,
float  d_fov,
float  w,
float  h,
float h_fov,
float v_fov 
)
static

Definition at line 4155 of file vf_v360.c.

Referenced by config_output().

◆ set_dimensions()

static void set_dimensions ( int *  outw,
int *  outh,
int  w,
int  h,
const AVPixFmtDescriptor desc 
)
static

Definition at line 4228 of file vf_v360.c.

Referenced by config_output().

◆ v360_slice()

static int v360_slice ( AVFilterContext ctx,
void *  arg,
int  jobnr,
int  nb_jobs 
)
static

Definition at line 4237 of file vf_v360.c.

Referenced by config_output().

◆ config_output()

static int config_output ( AVFilterLink outlink)
static

Definition at line 4298 of file vf_v360.c.

Referenced by process_command().

◆ filter_frame()

static int filter_frame ( AVFilterLink inlink,
AVFrame in 
)
static

Definition at line 4903 of file vf_v360.c.

◆ reset_rot()

static void reset_rot ( V360Context s)
static

Definition at line 4927 of file vf_v360.c.

Referenced by init(), and process_command().

◆ process_command()

static int process_command ( AVFilterContext ctx,
const char *  cmd,
const char *  args,
char *  res,
int  res_len,
int  flags 
)
static

Definition at line 4933 of file vf_v360.c.

◆ init()

static av_cold int init ( AVFilterContext ctx)
static

Definition at line 4954 of file vf_v360.c.

◆ uninit()

static av_cold void uninit ( AVFilterContext ctx)
static

Definition at line 4963 of file vf_v360.c.

Variable Documentation

◆ v360_options

const AVOption v360_options[]
static

Definition at line 57 of file vf_v360.c.

◆ inputs

const AVFilterPad inputs[]
static
Initial value:
= {
{
.name = "default",
.filter_frame = filter_frame,
},
}

Definition at line 4982 of file vf_v360.c.

◆ outputs

const AVFilterPad outputs[]
static
Initial value:
= {
{
.name = "default",
.config_props = config_output,
},
}

Definition at line 4990 of file vf_v360.c.

◆ ff_vf_v360

const AVFilter ff_vf_v360
Initial value:
= {
.name = "v360",
.description = NULL_IF_CONFIG_SMALL("Convert 360 projection of video."),
.priv_size = sizeof(V360Context),
.init = init,
.priv_class = &v360_class,
.process_command = process_command,
}

Definition at line 4998 of file vf_v360.c.

u
#define u(width, name, range_min, range_max)
Definition: cbs_h2645.c:251
outputs
static const AVFilterPad outputs[]
Definition: vf_v360.c:4990
FILTER_INPUTS
#define FILTER_INPUTS(array)
Definition: filters.h:262
tmp
static uint8_t tmp[11]
Definition: aes_ctr.c:28
filter_frame
static int filter_frame(AVFilterLink *inlink, AVFrame *in)
Definition: vf_v360.c:4903
init
static av_cold int init(AVFilterContext *ctx)
Definition: vf_v360.c:4954
inputs
static const AVFilterPad inputs[]
Definition: vf_v360.c:4982
s
#define s(width, name)
Definition: cbs_vp9.c:198
bits
uint8_t bits
Definition: vp3data.h:128
query_formats
static int query_formats(const AVFilterContext *ctx, AVFilterFormatsConfig **cfg_in, AVFilterFormatsConfig **cfg_out)
Definition: vf_v360.c:175
FILTER_OUTPUTS
#define FILTER_OUTPUTS(array)
Definition: filters.h:263
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:94
dst
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Definition: dsp.h:83
for
for(k=2;k<=8;++k)
Definition: h264pred_template.c:425
uninit
static av_cold void uninit(AVFilterContext *ctx)
Definition: vf_v360.c:4963
remap
static const int remap[16]
Definition: msvideo1enc.c:66
V360Context
Definition: v360.h:120
process_command
static int process_command(AVFilterContext *ctx, const char *cmd, const char *args, char *res, int res_len, int flags)
Definition: vf_v360.c:4933
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
config_output
static int config_output(AVFilterLink *outlink)
Definition: vf_v360.c:4298
FILTER_QUERY_FUNC2
#define FILTER_QUERY_FUNC2(func)
Definition: filters.h:239
AVFILTER_FLAG_SLICE_THREADS
#define AVFILTER_FLAG_SLICE_THREADS
The filter supports multithreading by splitting frames into multiple parts and processing them concur...
Definition: avfilter.h:152
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
_
#define _
width
#define width
Definition: dsp.h:85
src
#define src
Definition: vp8dsp.c:248