Skip to content

Commit

Permalink
Merge branch 'zhaoxiu-zeng'
Browse files Browse the repository at this point in the history
  • Loading branch information
toots committed Aug 24, 2014
2 parents e559c95 + cb651f9 commit 8c8e819
Show file tree
Hide file tree
Showing 10 changed files with 196 additions and 766 deletions.
2 changes: 1 addition & 1 deletion Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ ACLOCAL_AMFLAGS = -I m4
CFLAGS = @CFLAGS@ -funroll-loops -fno-exceptions -Wall -O2 -fsigned-char

lib_LTLIBRARIES = libshine.la
libshine_la_SOURCES = src/lib/bitstream.c src/lib/formatbits.c src/lib/huffman.c \
libshine_la_SOURCES = src/lib/bitstream.c src/lib/huffman.c \
src/lib/l3bitstream.c src/lib/l3loop.c src/lib/l3mdct.c \
src/lib/l3subband.c src/lib/layer3.c src/lib/reservoir.c \
src/lib/tables.c
Expand Down
38 changes: 32 additions & 6 deletions src/bin/wave.c
Original file line number Diff line number Diff line change
Expand Up @@ -176,9 +176,33 @@ unsigned char wave_open(const char *fname, wave_t *wave, shine_config_t *config,

void swap_buffer(int16_t *sample_buffer, int length)
{
int i;
for (i=0; i<length; i++)
sample_buffer[i] = bswap_16(sample_buffer[i]);
int16_t *end = sample_buffer + length;

if (length >= 2 * sizeof(long) / sizeof(int16_t)) {
const unsigned long mask = (~0UL / 0xffff) * 0xff; /* 0x00ff00ff or 0x00ff00ff00ff00ff */
unsigned long *long_ptr = (unsigned long *)((unsigned long)sample_buffer & -sizeof(long));

/* make sample_buffer aligned on word boundary */
if ((int16_t *)long_ptr != sample_buffer) {
long_ptr++;
do {
register uint16_t tmp = *sample_buffer++;
sample_buffer[-1] = bswap_16(tmp);
} while (sample_buffer != (int16_t *)long_ptr);
}

while ((int16_t *)(long_ptr + 1) <= end) {
register unsigned long tmp = *long_ptr++;
long_ptr[-1] = ((tmp & mask) << 8) | ((tmp >> 8) & mask);
}

sample_buffer = (int16_t *)long_ptr;
}

while (sample_buffer < end) {
register uint16_t tmp = *sample_buffer++;
sample_buffer[-1] = bswap_16(tmp);
}
}
#endif

Expand All @@ -194,13 +218,15 @@ int read_samples(int16_t *sample_buffer, int frame_size, FILE *file)

samples_read = fread(sample_buffer,sizeof(int16_t),frame_size, file);

if(samples_read<frame_size && samples_read>0) /* Pad sample with zero's */
while(samples_read<frame_size) sample_buffer[samples_read++] = 0;

#ifdef SHINE_BIG_ENDIAN
swap_buffer(sample_buffer, samples_read);
#endif

if(samples_read<frame_size && samples_read>0) { /* Pad sample with zero's */
memset(sample_buffer + samples_read, 0, (frame_size - samples_read) * sizeof(int16_t));
samples_read = frame_size;
}

return samples_read;
}

Expand Down
19 changes: 14 additions & 5 deletions src/lib/bitstream.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,12 @@ void shine_putbits(bitstream_t *bs, unsigned int val, unsigned int N)
{
#ifdef DEBUG
if (N > 32)
printf("Cannot read or write more than %d bits at a time.\n", 32);
printf("Cannot write more than 32 bits at a time.\n");
if (N < 32 && (val >> N) != 0)
printf("Upper bits (higher than %d) are not all zeros.\n", N);
#endif
if (N < 32)
val &= ((1UL << N) - 1);

if (bs->cache_bits >= N) {
if (bs->cache_bits > N) {
bs->cache_bits -= N;
bs->cache |= val << bs->cache_bits;
} else {
Expand All @@ -66,6 +66,15 @@ void shine_putbits(bitstream_t *bs, unsigned int val, unsigned int N)
#endif
bs->data_position += sizeof(unsigned int);
bs->cache_bits = 32 - N;
bs->cache = val << bs->cache_bits;
if (N != 0)
bs->cache = val << bs->cache_bits;
else
bs->cache = 0;
}
}

int shine_get_bits_count(bitstream_t *bs)
{
return bs->data_position * 8 + 32 - bs->cache_bits;
}

1 change: 1 addition & 0 deletions src/lib/bitstream.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,6 @@ typedef struct bit_stream_struc {
void shine_open_bit_stream(bitstream_t *bs,const int size);
void shine_close_bit_stream(bitstream_t *bs);
void shine_putbits(bitstream_t *bs,unsigned int val, unsigned int N);
int shine_get_bits_count(bitstream_t *bs);

#endif
Loading

0 comments on commit 8c8e819

Please sign in to comment.