Mercurial > audlegacy-plugins
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 */
