OSDN Git Service

Fix bug that was causing one sec. of audio to be dropped on many ffmpeg files. Proble...
[handbrake-jp/handbrake-jp-git.git] / libhb / render.c
index fefec77..a4943b7 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;
 }
@@ -493,7 +494,7 @@ int renderWork( hb_work_object_t * w, hb_buffer_t ** buf_in,
         /* In order to make sure we have continuous time stamps, store
            the current frame's duration as starting when the last one stopped. */
         pv->last_start[0] = pv->last_stop[1];
-        pv->last_stop[0] = pv->last_start[0] + (in->stop - in->start);
+        pv->last_stop[0] = pv->last_start[0] + (buf_tmp_in->stop - buf_tmp_in->start);
     }
 
     /* Apply subtitles */
@@ -668,10 +669,15 @@ void renderClose( hb_work_object_t * w )
                pv->count_frames, pv->drops, pv->dups );
     }
 
-    hb_log("render: lost time: %lld (%i frames)", pv->total_lost_time, pv->dropped_frames);
-    hb_log("render: gained time: %lld (%i frames) (%lld not accounted for)", pv->total_gained_time, pv->extended_frames, pv->total_lost_time - pv->total_gained_time);
+    hb_interjob_t * interjob = hb_interjob_get( w->private_data->job->h );
+    
+    /* Preserve dropped frame count for more accurate framerates in 2nd passes. */
+    interjob->render_dropped = pv->dropped_frames;
+
+    hb_log("render: lost time: %"PRId64" (%i frames)", pv->total_lost_time, pv->dropped_frames);
+    hb_log("render: gained time: %"PRId64" (%i frames) (%"PRId64" not accounted for)", pv->total_gained_time, pv->extended_frames, pv->total_lost_time - pv->total_gained_time);
     if (pv->dropped_frames)
-        hb_log("render: average dropped frame duration: %lld", (pv->total_lost_time / pv->dropped_frames) );
+        hb_log("render: average dropped frame duration: %"PRId64, (pv->total_lost_time / pv->dropped_frames) );
 
     /* Cleanup subtitle queue */
     if( pv->subtitle_queue )