faac: enforce sync between wrapper view of data and encoder returned data

This commit is contained in:
Mark Nauwelaerts 2009-09-06 11:44:27 +02:00
parent e2d9bcc22d
commit 2c0dd62abb

View file

@ -601,6 +601,13 @@ gst_faac_push_buffers (GstFaac * faac, gboolean force)
break;
}
/* in case encoder returns more data than is expected (which seems possible)
* ignore the extra part */
if (G_UNLIKELY (av == 0 && faac->offset == 0)) {
gst_buffer_unref (outbuf);
continue;
}
/* after some caching, finally some data */
/* adapter gives time */
timestamp = gst_adapter_prev_timestamp (faac->adapter, &distance);
@ -635,6 +642,12 @@ gst_faac_push_buffers (GstFaac * faac, gboolean force)
ret = gst_pad_push (faac->srcpad, outbuf);
}
/* in case encoder returns less than expected, clear our view as well */
if (G_UNLIKELY (force)) {
gst_adapter_clear (faac->adapter);
faac->offset = 0;
}
return ret;
/* ERRORS */