diff options
author | Max Kellermann <max@duempel.org> | 2008-08-26 08:27:11 +0200 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2008-08-30 18:45:07 -0700 |
commit | 5afa07de0569e2993532b77581dd03ae04653591 (patch) | |
tree | d6cd9aaedf688a1b37bd0b6989c436b3bd3a3323 /src | |
parent | c7e1a79a6b10f6714db31bb65d17db479b4a69d2 (diff) | |
download | mpd-5afa07de0569e2993532b77581dd03ae04653591.tar.gz mpd-5afa07de0569e2993532b77581dd03ae04653591.tar.xz mpd-5afa07de0569e2993532b77581dd03ae04653591.zip |
aac: moved code to adts_check_frame()
adts_check_frame() checks whether the buffer head is an AAC frame, and
returns the frame length.
Diffstat (limited to 'src')
-rw-r--r-- | src/inputPlugins/aac_plugin.c | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/src/inputPlugins/aac_plugin.c b/src/inputPlugins/aac_plugin.c index 3d6c40fb6..82ebecafc 100644 --- a/src/inputPlugins/aac_plugin.c +++ b/src/inputPlugins/aac_plugin.c @@ -93,6 +93,24 @@ static int adtsSampleRates[] = 16000, 12000, 11025, 8000, 7350, 0, 0, 0 }; +/** + * Check whether the buffer head is an AAC frame, and return the frame + * length. Returns 0 if it is not a frame. + */ +static size_t adts_check_frame(AacBuffer * b) +{ + if (b->bytesIntoBuffer <= 7) + return 0; + + /* check syncword */ + if (!((b->buffer[0] == 0xFF) && ((b->buffer[1] & 0xF6) == 0xF0))) + return 0; + + return (((unsigned int)b->buffer[3] & 0x3) << 11) | + (((unsigned int)b->buffer[4]) << 3) | + (b->buffer[5] >> 5); +} + static void adtsParse(AacBuffer * b, float *length) { unsigned int frames, frameLength; @@ -103,23 +121,14 @@ static void adtsParse(AacBuffer * b, float *length) for (frames = 0;; frames++) { fillAacBuffer(b); - if (b->bytesIntoBuffer > 7) { - /* check syncword */ - if (!((b->buffer[0] == 0xFF) && - ((b->buffer[1] & 0xF6) == 0xF0))) { - break; - } - + frameLength = adts_check_frame(b); + if (frameLength > 0) { if (frames == 0) { sampleRate = adtsSampleRates[(b-> buffer[2] & 0x3c) >> 2]; } - frameLength = ((((unsigned int)b->buffer[3] & 0x3)) - << 11) | (((unsigned int)b->buffer[4]) - << 3) | (b->buffer[5] >> 5); - if (frameLength > b->bytesIntoBuffer) break; |