gstreamer/ext/flac
Vincent Penquerc'h 3e0134f51f flacdec: avoid timestamp/offset tracking going out of sync
The libFLAC API is callback based, and we must only call it to
output data when we know we have enough input data. For this
reason, a single processing step is done when receiving a buffer.
However, if there were metadata buffers still pending, a step
intended for the first audio frame might end up writing that
leftover metadata. Since a single step is done per buffer, this
will cause every buffer to be written one step late.

This would add some latency (a bufferfull's worth), possibly
lose a buffer when seeking or the like, and also cause timestamp
and offset to be applied to the wrong buffer, as updates to
the "current" segment last_stop (from incoming buffer timestamp)
will be applied to an output buffer originating from the previous
incoming buffer.

This fixes the issue by ensuring that, upon receiving the first
audio frame, processing is done till all metadata is processed,
so the next "single step" done will be for the audio frame. After
this, we should keep to 1 input buffer -> 1 output buffer and so
avoid getting out of sync.

https://bugzilla.gnome.org/show_bug.cgi?id=650960
2011-08-17 13:40:59 +01:00
..
gstflac.c i18n: build fixes: #if -> #ifdef for ENABLE_NLS 2010-03-22 17:26:37 +02:00
gstflacdec.c flacdec: avoid timestamp/offset tracking going out of sync 2011-08-17 13:40:59 +01:00
gstflacdec.h flacdec: Send EOS when seeking after the end of file instead of failing 2011-05-14 11:52:13 +02:00
gstflacenc.c flacenc: Properly interprete the result of strcmp() 2011-04-13 16:17:41 +02:00
gstflacenc.h flacenc: optionally add a seek table 2010-01-08 17:43:37 +01:00
gstflactag.c flactag: Fix possible NULL pointer dereference 2010-06-16 19:28:04 +02:00
gstflactag.h
Makefile.am