diff src/aac/libfaad2/bits.c @ 691:e6c5fdae6e88 trunk

[svn] - oh yes, commit mplayer patches as well
author nenolod
date Tue, 20 Feb 2007 06:38:03 -0800
parents 1d8b08df98c3
children f1b6f1b2cdb3
line wrap: on
line diff
--- a/src/aac/libfaad2/bits.c	Tue Feb 20 06:31:29 2007 -0800
+++ b/src/aac/libfaad2/bits.c	Tue Feb 20 06:38:03 2007 -0800
@@ -1,6 +1,6 @@
 /*
 ** FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
-** Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
+** Copyright (C) 2003-2004 M. Bakker, Ahead Software AG, http://www.nero.com
 **  
 ** This program is free software; you can redistribute it and/or modify
 ** it under the terms of the GNU General Public License as published by
@@ -19,21 +19,17 @@
 ** Any non-GPL usage of this software or parts of this software is strictly
 ** forbidden.
 **
-** Software using this code must display the following message visibly in or
-** on each copy of the software:
-** "FAAD2 AAC/HE-AAC/HE-AACv2/DRM decoder (c) Nero AG, www.nero.com"
-** in, for example, the about-box or help/startup screen.
+** Commercial non-GPL licensing of this software is possible.
+** For more info contact Ahead Software through Mpeg4AAClicense@nero.com.
 **
-** Commercial non-GPL licensing of this software is possible.
-** For more info contact Nero AG through Mpeg4AAClicense@nero.com.
-**
-** $Id: bits.c,v 1.42 2006/07/07 12:35:24 sur Exp $
+** $Id: bits.c,v 1.39 2004/09/04 14:56:27 menno Exp $
 **/
 
 #include "common.h"
 #include "structs.h"
 
 #include <stdlib.h>
+#include <string.h>
 #include "bits.h"
 
 /* initialize buffer, call once before first getbits or showbits */
@@ -44,38 +40,25 @@
     if (ld == NULL)
         return;
 
-    // useless
-    //memset(ld, 0, sizeof(bitfile));
+    memset(ld, 0, sizeof(bitfile));
 
     if (buffer_size == 0 || _buffer == NULL)
     {
         ld->error = 1;
+        ld->no_more_reading = 1;
         return;
     }
 
-    ld->buffer = _buffer;
+    ld->buffer = faad_malloc((buffer_size+12)*sizeof(uint8_t));
+    memset(ld->buffer, 0, (buffer_size+12)*sizeof(uint8_t));
+    memcpy(ld->buffer, _buffer, buffer_size*sizeof(uint8_t));
 
     ld->buffer_size = buffer_size;
-    ld->bytes_left  = buffer_size;
 
-    if (ld->bytes_left >= 4)
-    {
-        tmp = getdword((uint32_t*)ld->buffer);
-        ld->bytes_left -= 4;
-    } else {
-        tmp = getdword_n((uint32_t*)ld->buffer, ld->bytes_left);
-        ld->bytes_left = 0;
-    }
+    tmp = getdword((uint32_t*)ld->buffer);
     ld->bufa = tmp;
 
-    if (ld->bytes_left >= 4)
-    {
-        tmp = getdword((uint32_t*)ld->buffer + 1);
-        ld->bytes_left -= 4;
-    } else {
-        tmp = getdword_n((uint32_t*)ld->buffer + 1, ld->bytes_left);
-        ld->bytes_left = 0;
-    }
+    tmp = getdword((uint32_t*)ld->buffer + 1);
     ld->bufb = tmp;
 
     ld->start = (uint32_t*)ld->buffer;
@@ -83,12 +66,21 @@
 
     ld->bits_left = 32;
 
+    ld->bytes_used = 0;
+    ld->no_more_reading = 0;
     ld->error = 0;
 }
 
 void faad_endbits(bitfile *ld)
 {
-    // void
+    if (ld)
+    {
+        if (ld->buffer)
+        {
+            faad_free(ld->buffer);
+            ld->buffer = NULL;
+        }
+    }
 }
 
 uint32_t faad_get_processed_bits(bitfile *ld)
@@ -98,12 +90,12 @@
 
 uint8_t faad_byte_align(bitfile *ld)
 {
-    int remainder = (32 - ld->bits_left) & 0x7;
+    uint8_t remainder = (uint8_t)((32 - ld->bits_left) % 8);
 
     if (remainder)
     {
         faad_flushbits(ld, 8 - remainder);
-        return (uint8_t)(8 - remainder);
+        return (8 - remainder);
     }
     return 0;
 }
@@ -113,22 +105,20 @@
     uint32_t tmp;
 
     ld->bufa = ld->bufb;
-    if (ld->bytes_left >= 4)
+    if (ld->no_more_reading == 0)
     {
         tmp = getdword(ld->tail);
-        ld->bytes_left -= 4;
+        ld->tail++;
     } else {
-        tmp = getdword_n(ld->tail, ld->bytes_left);
-        ld->bytes_left = 0;
+        tmp = 0;
     }
     ld->bufb = tmp;
-    ld->tail++;
     ld->bits_left += (32 - bits);
-    //ld->bytes_left -= 4;
-//    if (ld->bytes_left == 0)
-//        ld->no_more_reading = 1;
-//    if (ld->bytes_left < 0)
-//        ld->error = 1;
+    ld->bytes_used += 4;
+    if (ld->bytes_used == ld->buffer_size)
+        ld->no_more_reading = 1;
+    if (ld->bytes_used > ld->buffer_size)
+        ld->error = 1;
 }
 
 /* rewind to beginning */
@@ -136,79 +126,30 @@
 {
     uint32_t tmp;
 
-    ld->bytes_left = ld->buffer_size;
-
-    if (ld->bytes_left >= 4)
-    {
-        tmp = getdword((uint32_t*)&ld->start[0]);
-        ld->bytes_left -= 4;
-    } else {
-        tmp = getdword_n((uint32_t*)&ld->start[0], ld->bytes_left);
-        ld->bytes_left = 0;
-    }
+    tmp = ld->start[0];
+#ifndef ARCH_IS_BIG_ENDIAN
+    BSWAP(tmp);
+#endif
     ld->bufa = tmp;
 
-    if (ld->bytes_left >= 4)
-    {
-        tmp = getdword((uint32_t*)&ld->start[1]);
-        ld->bytes_left -= 4;
-    } else {
-        tmp = getdword_n((uint32_t*)&ld->start[1], ld->bytes_left);
-        ld->bytes_left = 0;
-    }
+    tmp = ld->start[1];
+#ifndef ARCH_IS_BIG_ENDIAN
+    BSWAP(tmp);
+#endif
     ld->bufb = tmp;
-
     ld->bits_left = 32;
     ld->tail = &ld->start[2];
-}
-
-/* reset to a certain point */
-void faad_resetbits(bitfile *ld, int bits)
-{
-    uint32_t tmp;
-    int words = bits >> 5;
-    int remainder = bits & 0x1F;
-
-    ld->bytes_left = ld->buffer_size - words*4;
-
-    if (ld->bytes_left >= 4)
-    {
-        tmp = getdword(&ld->start[words]);
-        ld->bytes_left -= 4;
-    } else {
-        tmp = getdword_n(&ld->start[words], ld->bytes_left);
-        ld->bytes_left = 0;
-    }
-    ld->bufa = tmp;
-
-    if (ld->bytes_left >= 4)
-    {
-        tmp = getdword(&ld->start[words+1]);
-        ld->bytes_left -= 4;
-    } else {
-        tmp = getdword_n(&ld->start[words+1], ld->bytes_left);
-        ld->bytes_left = 0;
-    }
-    ld->bufb = tmp;
-
-    ld->bits_left = 32 - remainder;
-    ld->tail = &ld->start[words+2];
-
-    /* recheck for reading too many bytes */
-    ld->error = 0;
-//    if (ld->bytes_left == 0)
-//        ld->no_more_reading = 1;
-//    if (ld->bytes_left < 0)
-//        ld->error = 1;
+    ld->bytes_used = 0;
+    ld->no_more_reading = 0;
 }
 
 uint8_t *faad_getbitbuffer(bitfile *ld, uint32_t bits
                        DEBUGDEC)
 {
-    int i;
-    unsigned int temp;
-    int bytes = bits >> 3;
-    int remainder = bits & 0x7;
+    uint16_t i;
+    uint8_t temp;
+    uint16_t bytes = (uint16_t)bits / 8;
+    uint8_t remainder = (uint8_t)bits % 8;
 
     uint8_t *buffer = (uint8_t*)faad_malloc((bytes+1)*sizeof(uint8_t));
 
@@ -219,9 +160,9 @@
 
     if (remainder)
     {
-        temp = faad_getbits(ld, remainder DEBUGVAR(print,var,dbg)) << (8-remainder);
+        temp = (uint8_t)faad_getbits(ld, remainder DEBUGVAR(print,var,dbg)) << (8-remainder);
 
-        buffer[bytes] = (uint8_t)temp;
+        buffer[bytes] = temp;
     }
 
     return buffer;
@@ -266,8 +207,7 @@
     if (ld->bits_left == 0)
         ld->bits_left = 32;
 
-    ld->bytes_left = ld->buffer_size;
+    ld->bytes_used = 0;
+    ld->no_more_reading = 0;
     ld->error = 0;
 }
-
-/* EOF */