summaryrefslogtreecommitdiffstats
path: root/libhb
diff options
context:
space:
mode:
Diffstat (limited to 'libhb')
-rw-r--r--libhb/enclame.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/libhb/enclame.c b/libhb/enclame.c
index 8f4defcc5..027aa3add 100644
--- a/libhb/enclame.c
+++ b/libhb/enclame.c
@@ -28,6 +28,7 @@ struct hb_work_private_s
/* LAME handle */
lame_global_flags * lame;
+ int done;
unsigned long input_samples;
unsigned long output_bytes;
uint8_t * buf;
@@ -138,14 +139,33 @@ int enclameWork( hb_work_object_t * w, hb_buffer_t ** buf_in,
hb_buffer_t ** buf_out )
{
hb_work_private_t * pv = w->private_data;
+ hb_buffer_t * in = *buf_in;
hb_buffer_t * buf;
if ( (*buf_in)->size <= 0 )
{
/* EOF on input - send it downstream & say we're done */
- *buf_out = *buf_in;
- *buf_in = NULL;
- return HB_WORK_DONE;
+ if ( pv->done )
+ {
+ *buf_out = *buf_in;
+ *buf_in = NULL;
+ return HB_WORK_DONE;
+ }
+ else
+ {
+ pv->done = 1;
+ hb_fifo_push( w->fifo_in, in);
+ *buf_in = NULL;
+
+ buf = hb_buffer_init( pv->output_bytes );
+ buf->size = lame_encode_flush( pv->lame, buf->data, LAME_MAXMP3BUFFER );
+ if( buf->size <= 0 )
+ {
+ hb_buffer_close( &buf );
+ }
+ *buf_out = buf;
+ return HB_WORK_OK;
+ }
}
hb_list_add( pv->list, *buf_in );