OSDN Git Service

Fix bug that was causing one sec. of audio to be dropped on many ffmpeg files. Proble...
authorvan <van@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Mon, 21 Sep 2009 07:18:49 +0000 (07:18 +0000)
committervan <van@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Mon, 21 Sep 2009 07:18:49 +0000 (07:18 +0000)
git-svn-id: svn://localhost/HandBrake/trunk@2831 b64f7644-9d1e-0410-96f1-a4d463321fa5

libhb/reader.c

index 88617f9..11cb23b 100644 (file)
@@ -333,17 +333,22 @@ static void ReaderFunc( void * _r )
             hb_list_rem( list, buf );
             fifos = GetFifoForId( r->job, buf->id );
 
-            if ( ! r->saw_video )
+            if ( fifos && ! r->saw_video )
             {
-                /* The first video packet defines 'time zero' so discard
-                   data until we get a video packet with a PTS & DTS */
-                if ( buf->id == r->title->video_id && buf->start != -1 &&
-                     buf->renderOffset != -1 )
+                // The first data packet with a PTS from an audio or video stream
+                // that we're decoding defines 'time zero'. Discard packets until
+                // we get one.
+                if ( buf->start != -1 && buf->renderOffset != -1 &&
+                     ( buf->id == r->title->video_id || is_audio( r, buf->id ) ) )
                 {
                     // force a new scr offset computation
                     r->scr_changes = r->demux.scr_changes - 1;
+                    // create a stream state if we don't have one so the
+                    // offset will get computed correctly.
+                    id_to_st( r, buf );
                     r->saw_video = 1;
-                    hb_log( "reader: first SCR %"PRId64, r->demux.last_scr );
+                    hb_log( "reader: first SCR %"PRId64" id %d DTS %"PRId64,
+                            r->demux.last_scr, buf->id, buf->renderOffset );
                 }
                 else
                 {