From 22087004b8419250da240093e411356830a1f0db Mon Sep 17 00:00:00 2001 From: reimar Date: Mon, 1 Feb 2010 22:22:32 +0000 Subject: Estimate pts of additional frame generated by tfields also if correct-pts is not set, even if it is not very relevant currently. Based on patch by John Lindgren [john lindgren tds net] git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30485 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpcodecs/vf_tfields.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'libmpcodecs') diff --git a/libmpcodecs/vf_tfields.c b/libmpcodecs/vf_tfields.c index 8147661244..a3a44634db 100644 --- a/libmpcodecs/vf_tfields.c +++ b/libmpcodecs/vf_tfields.c @@ -336,6 +336,12 @@ static int put_image(struct vf_instance_s* vf, mp_image_t *mpi, double pts) return continue_buffered_image(vf); } +static double calc_pts(double base_pts, int field) +{ + // FIXME this assumes 25 fps / 50 fields per second + return base_pts + 0.02 * field; +} + static int continue_buffered_image(struct vf_instance_s *vf) { int i=vf->priv->buffered_i; @@ -349,7 +355,6 @@ static int continue_buffered_image(struct vf_instance_s *vf) if (i == 0) vf_queue_frame(vf, continue_buffered_image); - pts += i * .02; // XXX not right if (!(mpi->flags & MP_IMGFLAG_PLANAR)) bpp = mpi->bpp/8; if (vf->priv->parity < 0) { @@ -387,7 +392,7 @@ static int continue_buffered_image(struct vf_instance_s *vf) dmpi->stride[1] = 2*mpi->stride[1]; dmpi->stride[2] = 2*mpi->stride[2]; } - ret |= vf_next_put_image(vf, dmpi, pts); + ret |= vf_next_put_image(vf, dmpi, calc_pts(pts, i)); if (correct_pts) break; else @@ -417,7 +422,7 @@ static int continue_buffered_image(struct vf_instance_s *vf) deint(dmpi->planes[2], dmpi->stride[2], mpi->planes[2], mpi->stride[2], mpi->chroma_width, mpi->chroma_height, (i^!tff)); } - ret |= vf_next_put_image(vf, dmpi, pts); + ret |= vf_next_put_image(vf, dmpi, calc_pts(pts, i)); if (correct_pts) break; else @@ -443,7 +448,7 @@ static int continue_buffered_image(struct vf_instance_s *vf) mpi->chroma_width, mpi->chroma_height/2, dmpi->stride[2], mpi->stride[2]*2, (i^!tff)); } - ret |= vf_next_put_image(vf, dmpi, pts); + ret |= vf_next_put_image(vf, dmpi, calc_pts(pts, i)); if (correct_pts) break; else -- cgit v1.2.3