diff options
-rw-r--r-- | configure.ac | 18 | ||||
-rw-r--r-- | src/Makefile.am | 5 | ||||
-rw-r--r-- | src/inputPlugins/mp4_plugin.c | 55 |
3 files changed, 38 insertions, 40 deletions
diff --git a/configure.ac b/configure.ac index 7ea6039c3..3d08665ae 100644 --- a/configure.ac +++ b/configure.ac @@ -7,6 +7,8 @@ AM_INIT_AUTOMAKE($PACKAGE_NAME, $PACKAGE_VERSION) AC_SUBST(MPD_LIBS) AC_SUBST(MPD_CFLAGS) +AC_SUBST(MP4FF_LIB) +AC_SUBST(MP4FF_SUBDIR) AC_PROG_CC AC_PROG_INSTALL @@ -357,6 +359,8 @@ if test x$enable_mpc = xyes; then CPPFLAGS=$oldcppflags fi +MP4FF_SUBDIR="" + if test x$enable_aac = xyes; then if test "x$faad_libraries" != "x" ; then FAAD_LIBS="-L$faad_libraries" @@ -366,7 +370,7 @@ if test x$enable_aac = xyes; then FAAD_LIBS="-L$libdir" fi - FAAD_LIBS="$FAAD_LIBS -lfaad -lmp4ff" + FAAD_LIBS="$FAAD_LIBS -lfaad" if test "x$faad_includes" != "x" ; then FAAD_CFLAGS="-I$faad_includes" @@ -383,7 +387,6 @@ if test x$enable_aac = xyes; then LIBS="$LIBS $MPD_LIBS $FAAD_LIBS" CPPFLAGS=$CFLAGS AC_CHECK_HEADER(faad.h,,enable_aac=no) - AC_CHECK_HEADER(mp4ff.h,,enable_aac=no) if test x$enable_aac = xyes; then AC_CHECK_DECL(FAAD2_VERSION,,enable_aac=no,[#include <faad.h>]) fi @@ -391,17 +394,14 @@ if test x$enable_aac = xyes; then AC_CHECK_DECL(faacDecInit2,,enable_aac=no,[#include <faad.h>]) fi if test x$enable_aac = xyes; then - AC_CHECK_LIB(faad,faacDecInit2,[MPD_LIBS="$MPD_LIBS $FAAD_LIBS";MPD_CFLAGS="$MPD_CFLAGS $FAAD_CFLAGS"],enable_aac=no) + AC_CHECK_LIB(faad,faacDecInit2,[MPD_LIBS="$MPD_LIBS $FAAD_LIBS";MPD_CFLAGS="$MPD_CFLAGS $FAAD_CFLAGS";MP4FF_SUBDIR="mp4ff";MP4FF_LIB="mp4ff/libmp4ff.la"],enable_aac=no) if test x$enable_aac = xno; then enable_aac=yes - AC_CHECK_LIB(faad,NeAACDecInit2,[MPD_LIBS="$MPD_LIBS $FAAD_LIBS";MPD_CFLAGS="$MPD_CFLAGS $FAAD_CFLAGS"],enable_aac=no) + AC_CHECK_LIB(faad,NeAACDecInit2,[MPD_LIBS="$MPD_LIBS $FAAD_LIBS";MPD_CFLAGS="$MPD_CFLAGS $FAAD_CFLAGS";MP4FF_SUBDIR="mp4ff";MP4FF_LIB="mp4ff/libmp4ff.la"],enable_aac=no) fi fi if test x$enable_aac = xyes; then - AC_CHECK_LIB(mp4ff,mp4ff_open_read,[MPD_LIBS="$MPD_LIBS $FAAD_LIBS";MPD_CFLAGS="$MPD_CFLAGS $FAAD_CFLAGS"],enable_aac=no) - fi - if test x$enable_aac = xyes; then - AC_MSG_CHECKING(that FAAD2 uses buffer and bufferlen) + AC_MSG_CHECKING(that FAAD2 uses buffer and bufferlen) AC_COMPILE_IFELSE([ #include <faad.h> @@ -636,7 +636,7 @@ if test x$enable_mod = xyes; then fi fi -AC_OUTPUT(doc/Makefile src/Makefile Makefile ) +AC_OUTPUT(src/mp4ff/Makefile doc/Makefile src/Makefile Makefile ) echo "" echo "########### MPD CONFIGURATION ############" diff --git a/src/Makefile.am b/src/Makefile.am index c4d4a6fd3..805403165 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,4 +1,5 @@ bin_PROGRAMS = mpd +SUBDIRS = $(MP4FF_SUBDIR) mpd_audioOutputs = \ audioOutputs/audioOutput_alsa.c \ @@ -115,7 +116,9 @@ mpd_SOURCES = \ mpd_CFLAGS = $(MPD_CFLAGS) -mpd_LDADD = $(MPD_LIBS) +mpd_LDADD = $(MPD_LIBS) $(MP4FF_LIB) + +DIST_SUBDIRS = mp4ff # sparse is a semantic parser # URL: git://www.kernel.org/pub/scm/devel/sparse/sparse.git diff --git a/src/inputPlugins/mp4_plugin.c b/src/inputPlugins/mp4_plugin.c index 0a68dcc98..c13d38b43 100644 --- a/src/inputPlugins/mp4_plugin.c +++ b/src/inputPlugins/mp4_plugin.c @@ -28,12 +28,13 @@ #include "../outputBuffer.h" #include "../decode.h" +#include "../mp4ff/mp4ff.h" + #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <faad.h> -#include <mp4ff.h> /* all code here is either based on or copied from FAAD2's frontend code */ @@ -45,7 +46,7 @@ static int mp4_getAACTrack(mp4ff_t * infile) for (i = 0; i < numTracks; i++) { unsigned char *buff = NULL; - unsigned int *buff_size = 0; + int buff_size = 0; #ifdef HAVE_MP4AUDIOSPECIFICCONFIG mp4AudioSpecificConfig mp4ASC; #else @@ -54,11 +55,11 @@ static int mp4_getAACTrack(mp4ff_t * infile) dummy7_8, dummy8_8; #endif - mp4ff_get_decoder_config(infile, i, &buff, buff_size); + mp4ff_get_decoder_config(infile, i, &buff, &buff_size); if (buff) { #ifdef HAVE_MP4AUDIOSPECIFICCONFIG - rc = AudioSpecificConfig(buff, *buff_size, &mp4ASC); + rc = AudioSpecificConfig(buff, buff_size, &mp4ASC); #else rc = AudioSpecificConfig(buff, &dummy1_32, &dummy2_8, &dummy3_8, &dummy4_8, @@ -87,24 +88,6 @@ static uint32_t mp4_inputStreamSeekCallback(void *inStream, uint64_t position) return seekInputStream((InputStream *) inStream, position, SEEK_SET); } -static faacDecHandle *openConfigureFaad() -{ - faacDecConfigurationPtr config; - faacDecHandle decoder = faacDecOpen(); - - config = faacDecGetCurrentConfiguration(decoder); - config->outputFormat = FAAD_FMT_16BIT; -#ifdef HAVE_FAACDECCONFIGURATION_DOWNMATRIX - config->downMatrix = 1; -#endif -#ifdef HAVE_FAACDECCONFIGURATION_DONTUPSAMPLEIMPLICITSBR - config->dontUpSampleImplicitSBR = 0; -#endif - faacDecSetConfiguration(decoder, config); - - return decoder; -} - static int mp4_decode(OutputBuffer * cb, DecoderControl * dc, char *path) { mp4ff_t *mp4fh; @@ -112,11 +95,12 @@ static int mp4_decode(OutputBuffer * cb, DecoderControl * dc, char *path) int32_t track; float time; int32_t scale; - faacDecHandle *decoder; + faacDecHandle decoder; faacDecFrameInfo frameInfo; + faacDecConfigurationPtr config; unsigned char *mp4Buffer; - unsigned int mp4BufferSize; - uint32_t sampleRate; + int mp4BufferSize; + unsigned long sampleRate; unsigned char channels; long sampleId; long numSamples; @@ -161,7 +145,17 @@ static int mp4_decode(OutputBuffer * cb, DecoderControl * dc, char *path) return -1; } - decoder = openConfigureFaad(); + decoder = faacDecOpen(); + + config = faacDecGetCurrentConfiguration(decoder); + config->outputFormat = FAAD_FMT_16BIT; +#ifdef HAVE_FAACDECCONFIGURATION_DOWNMATRIX + config->downMatrix = 1; +#endif +#ifdef HAVE_FAACDECCONFIGURATION_DONTUPSAMPLEIMPLICITSBR + config->dontUpSampleImplicitSBR = 0; +#endif + faacDecSetConfiguration(decoder, config); dc->audioFormat.bits = 16; @@ -170,8 +164,7 @@ static int mp4_decode(OutputBuffer * cb, DecoderControl * dc, char *path) mp4ff_get_decoder_config(mp4fh, track, &mp4Buffer, &mp4BufferSize); if (faacDecInit2 - (decoder, mp4Buffer, mp4BufferSize, &sampleRate, &channels) - < 0) { + (decoder, mp4Buffer, mp4BufferSize, &sampleRate, &channels) < 0) { ERROR("Error not a AAC stream.\n"); faacDecClose(decoder); mp4ff_close(mp4fh); @@ -321,9 +314,11 @@ static int mp4_decode(OutputBuffer * cb, DecoderControl * dc, char *path) } flushOutputBuffer(cb); - if (dc->stop) + if (dc->stop) { + dc->state = DECODE_STATE_STOP; dc->stop = 0; - dc->state = DECODE_STATE_STOP; + } else + dc->state = DECODE_STATE_STOP; return 0; } |