diff options
author | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2009-11-23 04:38:32 +0200 |
---|---|---|
committer | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2009-11-23 04:38:32 +0200 |
commit | d3a1fa98f4e20ce707a7da54d381adf1e3d1eb87 (patch) | |
tree | 88bf4fa73cee1353dbff5fd47f17043414c20c1f /mplayer.c | |
parent | e43926d6d1bf243eec90bc790b453e402be2eb8c (diff) | |
download | mpv-d3a1fa98f4e20ce707a7da54d381adf1e3d1eb87.tar.bz2 mpv-d3a1fa98f4e20ce707a7da54d381adf1e3d1eb87.tar.xz |
core: Fix rare corner cases in video frame generation
Check that frames added by filters reach the screen and are not just
buffered by the VO, and give filters a chance to output added frames
if previous frame at EOF was buffered by VO. It's unlikely that anyone
ever noticed practical problems caused by these issues.
Diffstat (limited to 'mplayer.c')
-rw-r--r-- | mplayer.c | 6 |
1 files changed, 3 insertions, 3 deletions
@@ -2374,12 +2374,12 @@ static double update_video(struct MPContext *mpctx, int *blit_frame) current_module = "filter_video"; if (vo_get_buffered_frame(video_out, hit_eof) >= 0) break; - if (hit_eof) - return -1; // XXX Time used in this call is not counted in any performance // timer now, OSD time is not updated correctly for filter-added frames if (vf_output_queued_frame(sh_video->vfilter)) - break; + continue; + if (hit_eof) + return -1; unsigned char *packet = NULL; int in_size = ds_get_packet_pts(mpctx->d_video, &packet, &pts); if (pts != MP_NOPTS_VALUE) |