summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-06-01 17:56:10 +0200
committerwm4 <wm4@nowhere>2014-06-01 17:56:10 +0200
commit556bb1cf138711153b4fe5a51f22372f717a0b1e (patch)
treef4f35ca738980aef1a63503840ae5a0b272fc7da
parentb5e40e15a3e35f0b48345b949a86f8862bca3b8b (diff)
downloadmpv-556bb1cf138711153b4fe5a51f22372f717a0b1e.tar.bz2
mpv-556bb1cf138711153b4fe5a51f22372f717a0b1e.tar.xz
demux_lavf: support new rotation metadata API
-rw-r--r--demux/demux_lavf.c12
-rwxr-xr-xold-configure6
-rw-r--r--wscript6
3 files changed, 23 insertions, 1 deletions
diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c
index 0d33219dd9..23a89386b7 100644
--- a/demux/demux_lavf.c
+++ b/demux/demux_lavf.c
@@ -36,6 +36,9 @@
#if HAVE_AVCODEC_REPLAYGAIN_SIDE_DATA
# include <libavutil/replaygain.h>
#endif
+#if HAVE_AV_DISPLAYMATRIX
+# include <libavutil/display.h>
+#endif
#include <libavutil/opt.h>
#include "compat/libav.h"
@@ -482,13 +485,20 @@ static void handle_stream(demuxer_t *demuxer, int i)
if (sh_video->bitrate == 0)
sh_video->bitrate = avfc->bit_rate;
+#if HAVE_AV_DISPLAYMATRIX
+ uint8_t *sd = av_stream_get_side_data(st, AV_PKT_DATA_DISPLAYMATRIX, NULL);
+ if (sd)
+ sh_video->rotate = av_display_rotation_get((uint32_t *)sd);
+#else
AVDictionaryEntry *rot = av_dict_get(st->metadata, "rotate", NULL, 0);
if (rot && rot->value) {
char *end = NULL;
long int r = strtol(rot->value, &end, 10);
if (end && !end[0])
- sh_video->rotate = ((r % 360) + 360) % 360;
+ sh_video->rotate = r;
}
+#endif
+ sh_video->rotate = ((sh_video->rotate % 360) + 360) % 360;
// This also applies to vfw-muxed mkv, but we can't detect these easily.
sh_video->avi_dts = matches_avinputformat_name(priv, "avi");
diff --git a/old-configure b/old-configure
index 21db04c224..3bf27780f1 100755
--- a/old-configure
+++ b/old-configure
@@ -809,6 +809,12 @@ api_statement_check \
'enum AVPacketSideDataType type = AV_PKT_DATA_REPLAYGAIN'
api_statement_check \
+ "libavutil/libavcodec display matrix side data" \
+ HAVE_AV_DISPLAYMATRIX \
+ libavutil/frame.h \
+ 'enum AVFrameSideDataType type = AV_FRAME_DATA_DISPLAYMATRIX'
+
+api_statement_check \
"libavutil AVFrame metadata" \
HAVE_AVFRAME_METADATA \
libavutil/frame.h \
diff --git a/wscript b/wscript
index aca7fbd88d..8780cb220e 100644
--- a/wscript
+++ b/wscript
@@ -383,6 +383,12 @@ Libav libraries ({0}). Aborting.".format(" ".join(libav_pkg_config_checks))
'func': check_statement('libavcodec/avcodec.h',
'enum AVPacketSideDataType type = AV_PKT_DATA_REPLAYGAIN',
use='libav')
+ }, {
+ 'name': 'av-displaymatrix',
+ 'desc': 'libavutil/libavcodec display matrix side data',
+ 'func': check_statement('libavutil/frame.h',
+ 'enum AVFrameSideDataType type = AV_FRAME_DATA_DISPLAYMATRIX',
+ use='libav')
},{
'name': 'avframe-metadata',
'desc': 'libavutil AVFrame metadata',