From b2b95cad20846bb3235787c266c1723acf38f971 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 12 Jul 2014 01:33:12 +0200 Subject: DecoderBuffer: add method _need() Move code from the FAAD decoder plugin. --- src/decoder/DecoderBuffer.cxx | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'src/decoder/DecoderBuffer.cxx') diff --git a/src/decoder/DecoderBuffer.cxx b/src/decoder/DecoderBuffer.cxx index b337cbc0b..e26a702b7 100644 --- a/src/decoder/DecoderBuffer.cxx +++ b/src/decoder/DecoderBuffer.cxx @@ -117,21 +117,40 @@ decoder_buffer_fill(DecoderBuffer *buffer) return true; } +static const void * +decoder_buffer_head(const DecoderBuffer *buffer) +{ + return buffer->data + buffer->consumed; +} + size_t decoder_buffer_available(const DecoderBuffer *buffer) { - return buffer->length - buffer->consumed;; + return buffer->length - buffer->consumed; } ConstBuffer decoder_buffer_read(const DecoderBuffer *buffer) { return { - buffer->data + buffer->consumed, - buffer->length - buffer->consumed + decoder_buffer_head(buffer), + decoder_buffer_available(buffer), }; } +ConstBuffer +decoder_buffer_need(DecoderBuffer *buffer, size_t min_size) +{ + while (true) { + const auto available = decoder_buffer_available(buffer); + if (available >= min_size) + return { decoder_buffer_head(buffer), available }; + + if (!decoder_buffer_fill(buffer)) + return nullptr; + } +} + void decoder_buffer_consume(DecoderBuffer *buffer, size_t nbytes) { -- cgit v1.2.3