summaryrefslogtreecommitdiff
path: root/avplay.c
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2015-04-29 22:28:45 +0300
committerMartin Storsjö <martin@martin.st>2015-05-02 22:06:29 +0300
commite2d50fc2f5f3600e13055acf1a10fec35e941f37 (patch)
tree63d6d138c341d5908d9a9b12db533f4bbc93114e /avplay.c
parent21180b73239c6360aa28496d4879713b7ba4a8e5 (diff)
avplay: Add support for rotated video
This is enabled by default, but can be disbled via the -noautorotate option. Based on a patch by Clément Bœsch. Signed-off-by: Martin Storsjö <martin@martin.st>
Diffstat (limited to 'avplay.c')
-rw-r--r--avplay.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/avplay.c b/avplay.c
index e353a66245..7437bd615c 100644
--- a/avplay.c
+++ b/avplay.c
@@ -27,6 +27,7 @@
#include "libavutil/avstring.h"
#include "libavutil/colorspace.h"
+#include "libavutil/display.h"
#include "libavutil/mathematics.h"
#include "libavutil/pixdesc.h"
#include "libavutil/imgutils.h"
@@ -265,6 +266,7 @@ static int rdftspeed = 20;
#if CONFIG_AVFILTER
static char *vfilters = NULL;
#endif
+static int autorotate = 1;
/* current context */
static int is_full_screen;
@@ -1548,6 +1550,22 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c
INSERT_FILT("format", "yuv420p");
+ if (autorotate) {
+ uint8_t* displaymatrix = av_stream_get_side_data(is->video_st,
+ AV_PKT_DATA_DISPLAYMATRIX, NULL);
+ if (displaymatrix) {
+ double rot = av_display_rotation_get((int32_t*) displaymatrix);
+ if (rot < -135 || rot > 135) {
+ INSERT_FILT("vflip", NULL);
+ INSERT_FILT("hflip", NULL);
+ } else if (rot < -45) {
+ INSERT_FILT("transpose", "dir=clock");
+ } else if (rot > 45) {
+ INSERT_FILT("transpose", "dir=cclock");
+ }
+ }
+ }
+
if (vfilters) {
AVFilterInOut *outputs = avfilter_inout_alloc();
AVFilterInOut *inputs = avfilter_inout_alloc();
@@ -2928,6 +2946,7 @@ static const OptionDef options[] = {
{ "rdftspeed", OPT_INT | HAS_ARG| OPT_AUDIO | OPT_EXPERT, { &rdftspeed }, "rdft speed", "msecs" },
{ "default", HAS_ARG | OPT_AUDIO | OPT_VIDEO | OPT_EXPERT, { opt_default }, "generic catch all option", "" },
{ "i", 0, { NULL }, "avconv compatibility dummy option", ""},
+ { "autorotate", OPT_BOOL, { &autorotate }, "automatically rotate video", "" },
{ NULL, },
};