aboutsummaryrefslogtreecommitdiffstats
path: root/src/inputPlugins/aac_plugin.c
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-08-26 08:27:11 +0200
committerMax Kellermann <max@duempel.org>2008-08-26 08:27:11 +0200
commitb7ad3e4121e38ff69ee188ae61289e07f0cb1d0f (patch)
tree1618c014330e74a94b41b6822e6cffff4378e64a /src/inputPlugins/aac_plugin.c
parenta3cc928c711f78366eba0a009115ffa0982102ff (diff)
downloadmpd-b7ad3e4121e38ff69ee188ae61289e07f0cb1d0f.tar.gz
mpd-b7ad3e4121e38ff69ee188ae61289e07f0cb1d0f.tar.xz
mpd-b7ad3e4121e38ff69ee188ae61289e07f0cb1d0f.zip
aac: moved code to aac_buffer_shift()
Shifting from the buffer queue is a common operation, and should be provided as a separate function. Move code to aac_buffer_shift() and add a bunch of assertions.
Diffstat (limited to 'src/inputPlugins/aac_plugin.c')
-rw-r--r--src/inputPlugins/aac_plugin.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/inputPlugins/aac_plugin.c b/src/inputPlugins/aac_plugin.c
index 55c211c70..2705e9b80 100644
--- a/src/inputPlugins/aac_plugin.c
+++ b/src/inputPlugins/aac_plugin.c
@@ -37,6 +37,19 @@ typedef struct {
int atEof;
} AacBuffer;
+static void aac_buffer_shift(AacBuffer * b, size_t length)
+{
+ assert(length >= b->bytesConsumed);
+ assert(length <= b->bytesConsumed + b->bytesIntoBuffer);
+
+ memmove(b->buffer, b->buffer + length,
+ b->bytesConsumed + b->bytesIntoBuffer - length);
+
+ length -= b->bytesConsumed;
+ b->bytesConsumed = 0;
+ b->bytesIntoBuffer -= length;
+}
+
static void fillAacBuffer(AacBuffer * b)
{
size_t bread;
@@ -45,13 +58,7 @@ static void fillAacBuffer(AacBuffer * b)
/* buffer already full */
return;
- if (b->bytesConsumed > 0 && b->bytesIntoBuffer > 0) {
- memmove((void *)b->buffer, (void *)(b->buffer +
- b->bytesConsumed),
- b->bytesIntoBuffer);
- }
-
- b->bytesConsumed = 0;
+ aac_buffer_shift(b, b->bytesConsumed);
if (!b->atEof) {
size_t rest = FAAD_MIN_STREAMSIZE * AAC_MAX_CHANNELS -