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; 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 */ /* after some caching, finally some data */
/* adapter gives time */ /* adapter gives time */
timestamp = gst_adapter_prev_timestamp (faac->adapter, &distance); 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); 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; return ret;
/* ERRORS */ /* ERRORS */