Unified · Split
| @@ -3922,7 +3922,7 @@ static inline void rotate(const float rot_quaternion[2][4], · 3921 unmodified lines | ||
| 3922 | 3922 | { |
| 3923 | 3923 | float qv[4], temp[4], rqv[4]; |
| 3924 | 3924 | |
| 3925 | − qv[0] = 0; | |
| 3925 | + qv[0] = 0.f; | |
| 3926 | 3926 | qv[1] = vec[0]; |
| 3927 | 3927 | qv[2] = vec[1]; |
| 3928 | 3928 | qv[3] = vec[2]; |
| @@ -4670,13 +4670,8 @@ static int config_output(AVFilterLink *outlink) · 741 unmodified lines | ||
| 4670 | 4670 | return err; |
| 4671 | 4671 | } |
| 4672 | 4672 | |
| 4673 | − s->rot_quaternion[0][0] = 1.f; | |
| 4674 | − s->rot_quaternion[0][1] = s->rot_quaternion[0][2] = s->rot_quaternion[0][3] = 0.f; | |
| 4675 | − | |
| 4676 | − for (int i = 0; i < 4; i++) { | |
| 4677 | − calculate_rotation(s->yaw * 0.25f, s->pitch * 0.25f, s->roll * 0.25f, | |
| 4678 | − s->rot_quaternion, s->rotation_order); | |
| 4679 | − } | |
| 4673 | + calculate_rotation(s->yaw, s->pitch, s->roll, | |
| 4674 | + s->rot_quaternion, s->rotation_order); | |
| 4680 | 4675 | |
| 4681 | 4676 | set_mirror_modifier(s->h_flip, s->v_flip, s->d_flip, s->output_mirror_modifier); |
| 4682 | 4677 | |
| @@ -4712,8 +4707,11 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) · 29 unmodified lines | ||
| 4712 | 4707 | static int process_command(AVFilterContext *ctx, const char *cmd, const char *args, |
| 4713 | 4708 | char *res, int res_len, int flags) |
| 4714 | 4709 | { |
| 4710 | + V360Context *s = ctx->priv; | |
| 4715 | 4711 | int ret; |
| 4716 | 4712 | |
| 4713 | + s->yaw = s->pitch = s->roll = 0.f; | |
| 4714 | + | |
| 4717 | 4715 | ret = ff_filter_process_command(ctx, cmd, args, res, res_len, flags); |
| 4718 | 4716 | if (ret < 0) |
| 4719 | 4717 | return ret; |
| @@ -4721,6 +4719,16 @@ static int process_command(AVFilterContext *ctx, const char *cmd, const char *ar · 1 unmodified line | ||
| 4721 | 4719 | return config_output(ctx->outputs[0]); |
| 4722 | 4720 | } |
| 4723 | 4721 | |
| 4722 | +static av_cold int init(AVFilterContext *ctx) | |
| 4723 | +{ | |
| 4724 | + V360Context *s = ctx->priv; | |
| 4725 | + | |
| 4726 | + s->rot_quaternion[0][0] = 1.f; | |
| 4727 | + s->rot_quaternion[0][1] = s->rot_quaternion[0][2] = s->rot_quaternion[0][3] = 0.f; | |
| 4728 | + | |
| 4729 | + return 0; | |
| 4730 | +} | |
| 4731 | + | |
| 4724 | 4732 | static av_cold void uninit(AVFilterContext *ctx) |
| 4725 | 4733 | { |
| 4726 | 4734 | V360Context *s = ctx->priv; |
| @@ -4762,6 +4770,7 @@ AVFilter ff_vf_v360 = { · 35 unmodified lines | ||
| 4762 | 4770 | .name = "v360", |
| 4763 | 4771 | .description = NULL_IF_CONFIG_SMALL("Convert 360 projection of video."), |
| 4764 | 4772 | .priv_size = sizeof(V360Context), |
| 4773 | + .init = init, | |
| 4765 | 4774 | .uninit = uninit, |
| 4766 | 4775 | .query_formats = query_formats, |
| 4767 | 4776 | .inputs = inputs, |