[FFmpeg-cvslog] avfilter/vf_v360: add reset_rot option

Paul B Mahol git at videolan.org
Sat Oct 16 12:39:57 EEST 2021


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Sat Oct 16 11:37:07 2021 +0200| [5bcc61ce87922ecccaaa0bd303a7e195929859a8] | committer: Paul B Mahol

avfilter/vf_v360: add reset_rot option

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=5bcc61ce87922ecccaaa0bd303a7e195929859a8
---

 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.
+
+ at 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;
 }



More information about the ffmpeg-cvslog mailing list