summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2021-10-16 11:37:07 +0200
committerPaul B Mahol <onemda@gmail.com>2021-10-16 11:39:15 +0200
commit5bcc61ce87922ecccaaa0bd303a7e195929859a8 (patch)
tree5301a4a61d3aad47336173eb56eb5ffaaba3efd2
parent3cc3f5de2afda5b8f880c0817e9d67c2dafbfe1e (diff)
avfilter/vf_v360: add reset_rot option
-rw-r--r--doc/filters.texi3
-rw-r--r--libavfilter/v360.h1
-rw-r--r--libavfilter/vf_v360.c14
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;
}