diff options
author | wm4 <wm4@nowhere> | 2014-04-20 21:29:22 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2014-04-21 02:57:16 +0200 |
commit | fd2f40762fb07bb50d385bac287a7ee1da36857c (patch) | |
tree | b037a982c8d50497b74490d306721b18e27cee57 | |
parent | 3b5a331c40b936190bb25d4b40474c979bde95da (diff) | |
download | mpv-fd2f40762fb07bb50d385bac287a7ee1da36857c.tar.bz2 mpv-fd2f40762fb07bb50d385bac287a7ee1da36857c.tar.xz |
demux: export video rotation parameter
Now the rotation hint is propagated everywhere. It just isn't used
anywhere yet.
-rw-r--r-- | demux/demux_lavf.c | 8 | ||||
-rw-r--r-- | demux/stheader.h | 1 | ||||
-rw-r--r-- | video/decode/vd_lavc.c | 1 |
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, }; } |