From 5bcc61ce87922ecccaaa0bd303a7e195929859a8 Mon Sep 17 00:00:00 2001 From: Paul B Mahol Date: Sat, 16 Oct 2021 11:37:07 +0200 Subject: avfilter/vf_v360: add reset_rot option --- doc/filters.texi | 3 +++ libavfilter/v360.h | 1 + libavfilter/vf_v360.c | 14 ++++++++++++-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index e9eb07590d..3b8611d93b 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -21612,6 +21612,9 @@ Set if output video needs to be transposed. Boolean value, by default disabled. @item alpha_mask Build mask in alpha plane for all unmapped pixels by marking them fully transparent. Boolean value, by default disabled. + +@item reset_rot +Reset rotation of output video. Boolean value, by default disabled. @end table @subsection Examples diff --git a/libavfilter/v360.h b/libavfilter/v360.h index b8ade2591c..05e3435b44 100644 --- a/libavfilter/v360.h +++ b/libavfilter/v360.h @@ -122,6 +122,7 @@ typedef struct V360Context { int in, out; int interp; int alpha; + int reset_rot; int width, height; char *in_forder; char *out_forder; 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; } -- cgit v1.2.3