]> git.sesse.net Git - ffmpeg/commitdiff
avfilter/vf_v360: make commands always do relative rotation
authorPaul B Mahol <onemda@gmail.com>
Sun, 25 Oct 2020 11:46:29 +0000 (12:46 +0100)
committerPaul B Mahol <onemda@gmail.com>
Sun, 25 Oct 2020 11:49:25 +0000 (12:49 +0100)
libavfilter/vf_v360.c

index 824f0e615495390b79df211abfeb63dbd99743b9..1dcad0ac693e654f3375a1326db50c47097851eb 100644 (file)
@@ -3922,7 +3922,7 @@ static inline void rotate(const float rot_quaternion[2][4],
 {
     float qv[4], temp[4], rqv[4];
 
-    qv[0] = 0;
+    qv[0] = 0.f;
     qv[1] = vec[0];
     qv[2] = vec[1];
     qv[3] = vec[2];
@@ -4670,13 +4670,8 @@ static int config_output(AVFilterLink *outlink)
             return err;
     }
 
-    s->rot_quaternion[0][0] = 1.f;
-    s->rot_quaternion[0][1] = s->rot_quaternion[0][2] = s->rot_quaternion[0][3] = 0.f;
-
-    for (int i = 0; i < 4; i++) {
-        calculate_rotation(s->yaw * 0.25f, s->pitch * 0.25f, s->roll * 0.25f,
-                           s->rot_quaternion, s->rotation_order);
-    }
+    calculate_rotation(s->yaw, s->pitch, s->roll,
+                       s->rot_quaternion, s->rotation_order);
 
     set_mirror_modifier(s->h_flip, s->v_flip, s->d_flip, s->output_mirror_modifier);
 
@@ -4712,8 +4707,11 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
 static int process_command(AVFilterContext *ctx, const char *cmd, const char *args,
                            char *res, int res_len, int flags)
 {
+    V360Context *s = ctx->priv;
     int ret;
 
+    s->yaw = s->pitch = s->roll = 0.f;
+
     ret = ff_filter_process_command(ctx, cmd, args, res, res_len, flags);
     if (ret < 0)
         return ret;
@@ -4721,6 +4719,16 @@ static int process_command(AVFilterContext *ctx, const char *cmd, const char *ar
     return config_output(ctx->outputs[0]);
 }
 
+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;
+
+    return 0;
+}
+
 static av_cold void uninit(AVFilterContext *ctx)
 {
     V360Context *s = ctx->priv;
@@ -4762,6 +4770,7 @@ AVFilter ff_vf_v360 = {
     .name          = "v360",
     .description   = NULL_IF_CONFIG_SMALL("Convert 360 projection of video."),
     .priv_size     = sizeof(V360Context),
+    .init          = init,
     .uninit        = uninit,
     .query_formats = query_formats,
     .inputs        = inputs,