OSDN Git Service

Wait until 4 frames are stashed in the delay_queue before outputting any frames from...
[handbrake-jp/handbrake-jp-git.git] / libhb / encxvid.c
index 6d869ae..b509baf 100644 (file)
@@ -1,7 +1,7 @@
 /* $Id: encxvid.c,v 1.10 2005/03/09 23:28:39 titer Exp $
 
    This file is part of the HandBrake source code.
-   Homepage: <http://handbrake.m0k.org/>.
+   Homepage: <http://handbrake.fr/>.
    It may be used under the terms of the GNU General Public License. */
 
 #include "hb.h"
@@ -131,7 +131,7 @@ void encxvidClose( hb_work_object_t * w )
         hb_log( "encxvid: closing libxvidcore" );
         xvid_encore( pv->xvid, XVID_ENC_DESTROY, NULL, NULL);
     }
-    
+
     free( pv );
     w->private_data = NULL;
 }
@@ -149,6 +149,14 @@ int encxvidWork( hb_work_object_t * w, hb_buffer_t ** buf_in,
     xvid_enc_frame_t frame;
     hb_buffer_t * in = *buf_in, * buf;
 
+    if ( in->size <= 0 )
+    {
+        /* EOF on input - send it downstream & say we're done */
+        *buf_out = in;
+        *buf_in = NULL;
+       return HB_WORK_DONE;
+    }
+
     /* Should be way too large */
     buf = hb_buffer_init( 3 * job->width * job->height / 2 );
     buf->start = in->start;
@@ -186,7 +194,7 @@ int encxvidWork( hb_work_object_t * w, hb_buffer_t ** buf_in,
     frame.quant_inter_matrix = NULL;
 
     buf->size = xvid_encore( pv->xvid, XVID_ENC_ENCODE, &frame, NULL );
-    buf->key = ( frame.out_flags & XVID_KEYFRAME );
+    buf->frametype = ( frame.out_flags & XVID_KEYFRAME ) ? HB_FRAME_KEY : HB_FRAME_REF;
 
     if( !pv->configDone )
     {