changeset 22498:b6b1bd155b58

Allow demuxers to return packets with no pts in -correct-pts mode as long as there are enough pts values for frames that the decoder returns. This should allow passing NAL units individually.
author uau
date Sun, 11 Mar 2007 17:30:44 +0000
parents af2ea92641a8
children 643be517b47a
files libmpcodecs/dec_video.c mplayer.c
diffstat 2 files changed, 10 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/libmpcodecs/dec_video.c	Sun Mar 11 17:30:43 2007 +0000
+++ b/libmpcodecs/dec_video.c	Sun Mar 11 17:30:44 2007 +0000
@@ -337,7 +337,7 @@
     unsigned int t2;
     double tt;
 
-    if (correct_pts) {
+    if (correct_pts && pts != MP_NOPTS_VALUE) {
 	int delay = get_current_video_decoder_lag(sh_video);
 	if (delay >= 0) {
 	    if (delay > sh_video->num_buffered_pts)
@@ -395,8 +395,15 @@
 	mpi->fields &= ~MP_IMGFIELD_TOP_FIRST;
 
     if (correct_pts) {
-	sh_video->num_buffered_pts--;
-	sh_video->pts = sh_video->buffered_pts[sh_video->num_buffered_pts];
+	if (sh_video->num_buffered_pts) {
+	    sh_video->num_buffered_pts--;
+	    sh_video->pts = sh_video->buffered_pts[sh_video->num_buffered_pts];
+	}
+	else {
+	    mp_msg(MSGT_CPLAYER, MSGL_ERR, "No pts value from demuxer to "
+		   "use for frame!\n");
+	    sh_video->pts = MP_NOPTS_VALUE;
+	}
     }
     return mpi;
 }
--- a/mplayer.c	Sun Mar 11 17:30:43 2007 +0000
+++ b/mplayer.c	Sun Mar 11 17:30:44 2007 +0000
@@ -1615,8 +1615,6 @@
 	}
 	if (in_size > max_framesize)
 	    max_framesize = in_size;
-	if (pts == MP_NOPTS_VALUE)
-	    mp_msg(MSGT_CPLAYER, MSGL_ERR, "pts value from demuxer MISSING\n");
 	current_module = "decode video";
 	decoded_frame = decode_video(sh_video, start, in_size, 0, pts);
 	if (decoded_frame) {