From 2c0dd62abbbacc4deb60f440b27c8912272b48f9 Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Sun, 6 Sep 2009 11:44:27 +0200 Subject: [PATCH] faac: enforce sync between wrapper view of data and encoder returned data --- ext/faac/gstfaac.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/ext/faac/gstfaac.c b/ext/faac/gstfaac.c index 7b81d65847..66fe2b6eb0 100644 --- a/ext/faac/gstfaac.c +++ b/ext/faac/gstfaac.c @@ -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 */