summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--demux/demux_lavf.c8
-rw-r--r--demux/stheader.h1
-rw-r--r--video/decode/vd_lavc.c1
3 files changed, 10 insertions, 0 deletions
diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c
index 90fde22eba..08f05c18df 100644
--- a/demux/demux_lavf.c
+++ b/demux/demux_lavf.c
@@ -478,6 +478,14 @@ static void handle_stream(demuxer_t *demuxer, int i)
/ (float)(codec->height * codec->sample_aspect_ratio.den);
sh_video->i_bps = codec->bit_rate / 8;
+ 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;
+ }
+
// 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/demux/stheader.h b/demux/stheader.h
index 2940dc6a4d..99dc35832a 100644
--- a/demux/stheader.h
+++ b/demux/stheader.h
@@ -81,6 +81,7 @@ typedef struct sh_video {
float aspect; // aspect ratio stored in the file (for prescaling)
int i_bps; // == bitrate (compressed bytes/sec)
int disp_w, disp_h; // display size
+ int rotate; // intended display rotation, in degrees, [0, 359]
MP_BITMAPINFOHEADER *bih;
} sh_video_t;
diff --git a/video/decode/vd_lavc.c b/video/decode/vd_lavc.c
index 969c78f54c..4935913d73 100644
--- a/video/decode/vd_lavc.c
+++ b/video/decode/vd_lavc.c
@@ -444,6 +444,7 @@ static void update_image_params(struct dec_video *vd, AVFrame *frame,
.colorlevels = avcol_range_to_mp_csp_levels(ctx->avctx->color_range),
.chroma_location =
avchroma_location_to_mp(ctx->avctx->chroma_sample_location),
+ .rotate = vd->header->video->rotate,
};
}