Mercurial > mplayer.hg
diff libmpcodecs/vf_vo.c @ 18917:d9a75b26da6c
Add a new video pts tracking mode, enabled by option -correct-pts.
This mode has the following differences:
- Video timing is correct for streams with B frames, at least with some
demuxers.
- Video filters can modify frame timestamps and insert new frames, and
removing frames is handled better than before.
- Some things are known to break, it's not usable as the default yet.
Things should work as before when the -correct-pts option is not used.
author | uau |
---|---|
date | Thu, 06 Jul 2006 06:58:17 +0000 |
parents | 20aca9baf5d8 |
children | ed2785b4dd48 |
line wrap: on
line diff
--- a/libmpcodecs/vf_vo.c Thu Jul 06 05:05:00 2006 +0000 +++ b/libmpcodecs/vf_vo.c Thu Jul 06 06:58:17 2006 +0000 @@ -12,7 +12,8 @@ //===========================================================================// -#define video_out ((vo_functions_t*)(vf->priv)) +struct priv_t {double pts; vo_functions_t *vo;}; +#define video_out (((struct priv_t *)(vf->priv))->vo) static int query_format(struct vf_instance_s* vf, unsigned int fmt); /* forward declaration */ @@ -102,6 +103,8 @@ static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts){ if(!vo_config_count) return 0; // vo not configured? + // record pts (potentially modified by filters) for main loop + ((struct priv_t *)vf->priv)->pts = pts; // first check, maybe the vo/vf plugin implements draw_image using mpi: if(video_out->control(VOCTRL_DRAW_IMAGE,mpi)==VO_TRUE) return 1; // done. // nope, fallback to old draw_frame/draw_slice: