From d624933d6d66444a469a6d64f89bb0bd993215eb Mon Sep 17 00:00:00 2001 From: jstebbins Date: Mon, 28 Feb 2011 22:00:26 +0000 Subject: [PATCH] Fix PFR issue where there are different number of frames in 1st and 2nd pass. 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 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libhb/fifo.c b/libhb/fifo.c index cd348c86..fcb7b836 100644 --- a/libhb/fifo.c +++ b/libhb/fifo.c @@ -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 ); -- 2.11.0