From e2d50fc2f5f3600e13055acf1a10fec35e941f37 Mon Sep 17 00:00:00 2001 From: Martin Storsjö Date: Wed, 29 Apr 2015 22:28:45 +0300 Subject: avplay: Add support for rotated video MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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ö --- avplay.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'avplay.c') 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, }, }; -- cgit v1.2.3