Only trivial stuff.
/*
- * Copyright (C) 2006 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2007 Andre Noll <maan@systemlinux.org>
*
* 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
#include <neaacdec.h>
NeAACDecHandle aac_open(void);
-ssize_t aac_find_esds(unsigned char *buf, size_t buflen, size_t *skip);
+int aac_find_esds(unsigned char *buf, size_t buflen, size_t *skip,
+ unsigned long *decoder_length);
ssize_t aac_find_entry_point(unsigned char *buf, size_t buflen, size_t *skip);
static inline unsigned aac_read_int32(unsigned char *buf)
NeAACDecHandle handle;
unsigned char *umap = (unsigned char *) map;
- ret = aac_find_esds(umap, numbytes, &skip);
+ ret = aac_find_esds(umap, numbytes, &skip, &decoder_len);
if (ret < 0)
goto out;
- decoder_len = ret;
handle = aac_open();
ret = -E_AACDEC_INIT;
if (NeAACDecInit(handle, umap + skip, decoder_len, &rate, &channels))
/*
- * Copyright (C) 2006 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2006-2007 Andre Noll <maan@systemlinux.org>
*
* 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
return h;
};
-static int aac_read_decoder_length(unsigned char *buf, int *description_len)
+static unsigned long aac_read_decoder_length(unsigned char *buf, int *description_len)
{
uint8_t b;
uint8_t numBytes = 0;
- uint32_t length = 0;
+ unsigned long length = 0;
do {
b = buf[numBytes];
* \param buflen length of \a buf
* \param skip Upon succesful return, this contains the offset in \a buf where
* the decoder config starts.
+ * \param decoder_length result pointer that is filled in with the length of
+ * the decoder configuration on success.
*
- * \return The length of the decoder configuration
+ * \return positive on success, negative on errors
*/
-ssize_t aac_find_esds(unsigned char *buf, size_t buflen, size_t *skip)
+int aac_find_esds(unsigned char *buf, size_t buflen, size_t *skip,
+ unsigned long *decoder_length)
{
size_t i;
for (i = 0; i + 4 < buflen; i++) {
unsigned char *p = buf + i;
- int decoder_length, description_len;
+ int description_len;
if (p[0] != 'e' || p[1] != 's' || p[2] != 'd' || p[3] != 's')
continue;
continue;
i++;
p = buf + i;
- decoder_length = aac_read_decoder_length(p, &description_len);
- PARA_INFO_LOG("decoder length: %d\n", decoder_length);
+ *decoder_length = aac_read_decoder_length(p, &description_len);
+ PARA_INFO_LOG("decoder length: %lu\n", *decoder_length);
i += description_len;
*skip = i;
- return decoder_length;
+ return 1;
}
return -E_ESDS;
}
* return value of aac_find_esds(). Used to call the right aacdec
* init function
*/
- int decoder_length;
+ unsigned long decoder_length;
/** number of times the decoder returned an error */
unsigned error_count;
/** number of bytes already consumed from the imput stream */
if (!padd->initialized) {
unsigned long rate = 0;
unsigned char channels = 0;
- padd->decoder_length = aac_find_esds(inbuf, len, &skip);
- PARA_INFO_LOG("decoder len: %d\n", padd->decoder_length);
- if (padd->decoder_length < 0) {
+ ret = aac_find_esds(inbuf, len, &skip, &padd->decoder_length);
+ if (ret < 0) {
+ PARA_INFO_LOG("%s\n", PARA_STRERROR(-ret));
ret = NeAACDecInit(padd->handle, inbuf,
len, &rate, &channels);
PARA_INFO_LOG("decoder init: %d\n", ret);
}
consumed = ret;
} else {
+ PARA_INFO_LOG("decoder len: %lu\n",
+ padd->decoder_length);
consumed += skip;
p = inbuf + consumed;
ret = -E_AACDEC_INIT;
};
-static inline void write_int16_host_endian(char *buf, int16_t val)
+static inline void write_int16_host_endian(char *buf, int val)
{
#ifdef WORDS_BIGENDIAN
*buf = val >> 8;
mad_synth_frame(&pmd->synth, &pmd->frame);
for (i = 0; i < pmd->synth.pcm.length; i++) {
- signed short s = MAD_TO_SHORT(pmd->synth.pcm.samples[0][i]);
+ int s = MAD_TO_SHORT(pmd->synth.pcm.samples[0][i]);
write_int16_host_endian(fn->buf + fn->loaded, s);
fn->loaded += 2;
if (MAD_NCHANNELS(&pmd->frame.header) == 2) { /* stereo */