|  | @@ -105,8 +105,10 @@ static const AVOption v360_options[] = { | 
														
													
														
															
																|  |  | {"out_forder", "output cubemap face order", OFFSET(out_forder), AV_OPT_TYPE_STRING, {.str="rludfb"},        0,     NB_DIRECTIONS-1, FLAGS, "out_forder"}, |  |  | {"out_forder", "output cubemap face order", OFFSET(out_forder), AV_OPT_TYPE_STRING, {.str="rludfb"},        0,     NB_DIRECTIONS-1, FLAGS, "out_forder"}, | 
														
													
														
															
																|  |  | {   "in_frot", "input cubemap face rotation",  OFFSET(in_frot), AV_OPT_TYPE_STRING, {.str="000000"},        0,     NB_DIRECTIONS-1, FLAGS, "in_frot"}, |  |  | {   "in_frot", "input cubemap face rotation",  OFFSET(in_frot), AV_OPT_TYPE_STRING, {.str="000000"},        0,     NB_DIRECTIONS-1, FLAGS, "in_frot"}, | 
														
													
														
															
																|  |  | {  "out_frot", "output cubemap face rotation",OFFSET(out_frot), AV_OPT_TYPE_STRING, {.str="000000"},        0,     NB_DIRECTIONS-1, FLAGS, "out_frot"}, |  |  | {  "out_frot", "output cubemap face rotation",OFFSET(out_frot), AV_OPT_TYPE_STRING, {.str="000000"},        0,     NB_DIRECTIONS-1, FLAGS, "out_frot"}, | 
														
													
														
															
																|  |  | {    "in_pad", "input cubemap pads",            OFFSET(in_pad), AV_OPT_TYPE_FLOAT,  {.dbl=0.f},           0.f,                 1.f, FLAGS, "in_pad"}, |  |  |  | 
														
													
														
															
																|  |  | {   "out_pad", "output cubemap pads",          OFFSET(out_pad), AV_OPT_TYPE_FLOAT,  {.dbl=0.f},           0.f,                 1.f, FLAGS, "out_pad"}, |  |  |  | 
														
													
														
															
																|  |  |  |  |  | {    "in_pad", "percent input cubemap pads",    OFFSET(in_pad), AV_OPT_TYPE_FLOAT,  {.dbl=0.f},           0.f,                 1.f, FLAGS, "in_pad"}, | 
														
													
														
															
																|  |  |  |  |  | {   "out_pad", "percent output cubemap pads",  OFFSET(out_pad), AV_OPT_TYPE_FLOAT,  {.dbl=0.f},           0.f,                 1.f, FLAGS, "out_pad"}, | 
														
													
														
															
																|  |  |  |  |  | {   "fin_pad", "fixed input cubemap pads",     OFFSET(fin_pad), AV_OPT_TYPE_INT,    {.i64=0},               0,                 100, FLAGS, "fin_pad"}, | 
														
													
														
															
																|  |  |  |  |  | {  "fout_pad", "fixed output cubemap pads",   OFFSET(fout_pad), AV_OPT_TYPE_INT,    {.i64=0},               0,                 100, FLAGS, "fout_pad"}, | 
														
													
														
															
																|  |  | {       "yaw", "yaw rotation",                     OFFSET(yaw), AV_OPT_TYPE_FLOAT,  {.dbl=0.f},        -180.f,               180.f, FLAGS, "yaw"}, |  |  | {       "yaw", "yaw rotation",                     OFFSET(yaw), AV_OPT_TYPE_FLOAT,  {.dbl=0.f},        -180.f,               180.f, FLAGS, "yaw"}, | 
														
													
														
															
																|  |  | {     "pitch", "pitch rotation",                 OFFSET(pitch), AV_OPT_TYPE_FLOAT,  {.dbl=0.f},        -180.f,               180.f, FLAGS, "pitch"}, |  |  | {     "pitch", "pitch rotation",                 OFFSET(pitch), AV_OPT_TYPE_FLOAT,  {.dbl=0.f},        -180.f,               180.f, FLAGS, "pitch"}, | 
														
													
														
															
																|  |  | {      "roll", "roll rotation",                   OFFSET(roll), AV_OPT_TYPE_FLOAT,  {.dbl=0.f},        -180.f,               180.f, FLAGS, "roll"}, |  |  | {      "roll", "roll rotation",                   OFFSET(roll), AV_OPT_TYPE_FLOAT,  {.dbl=0.f},        -180.f,               180.f, FLAGS, "roll"}, | 
														
													
												
													
														
															
																|  | @@ -724,16 +726,18 @@ static void normalize_vector(float *vec) | 
														
													
														
															
																|  |  | * @param vf vertical cubemap coordinate [0, 1) |  |  | * @param vf vertical cubemap coordinate [0, 1) | 
														
													
														
															
																|  |  | * @param face face of cubemap |  |  | * @param face face of cubemap | 
														
													
														
															
																|  |  | * @param vec coordinates on sphere |  |  | * @param vec coordinates on sphere | 
														
													
														
															
																|  |  |  |  |  | * @param scalew scale for uf | 
														
													
														
															
																|  |  |  |  |  | * @param scaleh scale for vf | 
														
													
														
															
																|  |  | */ |  |  | */ | 
														
													
														
															
																|  |  | static void cube_to_xyz(const V360Context *s, |  |  | static void cube_to_xyz(const V360Context *s, | 
														
													
														
															
																|  |  | float uf, float vf, int face, |  |  | float uf, float vf, int face, | 
														
													
														
															
																|  |  | float *vec) |  |  |  | 
														
													
														
															
																|  |  |  |  |  | float *vec, float scalew, float scaleh) | 
														
													
														
															
																|  |  | { |  |  | { | 
														
													
														
															
																|  |  | const int direction = s->out_cubemap_direction_order[face]; |  |  | const int direction = s->out_cubemap_direction_order[face]; | 
														
													
														
															
																|  |  | float l_x, l_y, l_z; |  |  | float l_x, l_y, l_z; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | uf /= (1.f - s->out_pad); |  |  |  | 
														
													
														
															
																|  |  | vf /= (1.f - s->out_pad); |  |  |  | 
														
													
														
															
																|  |  |  |  |  | uf /= scalew; | 
														
													
														
															
																|  |  |  |  |  | vf /= scaleh; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | rotate_cube_face_inverse(&uf, &vf, s->out_cubemap_face_rotation[face]); |  |  | rotate_cube_face_inverse(&uf, &vf, s->out_cubemap_face_rotation[face]); | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
												
													
														
															
																|  | @@ -1063,6 +1067,9 @@ static void cube3x2_to_xyz(const V360Context *s, | 
														
													
														
															
																|  |  | int i, int j, int width, int height, |  |  | int i, int j, int width, int height, | 
														
													
														
															
																|  |  | float *vec) |  |  | float *vec) | 
														
													
														
															
																|  |  | { |  |  | { | 
														
													
														
															
																|  |  |  |  |  | const float scalew = s->fout_pad > 0 ? 1.f - s->fout_pad / (s->out_width  / 3.f) : 1.f - s->out_pad; | 
														
													
														
															
																|  |  |  |  |  | const float scaleh = s->fout_pad > 0 ? 1.f - s->fout_pad / (s->out_height / 2.f) : 1.f - s->out_pad; | 
														
													
														
															
																|  |  |  |  |  | 
 | 
														
													
														
															
																|  |  | const float ew = width  / 3.f; |  |  | const float ew = width  / 3.f; | 
														
													
														
															
																|  |  | const float eh = height / 2.f; |  |  | const float eh = height / 2.f; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
												
													
														
															
																|  | @@ -1078,7 +1085,7 @@ static void cube3x2_to_xyz(const V360Context *s, | 
														
													
														
															
																|  |  | const float uf = 2.f * (i - u_shift + 0.5f) / ewi - 1.f; |  |  | const float uf = 2.f * (i - u_shift + 0.5f) / ewi - 1.f; | 
														
													
														
															
																|  |  | const float vf = 2.f * (j - v_shift + 0.5f) / ehi - 1.f; |  |  | const float vf = 2.f * (j - v_shift + 0.5f) / ehi - 1.f; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | cube_to_xyz(s, uf, vf, face, vec); |  |  |  | 
														
													
														
															
																|  |  |  |  |  | cube_to_xyz(s, uf, vf, face, vec, scalew, scaleh); | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | /** |  |  | /** | 
														
													
												
													
														
															
																|  | @@ -1097,6 +1104,8 @@ static void xyz_to_cube3x2(const V360Context *s, | 
														
													
														
															
																|  |  | const float *vec, int width, int height, |  |  | const float *vec, int width, int height, | 
														
													
														
															
																|  |  | uint16_t us[4][4], uint16_t vs[4][4], float *du, float *dv) |  |  | uint16_t us[4][4], uint16_t vs[4][4], float *du, float *dv) | 
														
													
														
															
																|  |  | { |  |  | { | 
														
													
														
															
																|  |  |  |  |  | const float scalew = s->fin_pad > 0 ? 1.f - s->fin_pad / (s->in_width  / 3.f) : 1.f - s->in_pad; | 
														
													
														
															
																|  |  |  |  |  | const float scaleh = s->fin_pad > 0 ? 1.f - s->fin_pad / (s->in_height / 2.f) : 1.f - s->in_pad; | 
														
													
														
															
																|  |  | const float ew = width  / 3.f; |  |  | const float ew = width  / 3.f; | 
														
													
														
															
																|  |  | const float eh = height / 2.f; |  |  | const float eh = height / 2.f; | 
														
													
														
															
																|  |  | float uf, vf; |  |  | float uf, vf; | 
														
													
												
													
														
															
																|  | @@ -1107,8 +1116,8 @@ static void xyz_to_cube3x2(const V360Context *s, | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | xyz_to_cube(s, vec, &uf, &vf, &direction); |  |  | xyz_to_cube(s, vec, &uf, &vf, &direction); | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | uf *= (1.f - s->in_pad); |  |  |  | 
														
													
														
															
																|  |  | vf *= (1.f - s->in_pad); |  |  |  | 
														
													
														
															
																|  |  |  |  |  | uf *= scalew; | 
														
													
														
															
																|  |  |  |  |  | vf *= scaleh; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | face = s->in_cubemap_face_order[direction]; |  |  | face = s->in_cubemap_face_order[direction]; | 
														
													
														
															
																|  |  | u_face = face % 3; |  |  | u_face = face % 3; | 
														
													
												
													
														
															
																|  | @@ -1143,13 +1152,13 @@ static void xyz_to_cube3x2(const V360Context *s, | 
														
													
														
															
																|  |  | uf = 2.f * new_ui / ewi - 1.f; |  |  | uf = 2.f * new_ui / ewi - 1.f; | 
														
													
														
															
																|  |  | vf = 2.f * new_vi / ehi - 1.f; |  |  | vf = 2.f * new_vi / ehi - 1.f; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | uf /= (1.f - s->in_pad); |  |  |  | 
														
													
														
															
																|  |  | vf /= (1.f - s->in_pad); |  |  |  | 
														
													
														
															
																|  |  |  |  |  | uf /= scalew; | 
														
													
														
															
																|  |  |  |  |  | vf /= scaleh; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | process_cube_coordinates(s, uf, vf, direction, &uf, &vf, &face); |  |  | process_cube_coordinates(s, uf, vf, direction, &uf, &vf, &face); | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | uf *= (1.f - s->in_pad); |  |  |  | 
														
													
														
															
																|  |  | vf *= (1.f - s->in_pad); |  |  |  | 
														
													
														
															
																|  |  |  |  |  | uf *= scalew; | 
														
													
														
															
																|  |  |  |  |  | vf *= scaleh; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | u_face = face % 3; |  |  | u_face = face % 3; | 
														
													
														
															
																|  |  | v_face = face / 3; |  |  | v_face = face / 3; | 
														
													
												
													
														
															
																|  | @@ -1182,6 +1191,9 @@ static void cube1x6_to_xyz(const V360Context *s, | 
														
													
														
															
																|  |  | int i, int j, int width, int height, |  |  | int i, int j, int width, int height, | 
														
													
														
															
																|  |  | float *vec) |  |  | float *vec) | 
														
													
														
															
																|  |  | { |  |  | { | 
														
													
														
															
																|  |  |  |  |  | const float scalew = s->fout_pad > 0 ? 1.f - (float)(s->fout_pad) / s->out_width : 1.f - s->out_pad; | 
														
													
														
															
																|  |  |  |  |  | const float scaleh = s->fout_pad > 0 ? 1.f - s->fout_pad / (s->out_height / 6.f) : 1.f - s->out_pad; | 
														
													
														
															
																|  |  |  |  |  | 
 | 
														
													
														
															
																|  |  | const float ew = width; |  |  | const float ew = width; | 
														
													
														
															
																|  |  | const float eh = height / 6.f; |  |  | const float eh = height / 6.f; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
												
													
														
															
																|  | @@ -1193,7 +1205,7 @@ static void cube1x6_to_xyz(const V360Context *s, | 
														
													
														
															
																|  |  | const float uf = 2.f * (i           + 0.5f) / ew  - 1.f; |  |  | const float uf = 2.f * (i           + 0.5f) / ew  - 1.f; | 
														
													
														
															
																|  |  | const float vf = 2.f * (j - v_shift + 0.5f) / ehi - 1.f; |  |  | const float vf = 2.f * (j - v_shift + 0.5f) / ehi - 1.f; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | cube_to_xyz(s, uf, vf, face, vec); |  |  |  | 
														
													
														
															
																|  |  |  |  |  | cube_to_xyz(s, uf, vf, face, vec, scalew, scaleh); | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | /** |  |  | /** | 
														
													
												
													
														
															
																|  | @@ -1210,6 +1222,9 @@ static void cube6x1_to_xyz(const V360Context *s, | 
														
													
														
															
																|  |  | int i, int j, int width, int height, |  |  | int i, int j, int width, int height, | 
														
													
														
															
																|  |  | float *vec) |  |  | float *vec) | 
														
													
														
															
																|  |  | { |  |  | { | 
														
													
														
															
																|  |  |  |  |  | const float scalew = s->fout_pad > 0 ? 1.f - s->fout_pad / (s->out_width / 6.f)   : 1.f - s->out_pad; | 
														
													
														
															
																|  |  |  |  |  | const float scaleh = s->fout_pad > 0 ? 1.f - (float)(s->fout_pad) / s->out_height : 1.f - s->out_pad; | 
														
													
														
															
																|  |  |  |  |  | 
 | 
														
													
														
															
																|  |  | const float ew = width / 6.f; |  |  | const float ew = width / 6.f; | 
														
													
														
															
																|  |  | const float eh = height; |  |  | const float eh = height; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
												
													
														
															
																|  | @@ -1221,7 +1236,7 @@ static void cube6x1_to_xyz(const V360Context *s, | 
														
													
														
															
																|  |  | const float uf = 2.f * (i - u_shift + 0.5f) / ewi - 1.f; |  |  | const float uf = 2.f * (i - u_shift + 0.5f) / ewi - 1.f; | 
														
													
														
															
																|  |  | const float vf = 2.f * (j           + 0.5f) / eh  - 1.f; |  |  | const float vf = 2.f * (j           + 0.5f) / eh  - 1.f; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | cube_to_xyz(s, uf, vf, face, vec); |  |  |  | 
														
													
														
															
																|  |  |  |  |  | cube_to_xyz(s, uf, vf, face, vec, scalew, scaleh); | 
														
													
														
															
																|  |  | } |  |  | } | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | /** |  |  | /** | 
														
													
												
													
														
															
																|  | @@ -1240,6 +1255,8 @@ static void xyz_to_cube1x6(const V360Context *s, | 
														
													
														
															
																|  |  | const float *vec, int width, int height, |  |  | const float *vec, int width, int height, | 
														
													
														
															
																|  |  | uint16_t us[4][4], uint16_t vs[4][4], float *du, float *dv) |  |  | uint16_t us[4][4], uint16_t vs[4][4], float *du, float *dv) | 
														
													
														
															
																|  |  | { |  |  | { | 
														
													
														
															
																|  |  |  |  |  | const float scalew = s->fin_pad > 0 ? 1.f - (float)(s->fin_pad) / s->in_width : 1.f - s->in_pad; | 
														
													
														
															
																|  |  |  |  |  | const float scaleh = s->fin_pad > 0 ? 1.f - s->fin_pad / (s->in_height / 6.f) : 1.f - s->in_pad; | 
														
													
														
															
																|  |  | const float eh = height / 6.f; |  |  | const float eh = height / 6.f; | 
														
													
														
															
																|  |  | const int ewi = width; |  |  | const int ewi = width; | 
														
													
														
															
																|  |  | float uf, vf; |  |  | float uf, vf; | 
														
													
												
													
														
															
																|  | @@ -1249,8 +1266,8 @@ static void xyz_to_cube1x6(const V360Context *s, | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | xyz_to_cube(s, vec, &uf, &vf, &direction); |  |  | xyz_to_cube(s, vec, &uf, &vf, &direction); | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | uf *= (1.f - s->in_pad); |  |  |  | 
														
													
														
															
																|  |  | vf *= (1.f - s->in_pad); |  |  |  | 
														
													
														
															
																|  |  |  |  |  | uf *= scalew; | 
														
													
														
															
																|  |  |  |  |  | vf *= scaleh; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | face = s->in_cubemap_face_order[direction]; |  |  | face = s->in_cubemap_face_order[direction]; | 
														
													
														
															
																|  |  | ehi = ceilf(eh * (face + 1)) - ceilf(eh * face); |  |  | ehi = ceilf(eh * (face + 1)) - ceilf(eh * face); | 
														
													
												
													
														
															
																|  | @@ -1279,13 +1296,13 @@ static void xyz_to_cube1x6(const V360Context *s, | 
														
													
														
															
																|  |  | uf = 2.f * new_ui / ewi - 1.f; |  |  | uf = 2.f * new_ui / ewi - 1.f; | 
														
													
														
															
																|  |  | vf = 2.f * new_vi / ehi - 1.f; |  |  | vf = 2.f * new_vi / ehi - 1.f; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | uf /= (1.f - s->in_pad); |  |  |  | 
														
													
														
															
																|  |  | vf /= (1.f - s->in_pad); |  |  |  | 
														
													
														
															
																|  |  |  |  |  | uf /= scalew; | 
														
													
														
															
																|  |  |  |  |  | vf /= scaleh; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | process_cube_coordinates(s, uf, vf, direction, &uf, &vf, &face); |  |  | process_cube_coordinates(s, uf, vf, direction, &uf, &vf, &face); | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | uf *= (1.f - s->in_pad); |  |  |  | 
														
													
														
															
																|  |  | vf *= (1.f - s->in_pad); |  |  |  | 
														
													
														
															
																|  |  |  |  |  | uf *= scalew; | 
														
													
														
															
																|  |  |  |  |  | vf *= scaleh; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | v_shift = ceilf(eh * face); |  |  | v_shift = ceilf(eh * face); | 
														
													
														
															
																|  |  | new_ehi = ceilf(eh * (face + 1)) - v_shift; |  |  | new_ehi = ceilf(eh * (face + 1)) - v_shift; | 
														
													
												
													
														
															
																|  | @@ -1316,6 +1333,8 @@ static void xyz_to_cube6x1(const V360Context *s, | 
														
													
														
															
																|  |  | const float *vec, int width, int height, |  |  | const float *vec, int width, int height, | 
														
													
														
															
																|  |  | uint16_t us[4][4], uint16_t vs[4][4], float *du, float *dv) |  |  | uint16_t us[4][4], uint16_t vs[4][4], float *du, float *dv) | 
														
													
														
															
																|  |  | { |  |  | { | 
														
													
														
															
																|  |  |  |  |  | const float scalew = s->fin_pad > 0 ? 1.f - s->fin_pad / (s->in_width / 6.f)   : 1.f - s->in_pad; | 
														
													
														
															
																|  |  |  |  |  | const float scaleh = s->fin_pad > 0 ? 1.f - (float)(s->fin_pad) / s->in_height : 1.f - s->in_pad; | 
														
													
														
															
																|  |  | const float ew = width / 6.f; |  |  | const float ew = width / 6.f; | 
														
													
														
															
																|  |  | const int ehi = height; |  |  | const int ehi = height; | 
														
													
														
															
																|  |  | float uf, vf; |  |  | float uf, vf; | 
														
													
												
													
														
															
																|  | @@ -1325,8 +1344,8 @@ static void xyz_to_cube6x1(const V360Context *s, | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | xyz_to_cube(s, vec, &uf, &vf, &direction); |  |  | xyz_to_cube(s, vec, &uf, &vf, &direction); | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | uf *= (1.f - s->in_pad); |  |  |  | 
														
													
														
															
																|  |  | vf *= (1.f - s->in_pad); |  |  |  | 
														
													
														
															
																|  |  |  |  |  | uf *= scalew; | 
														
													
														
															
																|  |  |  |  |  | vf *= scaleh; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | face = s->in_cubemap_face_order[direction]; |  |  | face = s->in_cubemap_face_order[direction]; | 
														
													
														
															
																|  |  | ewi = ceilf(ew * (face + 1)) - ceilf(ew * face); |  |  | ewi = ceilf(ew * (face + 1)) - ceilf(ew * face); | 
														
													
												
													
														
															
																|  | @@ -1355,13 +1374,13 @@ static void xyz_to_cube6x1(const V360Context *s, | 
														
													
														
															
																|  |  | uf = 2.f * new_ui / ewi - 1.f; |  |  | uf = 2.f * new_ui / ewi - 1.f; | 
														
													
														
															
																|  |  | vf = 2.f * new_vi / ehi - 1.f; |  |  | vf = 2.f * new_vi / ehi - 1.f; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | uf /= (1.f - s->in_pad); |  |  |  | 
														
													
														
															
																|  |  | vf /= (1.f - s->in_pad); |  |  |  | 
														
													
														
															
																|  |  |  |  |  | uf /= scalew; | 
														
													
														
															
																|  |  |  |  |  | vf /= scaleh; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | process_cube_coordinates(s, uf, vf, direction, &uf, &vf, &face); |  |  | process_cube_coordinates(s, uf, vf, direction, &uf, &vf, &face); | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | uf *= (1.f - s->in_pad); |  |  |  | 
														
													
														
															
																|  |  | vf *= (1.f - s->in_pad); |  |  |  | 
														
													
														
															
																|  |  |  |  |  | uf *= scalew; | 
														
													
														
															
																|  |  |  |  |  | vf *= scaleh; | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | u_shift = ceilf(ew * face); |  |  | u_shift = ceilf(ew * face); | 
														
													
														
															
																|  |  | new_ewi = ceilf(ew * (face + 1)) - u_shift; |  |  | new_ewi = ceilf(ew * (face + 1)) - u_shift; | 
														
													
												
													
														
															
																|  | @@ -2516,6 +2535,12 @@ static int config_output(AVFilterLink *outlink) | 
														
													
														
															
																|  |  | set_dimensions(s->inplanewidth, s->inplaneheight, w, h, desc); |  |  | set_dimensions(s->inplanewidth, s->inplaneheight, w, h, desc); | 
														
													
														
															
																|  |  | set_dimensions(s->in_offset_w, s->in_offset_h, in_offset_w, in_offset_h, desc); |  |  | set_dimensions(s->in_offset_w, s->in_offset_h, in_offset_w, in_offset_h, desc); | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  |  |  |  | s->in_width = s->inplanewidth[0]; | 
														
													
														
															
																|  |  |  |  |  | s->in_height = s->inplaneheight[0]; | 
														
													
														
															
																|  |  |  |  |  | 
 | 
														
													
														
															
																|  |  |  |  |  | if (s->in_transpose) | 
														
													
														
															
																|  |  |  |  |  | FFSWAP(int, s->in_width, s->in_height); | 
														
													
														
															
																|  |  |  |  |  | 
 | 
														
													
														
															
																|  |  | switch (s->in) { |  |  | switch (s->in) { | 
														
													
														
															
																|  |  | case EQUIRECTANGULAR: |  |  | case EQUIRECTANGULAR: | 
														
													
														
															
																|  |  | s->in_transform = xyz_to_equirect; |  |  | s->in_transform = xyz_to_equirect; | 
														
													
												
													
														
															
																|  | @@ -2699,6 +2724,12 @@ static int config_output(AVFilterLink *outlink) | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  | set_dimensions(s->pr_width, s->pr_height, w, h, desc); |  |  | set_dimensions(s->pr_width, s->pr_height, w, h, desc); | 
														
													
														
															
																|  |  | 
 |  |  | 
 | 
														
													
														
															
																|  |  |  |  |  | s->out_width = s->pr_width[0]; | 
														
													
														
															
																|  |  |  |  |  | s->out_height = s->pr_height[0]; | 
														
													
														
															
																|  |  |  |  |  | 
 | 
														
													
														
															
																|  |  |  |  |  | if (s->out_transpose) | 
														
													
														
															
																|  |  |  |  |  | FFSWAP(int, s->out_width, s->out_height); | 
														
													
														
															
																|  |  |  |  |  | 
 | 
														
													
														
															
																|  |  | switch (s->out_stereo) { |  |  | switch (s->out_stereo) { | 
														
													
														
															
																|  |  | case STEREO_2D: |  |  | case STEREO_2D: | 
														
													
														
															
																|  |  | out_offset_w = out_offset_h = 0; |  |  | out_offset_w = out_offset_h = 0; | 
														
													
												
													
														
															
																|  | 
 |