All pastes #982886 Raw Edit

someone

public text v1 · immutable
·published 2008-04-12 22:03 UTC
rendered paste body
Index: libhb/reader.c===================================================================--- libhb/reader.c	(revision 1409)+++ libhb/reader.c	(working copy)@@ -269,6 +269,9 @@         }     } +    /* send an empty buffer upstream to signal we're done */+    hb_fifo_push( r->job->fifo_mpeg2, hb_buffer_init(0) );+     hb_list_empty( &list );     hb_buffer_close( &r->ps );     if (r->dvd)Index: libhb/decmpeg2.c===================================================================--- libhb/decmpeg2.c	(revision 1409)+++ libhb/decmpeg2.c	(working copy)@@ -77,14 +77,17 @@     hb_buffer_t   * buf;     uint8_t       * data; -    /* Feed libmpeg2 */-    if( buf_es->start > -1 )+    if ( buf_es->size )     {-        mpeg2_tag_picture( m->libmpeg2, buf_es->start >> 32,-                           buf_es->start & 0xFFFFFFFF );+        /* Feed libmpeg2 */+        if( buf_es->start > -1 )+        {+            mpeg2_tag_picture( m->libmpeg2, buf_es->start >> 32,+                               buf_es->start & 0xFFFFFFFF );+        }+        mpeg2_buffer( m->libmpeg2, buf_es->data,+                      buf_es->data + buf_es->size );     }-    mpeg2_buffer( m->libmpeg2, buf_es->data,-                  buf_es->data + buf_es->size );      for( ;; )     {@@ -397,6 +400,13 @@      hb_libmpeg2_decode( pv->libmpeg2, *buf_in, pv->list ); +    /* if we got an empty buffer signaling end-of-stream send it downstream */+    if ( (*buf_in)->size == 0 )+    {+        hb_list_add( pv->list, *buf_in );+        *buf_in = NULL;+    }+     *buf_out = NULL;     while( ( buf = hb_list_item( pv->list, 0 ) ) )     {Index: libhb/sync.c===================================================================--- libhb/sync.c	(revision 1409)+++ libhb/sync.c	(working copy)@@ -284,22 +284,6 @@         return HB_WORK_DONE;     } -    if( hb_thread_has_exited( job->reader ) &&-        !hb_fifo_size( job->fifo_mpeg2 ) &&-        !hb_fifo_size( job->fifo_raw ) )-    {-        pv->done = 1;--        hb_buffer_t * buf_tmp;--       // Drop an empty buffer into our output to ensure that things-       // get flushed all the way out.-        buf_tmp = hb_buffer_init(0); // Empty end buffer-        hb_fifo_push( job->fifo_sync, buf_tmp );--        return HB_WORK_DONE;-    }-     if( !pv->cur && !( pv->cur = hb_fifo_get( job->fifo_raw ) ) )     {         /* We haven't even got a frame yet */@@ -316,6 +300,21 @@     {         hb_buffer_t * buf_tmp; +        if( next->size == 0 )+        {+            // we got the empty buffer that signals end-of-stream+            pv->done = 1;++            hb_buffer_t * buf_tmp = hb_fifo_get( job->fifo_raw );+            hb_buffer_close( &buf_tmp );++           // Drop an empty buffer into our output to ensure that things+           // get flushed all the way out.+            hb_fifo_push( job->fifo_sync, hb_buffer_init( 0 ) );++            return HB_WORK_DONE;+        }+         if( pv->pts_offset == INT64_MIN )         {             /* This is our first frame */