diff options
Diffstat (limited to 'libavfilter/vf_v360.c')
-rw-r--r-- | libavfilter/vf_v360.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/libavfilter/vf_v360.c b/libavfilter/vf_v360.c index 1a813c1f14..ed25e1f07d 100644 --- a/libavfilter/vf_v360.c +++ b/libavfilter/vf_v360.c @@ -164,6 +164,7 @@ static const AVOption v360_options[] = { { "iv_fov", "input vertical field of view", OFFSET(iv_fov), AV_OPT_TYPE_FLOAT, {.dbl=0.f}, 0.f, 360.f,TFLAGS, "iv_fov"}, { "id_fov", "input diagonal field of view", OFFSET(id_fov), AV_OPT_TYPE_FLOAT, {.dbl=0.f}, 0.f, 360.f,TFLAGS, "id_fov"}, {"alpha_mask", "build mask in alpha plane", OFFSET(alpha), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS, "alpha"}, + { "reset_rot", "reset rotation", OFFSET(reset_rot), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1,TFLAGS, "reset_rot"}, { NULL } }; @@ -4948,6 +4949,12 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) return ff_filter_frame(outlink, out); } +static void reset_rot(V360Context *s) +{ + s->rot_quaternion[0][0] = 1.f; + s->rot_quaternion[0][1] = s->rot_quaternion[0][2] = s->rot_quaternion[0][3] = 0.f; +} + static int process_command(AVFilterContext *ctx, const char *cmd, const char *args, char *res, int res_len, int flags) { @@ -4955,11 +4962,15 @@ static int process_command(AVFilterContext *ctx, const char *cmd, const char *ar int ret; s->yaw = s->pitch = s->roll = 0.f; + s->reset_rot = 0; ret = ff_filter_process_command(ctx, cmd, args, res, res_len, flags); if (ret < 0) return ret; + if (s->reset_rot) + reset_rot(s); + return config_output(ctx->outputs[0]); } @@ -4967,8 +4978,7 @@ static av_cold int init(AVFilterContext *ctx) { V360Context *s = ctx->priv; - s->rot_quaternion[0][0] = 1.f; - s->rot_quaternion[0][1] = s->rot_quaternion[0][2] = s->rot_quaternion[0][3] = 0.f; + reset_rot(s); return 0; } |