faac: enforce sync between wrapper view of data and encoder returned data
This commit is contained in:
parent
e2d9bcc22d
commit
2c0dd62abb
@ -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 */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user