fix x264cli on streams whose total length is less than the encoder latency.
x264_free( h->thread[i] );
}
}
+
+/****************************************************************************
+ * x264_encoder_delayed_frames:
+ ****************************************************************************/
+int x264_encoder_delayed_frames( x264_t *h )
+{
+ int delayed_frames = 0;
+ int i;
+ for( i=0; i<h->param.i_threads; i++ )
+ delayed_frames += h->thread[i]->b_thread_active;
+ h = h->thread[ h->i_thread_phase % h->param.i_threads ];
+ for( i=0; h->frames.current[i]; i++ )
+ delayed_frames++;
+ for( i=0; h->frames.next[i]; i++ )
+ delayed_frames++;
+ return delayed_frames;
+}
fflush( stderr ); // needed in windows
}
}
- /* Flush delayed B-frames */
- do {
+ /* Flush delayed frames */
+ while( x264_encoder_delayed_frames( h ) )
+ {
i_frame_size = Encode_frame( h, opt->hout, NULL );
if( i_frame_size < 0 )
return -1;
i_file += i_frame_size;
- } while( i_frame_size );
+ }
i_end = x264_mdate();
x264_picture_clean( &pic );
#include <stdarg.h>
-#define X264_BUILD 70
+#define X264_BUILD 71
/* x264_t:
* opaque handler for encoder */
/* x264_encoder_close:
* close an encoder handler */
void x264_encoder_close ( x264_t * );
+/* x264_encoder_delayed_frames:
+ * return the number of currently delayed (buffered) frames
+ * this should be used at the end of the stream, to know when you have all the encoded frames. */
+int x264_encoder_delayed_frames( x264_t * );
#endif