summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--player/video.c4
-rw-r--r--video/filter/vf_rotate.c11
2 files changed, 11 insertions, 4 deletions
diff --git a/player/video.c b/player/video.c
index 6373123407..fb4b41f718 100644
--- a/player/video.c
+++ b/player/video.c
@@ -217,8 +217,8 @@ static void filter_reconfig(struct MPContext *mpctx, struct vo_chain *vo_c)
if (mpctx->opts->deinterlace >= 0)
video_vf_vo_control(vo_c, VFCTRL_SET_DEINTERLACE, &(int){0});
- if (params.rotate && (params.rotate % 90 == 0)) {
- if (!(vo_c->vo->driver->caps & VO_CAP_ROTATE90)) {
+ if (params.rotate) {
+ if (!(vo_c->vo->driver->caps & VO_CAP_ROTATE90) || params.rotate % 90) {
// Try to insert a rotation filter.
char *args[] = {"angle", "auto", NULL};
if (try_filter(vo_c, "rotate", "autorotate", args) < 0)
diff --git a/video/filter/vf_rotate.c b/video/filter/vf_rotate.c
index 60e52a00bd..dcaba53c6a 100644
--- a/video/filter/vf_rotate.c
+++ b/video/filter/vf_rotate.c
@@ -18,6 +18,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <math.h>
#include <inttypes.h>
#include "common/msg.h"
@@ -46,11 +47,17 @@ static int lavfi_reconfig(struct vf_instance *vf,
struct vf_priv_s *p = vf_lw_old_priv(vf);
if (p->angle == 4) { // "auto"
int r = in->rotate;
- if (r < 0 || r >= 360 || (r % 90) != 0) {
+ if (r < 0 || r >= 360) {
MP_ERR(vf, "Can't apply rotation of %d degrees.\n", r);
return -1;
}
- vf_lw_update_graph(vf, NULL, "%s", rot[(r / 90) % 360]);
+ if (r % 90) {
+ double a = r / 180.0 * M_PI;
+ vf_lw_update_graph(vf, NULL, "rotate=%f:ow=rotw(%f):oh=roth(%f)",
+ a, a, a);
+ } else {
+ vf_lw_update_graph(vf, NULL, "%s", rot[(r / 90) % 360]);
+ }
out->rotate = 0;
}
return 0;