summaryrefslogtreecommitdiffstats
path: root/video/decode/dec_video.c
diff options
context:
space:
mode:
Diffstat (limited to 'video/decode/dec_video.c')
-rw-r--r--video/decode/dec_video.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/video/decode/dec_video.c b/video/decode/dec_video.c
index 1b461a619a..34dc9bd073 100644
--- a/video/decode/dec_video.c
+++ b/video/decode/dec_video.c
@@ -339,13 +339,26 @@ int mpcodecs_reconfig_vo(struct dec_video *d_video,
d_video->vfilter = vf;
flip = false;
}
- // time to do aspect ratio corrections...
+
+ float decoder_aspect = p.d_w / (float)p.d_h;
+ if (d_video->initial_decoder_aspect == 0)
+ d_video->initial_decoder_aspect = decoder_aspect;
+
+ // We normally prefer the container aspect, unless the decoder aspect
+ // changes at least once.
+ if (d_video->initial_decoder_aspect == decoder_aspect) {
+ if (sh->aspect > 0)
+ vf_set_dar(&p.d_w, &p.d_h, p.w, p.h, sh->aspect);
+ } else {
+ // Even if the aspect switches back, don't use container aspect again.
+ d_video->initial_decoder_aspect = -1;
+ }
float force_aspect = opts->movie_aspect;
if (force_aspect > -1.0 && d_video->stream_aspect != 0.0)
force_aspect = d_video->stream_aspect;
- if (force_aspect >= 0)
+ if (force_aspect > 0)
vf_set_dar(&p.d_w, &p.d_h, p.w, p.h, force_aspect);
if (abs(p.d_w - p.w) >= 4 || abs(p.d_h - p.h) >= 4) {