summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2009-11-23 04:38:32 +0200
committerUoti Urpala <uau@glyph.nonexistent.invalid>2009-11-23 04:38:32 +0200
commitd3a1fa98f4e20ce707a7da54d381adf1e3d1eb87 (patch)
tree88bf4fa73cee1353dbff5fd47f17043414c20c1f
parente43926d6d1bf243eec90bc790b453e402be2eb8c (diff)
downloadmpv-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.
-rw-r--r--mplayer.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/mplayer.c b/mplayer.c
index d6182584dc..a3152c9523 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -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)