On 14.08.2019 13:06, Paul B Mahol wrote:
On Wed, Aug 14, 2019 at 11:56 AM Thilo Borgmann <thilo.borgm...@mail.de>
wrote:
[...]
+static int config_output(AVFilterLink *outlink)
+{
+ AVFilterContext *ctx = outlink->src;
+ AVFilterLink *inlink = ctx->inputs[0];
+ V360Context *s = ctx->priv;
+ const AVPixFmtDescriptor *desc =
av_pix_fmt_desc_get(inlink->format);
+ const int depth = desc->comp[0].depth;
+ float remap_data_size = 0.f;
+ int sizeof_remap;
+ int err;
+ int p, h, w;
+ float hf, wf;
+ float mirror_modifier[3];
+ void (*in_transform)(const V360Context *s,
+ const float *vec, int width, int height,
+ uint16_t us[4][4], uint16_t vs[4][4], float
*du, float *dv);
+ void (*out_transform)(const V360Context *s,
+ int i, int j, int width, int height,
+ float *vec);
+ void (*calculate_kernel)(float du, float dv, int shift, const
XYRemap4
*r_tmp, void *r);
+ float rot_mat[3][3];
+
+ switch (s->interp) {
+ case NEAREST:
+ calculate_kernel = nearest_kernel;
+ s->remap_slice = depth <= 8 ? remap1_8bit_slice :
remap1_16bit_slice;
+ sizeof_remap = sizeof(XYRemap1);
+ break;
+ case BILINEAR:
+ calculate_kernel = bilinear_kernel;
+ s->remap_slice = depth <= 8 ? remap2_8bit_slice :
remap2_16bit_slice;
+ sizeof_remap = sizeof(XYRemap2);
+ break;
+ case BICUBIC:
+ calculate_kernel = bicubic_kernel;
+ s->remap_slice = depth <= 8 ? remap4_8bit_slice :
remap4_16bit_slice;
+ sizeof_remap = sizeof(XYRemap4);
+ break;
+ case LANCZOS:
+ calculate_kernel = lanczos_kernel;
+ s->remap_slice = depth <= 8 ? remap4_8bit_slice :
remap4_16bit_slice;
+ sizeof_remap = sizeof(XYRemap4);
+ break;
+ }
+
+ switch (s->in) {
+ case EQUIRECTANGULAR:
+ in_transform = xyz_to_equirect;
+ err = 0;
+ wf = inlink->w;
+ hf = inlink->h;
+ break;
+ case CUBEMAP_3_2:
+ in_transform = xyz_to_cube3x2;
+ err = prepare_cube_in(ctx);
+ wf = inlink->w / 3.f * 4.f;
+ hf = inlink->h;
+ break;
+ case CUBEMAP_6_1:
+ in_transform = xyz_to_cube6x1;
+ err = prepare_cube_in(ctx);
+ wf = inlink->w / 3.f * 2.f;
+ hf = inlink->h * 2.f;
+ break;
+ case EQUIANGULAR:
+ in_transform = xyz_to_eac;
+ err = prepare_eac_in(ctx);
+ wf = inlink->w;
+ hf = inlink->h / 9.f * 8.f;
+ break;
+ case FLAT:
+ av_log(ctx, AV_LOG_ERROR, "Flat format is not accepted as
input.\n");
+ return AVERROR(EINVAL);
+ }
+
+ if (err != 0) {
+ return err;
+ }
+
+ switch (s->out) {
+ case EQUIRECTANGULAR:
+ out_transform = equirect_to_xyz;
+ err = 0;
+ w = roundf(wf);
+ h = roundf(hf);
+ break;
+ case CUBEMAP_3_2:
+ out_transform = cube3x2_to_xyz;
+ err = prepare_cube_out(ctx);
+ w = roundf(wf / 4.f * 3.f);
+ h = roundf(hf);
+ break;
+ case CUBEMAP_6_1:
+ out_transform = cube6x1_to_xyz;
+ err = prepare_cube_out(ctx);
+ w = roundf(wf / 2.f * 3.f);
+ h = roundf(hf / 2.f);
+ break;
+ case EQUIANGULAR:
+ out_transform = eac_to_xyz;
+ err = prepare_eac_out(ctx);
+ w = roundf(wf);
+ h = roundf(hf / 8.f * 9.f);
+ break;
+ case FLAT:
+ out_transform = flat_to_xyz;
+ err = prepare_flat_out(ctx);
+ w = roundf(wf * s->flat_range[0] / s->flat_range[1] / 2.f);
+ h = roundf(hf);
+ break;
+ }
+
+ if (err != 0) {
+ return err;
+ }
+
+ if (s->width > 0 && s->height > 0) {
+ w = s->width;
+ h = s->height;
+ }
If s->width/height are checked, should handle the case of no ture,
Else w/h may be used but not initialized.
Please try more hard to write english. I do not understand what is typed
above.
If w and h don't have initial values at declaration. So they might never
get set if that last if statement evaluates to false.
So he suggests to add an else case like
if (s->width > 0 && s->height > 0) {
w = s->width;
h = s->height;
} else {
w = 0;
h = 0;
}
or whatever values might make sense.
else case should have assert or return AVERROR_BUG.
This "if" branch overrides default values with user values. Default
values are calculated just above this code based on input/output formats.
So w and h do get initialized in any case.
Thilo
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".