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
commitf43e39047dba92860072e53ae322bf444538a09b (patch)
tree6dc65231eaa6409b6176578909a53c238cf9834e /src/inputPlugins/aac_plugin.c
parentb7ad3e4121e38ff69ee188ae61289e07f0cb1d0f (diff)
downloadmpd-f43e39047dba92860072e53ae322bf444538a09b.tar.gz
mpd-f43e39047dba92860072e53ae322bf444538a09b.tar.xz
mpd-f43e39047dba92860072e53ae322bf444538a09b.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/inputPlugins/aac_plugin.c')
-rw-r--r--src/inputPlugins/aac_plugin.c31
1 files changed, 20 insertions, 11 deletions
diff --git a/src/inputPlugins/aac_plugin.c b/src/inputPlugins/aac_plugin.c
index 2705e9b80..9438eb7c6 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;