summaryrefslogtreecommitdiffstats
path: root/libhb/hb.c
diff options
context:
space:
mode:
authorvan <[email protected]>2008-04-13 23:31:37 +0000
committervan <[email protected]>2008-04-13 23:31:37 +0000
commitd3aeb74cdf94f70b643da897dfb666d81a743817 (patch)
tree56f6c5ba9b69726d925e7c13f0e2e0245a134c3f /libhb/hb.c
parent280d49d8ae91af433b4df17b2e42b267dbdbc083 (diff)
Fixes for different number of frames between pass 1 & 2, missing frames at end, and an deadlock with pcm audio.
- since the SCR clock recovery is done in reader.c we can't currently skip audio frames during pass 1 or we miss clock changes signaled by those frames & end up dropping more video frames in pass 1 than pass 2. - since many modules buffer frames we can't tell if we're done just by looking for empty fifos. Send an empty buffer to mark end-of-stream all the way along the processing pipeline & use it to flush internally buffered data. - in a processing pipeline you're done when the end of the pipe says your done. add a thread status variable so we can tell when individual threads are finished then make do_job wait until the encoder thread is done so that we're sure all the frames have been processed and sent to the muxer. - since the muxer alternates between reading video & audio packets we have to have enough buffer in the audio pipeline to handle a video-frame's worth of audio packets (33ms). Since pcm packets are <1ms we need >60 slots in the audio fifos or we'll deadlock. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1412 b64f7644-9d1e-0410-96f1-a4d463321fa5
Diffstat (limited to 'libhb/hb.c')
-rw-r--r--libhb/hb.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/libhb/hb.c b/libhb/hb.c
index 5f176f1ae..a6fc87fca 100644
--- a/libhb/hb.c
+++ b/libhb/hb.c
@@ -857,7 +857,11 @@ void hb_add( hb_handle_t * h, hb_job_t * job )
title_copy->list_audio = hb_list_init();
/* Do nothing about audio during first pass */
- if( job->pass == 0 || job->pass == 2 )
+ // XXX for right now we need to see the audio in libhb/reader.c to track
+ // clock changes otherwise we'll discard more video frames in pass 1 than
+ // pass 2 & screw up the encoding. Once the clock tracking is moved from
+ // reader to the mpeg demuxer this code can be restored.
+ //if( job->pass == 0 || job->pass == 2 )
{
for( i = 0; i < hb_list_count(job->list_audio); i++ )
{