OSDN Git Service

Fix PFR issue where there are different number of frames in 1st and 2nd pass.
authorjstebbins <jstebbins@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Mon, 28 Feb 2011 22:00:26 +0000 (22:00 +0000)
committerjstebbins <jstebbins@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Mon, 28 Feb 2011 22:00:26 +0000 (22:00 +0000)
Waiting for a fill threshhold in the fifos causes some non-determinism
in finding the first PTS value.  Sometimes the fill level of one fifo
would not be reached until after another fifo is completely full, causing
an early exit in the loop that looks for the first PTS.  When the initial PTS
is different between passes, the duration of the first frame is different.
This affects the PFR algorithm and can cause it to drop a different number
of frames.

The fill level was initially intended as a way to prevent thrashing between
threads to improve performance.  But my testing indicates no degradation
when removing it.

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

libhb/fifo.c

index cd348c8..fcb7b83 100644 (file)
@@ -453,7 +453,7 @@ void hb_fifo_push_wait( hb_fifo_t * f, hb_buffer_t * b )
         f->size += 1;
         f->last  = f->last->next;
     }
-    if( f->wait_empty && f->size >= f->thresh )
+    if( f->wait_empty && f->size >= 1 )
     {
         f->wait_empty = 0;
         hb_cond_signal( f->cond_empty );
@@ -485,7 +485,7 @@ void hb_fifo_push( hb_fifo_t * f, hb_buffer_t * b )
         f->size += 1;
         f->last  = f->last->next;
     }
-    if( f->wait_empty && f->size >= f->thresh )
+    if( f->wait_empty && f->size >= 1 )
     {
         f->wait_empty = 0;
         hb_cond_signal( f->cond_empty );