return obuf;
}
-static hb_buffer_t* Flush(hb_work_object_t *w, hb_buffer_t *bufin)
+static void Flush(hb_work_object_t *w, hb_buffer_list_t * list)
{
- hb_buffer_t *bufout = NULL, *buf = NULL, *b = NULL;
- while ((b = Encode(w)))
+ hb_buffer_t *buf = Encode(w);
+ while (buf)
{
- if (bufout == NULL)
- {
- bufout = b;
- }
- else
- {
- buf->next = b;
- }
- buf = b;
- }
-
- // add the eof marker to the end of our buf chain
- if (buf != NULL)
- {
- buf->next = bufin;
+ hb_buffer_list_append(list, buf);
+ buf = Encode(w);
}
- else
- {
- bufout = bufin;
- }
- return bufout;
}
/***********************************************************************
hb_buffer_t **buf_out)
{
hb_work_private_t *pv = w->private_data;
- hb_buffer_t * in = *buf_in;
- hb_buffer_t *buf;
+ hb_buffer_t * in = *buf_in;
+ hb_buffer_t * buf;
+ hb_buffer_list_t list;
- *buf_in = NULL;
+ hb_buffer_list_clear(&list);
if (in->s.flags & HB_BUF_FLAG_EOF)
{
- // EOF on input. Finish encoding what we have buffered then send
- // it & the eof downstream.
+ /* EOF on input - send it downstream & say we're done */
pv->input_done = 1;
- *buf_out = Flush(w, in);
+ Flush(w, &list);
+ hb_buffer_list_append(&list, hb_buffer_eof_init());
+ *buf_out = hb_buffer_list_clear(&list);
return HB_WORK_DONE;
}
{
pv->first_pts = in->s.start;
}
- hb_list_add(pv->list, in);
- *buf_out = buf = Encode(w);
+ hb_list_add(pv->list, in);
+ *buf_in = NULL;
- while (buf != NULL)
+ buf = Encode(w);
+ while (buf)
{
- buf->next = Encode(w);
- buf = buf->next;
+ hb_buffer_list_append(&list, buf);
+ buf = Encode(w);
}
+ *buf_out = hb_buffer_list_clear(&list);
return HB_WORK_OK;
}