OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / libhb / sync.c
index 1f6581e..53b3193 100644 (file)
@@ -116,7 +116,7 @@ hb_work_object_t * hb_sync_init( hb_job_t * job )
     pv->common = calloc( 1, sizeof( hb_sync_common_t ) );
     pv->common->ref++;
     pv->common->mutex = hb_lock_init();
-    pv->common->audio_pts_thresh = 0;
+    pv->common->audio_pts_thresh = -1;
     pv->common->next_frame = hb_cond_init();
     pv->common->pts_count = 1;
     if ( job->frame_to_start || job->pts_to_start )
@@ -174,7 +174,7 @@ hb_work_object_t * hb_sync_init( hb_job_t * job )
     /* Initialize libsamplerate for every audio track we have */
     if ( ! job->indepth_scan )
     {
-        for( i = 0; i < hb_list_count( title->list_audio ) && i < 8; i++ )
+        for( i = 0; i < hb_list_count( title->list_audio ); i++ )
         {
             InitAudio( job, pv->common, i );
         }
@@ -390,6 +390,9 @@ int syncVideoWork( hb_work_object_t * w, hb_buffer_t ** buf_in,
         cur->start = sync->next_start;
         cur->stop = cur->start + 90000. / ((double)job->vrate / (double)job->vrate_base);
 
+        /* Make sure last frame is reflected in frame count */
+        pv->common->count_frames++;
+
         /* Push the frame to the renderer */
         hb_fifo_push( job->fifo_sync, cur );
         sync->cur = NULL;
@@ -561,7 +564,10 @@ int syncVideoWork( hb_work_object_t * w, hb_buffer_t ** buf_in,
          */
         if( subtitle->source == CC608SUB ||
             subtitle->source == CC708SUB ||
-            subtitle->source == SRTSUB )
+            subtitle->source == SRTSUB ||
+            subtitle->source == UTF8SUB ||
+            subtitle->source == TX3GSUB ||
+            subtitle->source == SSASUB)
         {
             /*
              * Rewrite timestamps on subtitles that came from Closed Captions
@@ -925,6 +931,13 @@ static int syncAudioWork( hb_work_object_t * w, hb_buffer_t ** buf_in,
     hb_lock( pv->common->mutex );
     while ( !pv->common->start_found )
     {
+        if ( pv->common->audio_pts_thresh < 0 )
+        {
+            // I would initialize this in hb_sync_init, but 
+            // job->pts_to_start can be modified by reader 
+            // after hb_sync_init is called.
+            pv->common->audio_pts_thresh = job->pts_to_start;
+        }
         if ( buf->start < pv->common->audio_pts_thresh )
         {
             hb_buffer_close( &buf );