OSDN Git Service

- nasty bug: at eof, dropping a delay queue frame for CFR could link the render...
authorvan <van@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Sun, 7 Jun 2009 05:01:10 +0000 (05:01 +0000)
committervan <van@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Sun, 7 Jun 2009 05:01:10 +0000 (05:01 +0000)
 - since frame rate conversion moved from sync to render, sync has to use input (title) frame rate, not output (job) frame rate.
 - get rid of 'too many frames' check in sync. it can't be done here because it causes reader to deadlock and it belongs in the dvd reader anyway (only dvd input can loop).

git-svn-id: svn://localhost/HandBrake/trunk@2496 b64f7644-9d1e-0410-96f1-a4d463321fa5

libhb/render.c
libhb/sync.c

index 34928d9..894bdb0 100644 (file)
@@ -226,6 +226,7 @@ static hb_buffer_t *delete_buffer_from_chain( hb_buffer_t **buf_out, hb_buffer_t
         // found 'out' - remove it from the chain
         pred->next = succ;
     }
+    out->next = 0;
     hb_buffer_close( &out );
     return succ;
 }
index abcf111..2043b9d 100644 (file)
@@ -112,7 +112,7 @@ int syncInit( hb_work_object_t * w, hb_job_t * job )
         else if( job->frame_to_stop )
         {
             /* Set the duration to a rough estimate */
-            duration = ( job->frame_to_stop / ( job->vrate / job->vrate_base ) ) * 90000;
+            duration = ( job->frame_to_stop / ( title->rate / title->rate_base ) ) * 90000;
         }
         else
         {
@@ -125,7 +125,7 @@ int syncInit( hb_work_object_t * w, hb_job_t * job )
             duration += 90000;
             /* 1 second safety so we're sure we won't miss anything */
         }
-        pv->count_frames_max = duration * job->vrate / job->vrate_base / 90000;
+        pv->count_frames_max = duration * title->rate / title->rate_base / 90000;
     }
 
     hb_log( "sync: expecting %d video frames", pv->count_frames_max );
@@ -745,19 +745,6 @@ static void SyncVideo( hb_work_object_t * w )
                     pv->count_frames, pv->busy );
             return;
         }
-
-        /* Make sure we won't get more frames then expected */
-        if( pv->count_frames >= pv->count_frames_max * 2)
-        {
-            hb_log( "sync: got too many frames (%d), exiting early",
-                    pv->count_frames );
-
-            // Drop an empty buffer into our output to ensure that things
-            // get flushed all the way out.
-            hb_fifo_push( job->fifo_sync, hb_buffer_init( 0 ) );
-            pv->busy &=~ 1;
-            return;
-        }
     }
 }