fix and detect differences between faad2 1.1 and 2.0

git-svn-id: https://svn.musicpd.org/mpd/trunk@459 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
Warren Dukes
2004-03-25 01:08:13 +00:00
parent 63a62a4514
commit 1de1bfe314
4 changed files with 119 additions and 15 deletions

View File

@@ -210,6 +210,7 @@ float getAacFloatTotalTime(char * file) {
unsigned long sampleRate;
unsigned char channels;
FILE * fp = fopen(file,"r");
size_t bread;
if(fp==NULL) return -1;
@@ -223,12 +224,13 @@ float getAacFloatTotalTime(char * file) {
faacDecSetConfiguration(decoder,config);
fillAacBuffer(&b);
if(faacDecInit(decoder,b.buffer,b.bytesIntoBuffer,
&sampleRate,&channels) >= 0 &&
sampleRate > 0 && channels > 0)
{
length = 0;
}
#ifdef HAVE_FAAD_BUFLEN_FUNCS
bread = faacDecInit(decoder,b.buffer,b.bytesIntoBuffer,
&sampleRate,&channels);
#else
bread = faacDecInit(decoder,b.buffer,&sampleRate,&channels);
#endif
if(bread >= 0 && sampleRate > 0 && channels > 0) length = 0;
faacDecClose(decoder);
}
@@ -291,9 +293,14 @@ int aac_decode(Buffer * cb, AudioFormat * af, DecoderControl * dc) {
faacDecSetConfiguration(decoder,config);
fillAacBuffer(&b);
if((bread = faacDecInit(decoder,b.buffer,b.bytesIntoBuffer,
&sampleRate,&channels)) < 0)
{
#ifdef HAVE_FAAD_BUFLEN_FUNCS
bread = faacDecInit(decoder,b.buffer,b.bytesIntoBuffer,
&sampleRate,&channels);
#else
bread = faacDecInit(decoder,b.buffer,&sampleRate,&channels);
#endif
if(bread < 0) {
ERROR("Error not a AAC stream.\n");
faacDecClose(decoder);
fclose(b.infile);
@@ -317,8 +324,12 @@ int aac_decode(Buffer * cb, AudioFormat * af, DecoderControl * dc) {
break;
}
#ifdef HAVE_FAAD_BUFLEN_FUNCS
sampleBuffer = faacDecDecode(decoder,&frameInfo,b.buffer,
b.bytesIntoBuffer);
#else
sampleBuffer = faacDecDecode(decoder,&frameInfo,b.buffer);
#endif
if(frameInfo.error > 0) {
ERROR("error decoding AAC file: %s\n",dc->file);
@@ -328,9 +339,13 @@ int aac_decode(Buffer * cb, AudioFormat * af, DecoderControl * dc) {
break;
}
#ifdef HAVE_FAACDECFRAMEINFO_SAMPLERATE
sampleRate = frameInfo.samplerate;
#endif
if(dc->start) {
af->channels = frameInfo.channels;
af->sampleRate = frameInfo.samplerate;
af->sampleRate = sampleRate;
dc->state = DECODE_STATE_DECODE;
dc->start = 0;
}
@@ -341,10 +356,10 @@ int aac_decode(Buffer * cb, AudioFormat * af, DecoderControl * dc) {
if(sampleCount>0) {
bitRate = frameInfo.bytesconsumed*8.0*
frameInfo.channels*frameInfo.samplerate/
frameInfo.channels*sampleRate/
frameInfo.samples/1024+0.5;
time+= (float)(frameInfo.samples)/frameInfo.channels/
frameInfo.samplerate;
sampleRate;
}
sampleBufferLen = sampleCount*2;

View File

@@ -44,12 +44,24 @@ int mp4_getAACTrack(mp4ff_t *infile) {
for (i = 0; i < numTracks; i++) {
unsigned char *buff = NULL;
int buff_size = 0;
#ifdef HAVE_MP4AUDIOSPECIFICCONFIG
mp4AudioSpecificConfig mp4ASC;
#else
unsigned long dummy1_32;
unsigned char dummy2_8, dummy3_8, dummy4_8, dummy5_8, dummy6_8,
dummy7_8, dummy8_8;
#endif
mp4ff_get_decoder_config(infile, i, &buff, &buff_size);
if (buff) {
#ifdef HAVE_MP4AUDIOSPECIFICCONFIG
rc = AudioSpecificConfig(buff, buff_size, &mp4ASC);
#else
rc = AudioSpecificConfig(buff, &dummy1_32, &dummy2_8,
&dummy3_8, &dummy4_8, &dummy5_8,
&dummy6_8, &dummy7_8, &dummy8_8);
#endif
free(buff);
if (rc < 0) continue;
return i;
@@ -220,8 +232,12 @@ int mp4_decode(Buffer * cb, AudioFormat * af, DecoderControl * dc) {
continue;
}
#ifdef HAVE_FAAD_BUFLEN_FUNCS
sampleBuffer = faacDecDecode(decoder,&frameInfo,mp4Buffer,
mp4BufferSize);
#else
sampleBuffer = faacDecDecode(decoder,&frameInfo,mp4Buffer);
#endif
if(mp4Buffer) free(mp4Buffer);
if(frameInfo.error > 0) {
@@ -234,9 +250,11 @@ int mp4_decode(Buffer * cb, AudioFormat * af, DecoderControl * dc) {
if(dc->start) {
channels = frameInfo.channels;
#ifdef HAVE_FAACDECFRAMEINFO_SAMPLERATE
scale = frameInfo.samplerate;
#endif
af->sampleRate = scale;
af->channels = frameInfo.channels;
af->sampleRate = frameInfo.samplerate;
dc->state = DECODE_STATE_DECODE;
dc->start = 0;
}

View File

@@ -15,9 +15,16 @@ typedef unsigned __int64 uint64_t;
#else
#include "../../config.h"
#ifdef HAVE_STDINT_H
#include <stdint.h>
#else
#ifdef HAVE_INTTYPES_H
#include <inttypes.h>
#endif
#endif
#endif
#endif