ref: 3355b74f09a966b393fd49c7230e1161ba4bcfaf
parent: 2405cc8d9bf2ce6317d975424776942857b7580d
author: menno <menno>
date: Sun Aug 22 13:48:38 EDT 2004
Build system update XMMS plugin update (now uses mp4ff library) Thanks ciberfred!
--- a/common/mp4ff/Makefile.am
+++ b/common/mp4ff/Makefile.am
@@ -1,12 +1,8 @@
-lib_LTLIBRARIES = libmp4ff.la
+noinst_LIBRARIES = libmp4ff.a
-include_HEADERS = mp4ff.h
+libmp4ff_a_CFLAGS = -DUSE_TAGGING=1
-libmp4ff_la_SOURCES = mp4ff.c mp4atom.c mp4meta.c mp4sample.c mp4util.c \
+libmp4ff_a_SOURCES = mp4ff.c mp4atom.c mp4meta.c mp4sample.c mp4util.c \
mp4tagupdate.c mp4ff.h mp4ffint.h mp4ff_int_types.h \
drms.h drms.c drmstables.h
-
-AM_CFLAGS = -O2 -g -DUSE_TAGGING=1
-LIBTOOL_DEPS =
-LIBS = @MP4FF_LIBS@
--- a/configure.in
+++ b/configure.in
@@ -1,3 +1,12 @@
+dnl
+dnl This is the configure.in for faad2 related to unix creation
+
+dnl - libfaad.so
+dnl - libmp4ff.a (only static for moment)
+dnl - faad
+dnl - xmms input mp4/aac plugin
+dnl - mpeg4ip plugin (broken) -> disable for moment
+
AC_INIT
AC_CONFIG_AUX_DIR(.)
AM_INIT_AUTOMAKE(faad2, 2.0)
@@ -6,9 +15,10 @@
AC_SUBST(LIBTOOL_DEPS)
dnl Checks for programs.
-AC_PROG_CXX
AC_PROG_CC
AC_PROG_CPP
+dnl disable for mpeg4ip plugin
+dnl AC_PROG_CXX
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
@@ -16,11 +26,14 @@
AM_CONFIG_HEADER(config.h)
-AC_ARG_WITH( xmms, [ --with-xmms compile XMMS plugins],WITHXMMS=$withval, WITHXMMS=no)
+AC_ARG_WITH(xmms,[ --with-xmms compile XMMS-1 plugin],
+ WITHXMMS=$withval, WITHXMMS=no)
-AC_ARG_WITH( drm, [ --with-drm compile libfaad with DRM support],WITHDRM=$withval, WITHDRM=no)
+AC_ARG_WITH(drm,[ --with-drm compile libfaad with DRM support],
+ WITHDRM=$withval, WITHDRM=no)
-AC_ARG_WITH( mp4v2, [ --with-mp4v2 compile libmp4v2],WITHMP4V2=$withval, WITHMP4V2=no)
+dnl AC_ARG_WITH(mp4v2,[ --with-mp4v2 compile libmp4v2],
+dnl WITHMP4V2=$withval, WITHMP4V2=no)
dnl Checks for header files required for mp4.h
AC_HEADER_STDC
@@ -67,32 +80,32 @@
AC_CHECK_FUNCS(strsep)
-MY_CHECK_TYPEDEF_FROM_INCLUDE([in_port_t temp],
- [#include <sys/types.h>
- #include <netinet/in.h>], [HAVE_IN_PORT_T])
-MY_CHECK_TYPEDEF_FROM_INCLUDE([socklen_t temp],
- [#include <sys/types.h>
- #include <sys/socket.h>], HAVE_SOCKLEN_T)
-MY_CHECK_TYPEDEF_FROM_INCLUDE([fpos_t foo; foo.__pos = 0;],
- [#include <stdio.h>],
- [HAVE_FPOS_T_POS])
+dnl MY_CHECK_TYPEDEF_FROM_INCLUDE([in_port_t temp],
+dnl [#include <sys/types.h>
+dnl #include <netinet/in.h>], [HAVE_IN_PORT_T])
+dnl MY_CHECK_TYPEDEF_FROM_INCLUDE([socklen_t temp],
+dnl [#include <sys/types.h>
+dnl #include <sys/socket.h>], HAVE_SOCKLEN_T)
+dnl MY_CHECK_TYPEDEF_FROM_INCLUDE([fpos_t foo; foo.__pos = 0;],
+dnl [#include <stdio.h>],
+dnl [HAVE_FPOS_T_POS])
-AC_CHECK_PROG(external_mp4v2, mpeg4ip-config, yes, no)
-AM_CONDITIONAL(WITH_MP4V2, false)
+dnl AC_CHECK_PROG(external_mp4v2, mpeg4ip-config, yes, no)
+dnl AM_CONDITIONAL(WITH_MP4V2, false)
-if test x$external_mp4v2 = xyes; then
- AM_CONDITIONAL(HAVE_MPEG4IP, true)
- MPEG4IP_PLAYER_PLUGIN_DIR=`mpeg4ip-config --player-plugin-dir`
- AC_SUBST(MPEG4IP_PLAYER_PLUGIN_DIR)
- AC_MSG_NOTICE([*** Building with external mp4v2 ***])
-else
- AC_MSG_NOTICE([*** Building with internal mp4v2 ***])
- AM_CONDITIONAL(HAVE_MPEG4IP, false)
- if test x$WITHMP4V2 = xyes; then
- AM_CONDITIONAL(WITH_MP4V2, true)
- fi
-fi
+dnl if test x$external_mp4v2 = xyes; then
+dnl AM_CONDITIONAL(HAVE_MPEG4IP, true)
+dnl MPEG4IP_PLAYER_PLUGIN_DIR=`mpeg4ip-config --player-plugin-dir`
+dnl AC_SUBST(MPEG4IP_PLAYER_PLUGIN_DIR)
+dnl AC_MSG_NOTICE([*** Building with external mp4v2 ***])
+dnl else
+dnl AC_MSG_NOTICE([*** Building with internal mp4v2 ***])
+dnl AM_CONDITIONAL(HAVE_MPEG4IP, false)
+dnl if test x$WITHMP4V2 = xyes; then
+dnl AM_CONDITIONAL(WITH_MP4V2, true)
+dnl fi
+dnl fi
if test x$WITHXMMS = xyes; then
AC_CHECK_PROGS(XMMS_CONFIG, xmms-config,"not_found")
@@ -109,9 +122,9 @@
fi
AM_CONDITIONAL(HAVE_XMMS, true)
- AC_MSG_NOTICE("xmms plugin requires libmp4v2 to be build")
- AM_CONDITIONAL(WITH_MP4V2, true)
- AC_CONFIG_FILES(plugins/xmms/Makefile plugins/xmms/src/Makefile)
+dnl AC_MSG_NOTICE("xmms plugin requires libmp4v2 to be build")
+dnl AM_CONDITIONAL(WITH_MP4V2, true)
+dnl AC_CONFIG_FILES(plugins/xmms/Makefile plugins/xmms/src/Makefile)
else
AC_MSG_NOTICE(no xmms build configured)
AM_CONDITIONAL(HAVE_XMMS, false)
@@ -121,11 +134,15 @@
AC_DEFINE(DRM, 1, [Define if you want to use libfaad together with Digital Radio Mondiale (DRM)])
fi
-AC_CONFIG_FILES(libfaad/Makefile frontend/Makefile common/Makefile plugins/Makefile Makefile )
-
-AC_CONFIG_FILES(plugins/mpeg4ip/Makefile)
-
+AC_CONFIG_FILES(libfaad/Makefile)
+AC_CONFIG_FILES(common/Makefile)
AC_CONFIG_FILES(common/mp4ff/Makefile)
-
+AC_CONFIG_FILES(plugins/Makefile)
+AC_CONFIG_FILES(plugins/xmms/Makefile)
+AC_CONFIG_FILES(plugins/xmms/src/Makefile)
+dnl AC_CONFIG_FILES(plugins/mpeg4ip/Makefile)
AC_CONFIG_FILES(faad2.spec)
+AC_CONFIG_FILES(frontend/Makefile)
+AC_CONFIG_FILES(Makefile)
+
AC_OUTPUT
--- a/frontend/Makefile.am
+++ b/frontend/Makefile.am
@@ -1,13 +1,11 @@
bin_PROGRAMS = faad
-faad_SOURCES = main.c audio.c $(top_srcdir)/common/faad/getopt.c \
- audio.h
-
-AM_CFLAGS = -O2
INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/common/faad \
-I$(top_srcdir)/common/mp4ff
-LDADD = $(top_builddir)/libfaad/libfaad.la \
- $(top_builddir)/common/mp4ff/libmp4ff.la
+faad_LDADD = $(top_builddir)/libfaad/libfaad.la \
+ $(top_builddir)/common/mp4ff/libmp4ff.a
-CCLD = $(CXX)
+faad_SOURCES = main.c \
+ audio.c audio.h \
+ $(top_srcdir)/common/faad/getopt.c
--- a/libfaad/Makefile.am
+++ b/libfaad/Makefile.am
@@ -1,6 +1,9 @@
lib_LTLIBRARIES = libfaad.la
-include_HEADERS = ../include/faad.h
+include_HEADERS = $(top_srcdir)/include/faad.h
+
+libfaad_la_LDFLAGS = -lm
+
libfaad_la_SOURCES = bits.c cfft.c decoder.c drc.c \
drm_dec.c error.c filtbank.c \
ic_predict.c is.c lt_predict.c mdct.c mp4.c ms.c output.c pns.c \
@@ -19,8 +22,4 @@
sbr_qmf_c.h codebook/hcb.h \
codebook/hcb_1.h codebook/hcb_2.h codebook/hcb_3.h codebook/hcb_4.h \
codebook/hcb_5.h codebook/hcb_6.h codebook/hcb_7.h codebook/hcb_8.h \
-codebook/hcb_9.h codebook/hcb_10.h codebook/hcb_11.h codebook/hcb_sf.h
-
-LIBTOOL_DEPS =
-LIBS =
-
+codebook/hcb_9.h codebook/hcb_10.h codebook/hcb_11.h codebook/hcb_sf.h
\ No newline at end of file
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -1,13 +1,5 @@
-if HAVE_MPEG4IP
if HAVE_XMMS
-SUBDIRS = mpeg4ip xmms
-else
-SUBDIRS = mpeg4ip
-endif
-else
-if HAVE_XMMS
SUBDIRS = xmms
else
SUBDIRS =
-endif
endif
--- a/plugins/xmms/ChangeLog
+++ b/plugins/xmms/ChangeLog
@@ -1,3 +1,6 @@
+22 August 2004:
+ * move from libmp4v2 to libmp4ff
+
1 December 2003:
* remove aac plug and merge the aac part with the mp4 part
so now 2 plugins in one :)
--- a/plugins/xmms/INSTALL
+++ b/plugins/xmms/INSTALL
@@ -1,4 +1,2 @@
-ton install the mp4/aac plugin run :
- - autoreconf -vfs && configure
-and install as root with :
- - make install-strip
+the installation of this plugin is provide by the faad2 package.
+add to configure time the option '--with-xmms' and the plugin will be build
\ No newline at end of file
--- a/plugins/xmms/NEWS
+++ b/plugins/xmms/NEWS
@@ -1,3 +1,8 @@
+22 Aout 2004
+------------
+modification du system de compilation, passage de libmp4v2 a libmp4ff
+en static, libfaad en dynamique.
+
1 Decembre 2003
---------------
merge du plugin aac et du plugin mp4. modification des script du projet faad
--- a/plugins/xmms/README
+++ b/plugins/xmms/README
@@ -1,4 +1,4 @@
- xmms-mp4 plugin v0.4
+ xmms-mp4 plugin v0.5
(dynamic version)
"a mp4/aac audio player for xmms"
coded by ciberfred from france
@@ -19,20 +19,5 @@
aac plugin homepage (and more) : http://fondriest.frederic.free.fr/realisations/
IRC : irc.eu.freenode.net (#lamip)
- -------------------------------------------------------------
- !!!!!!!!!! WARNING !!!!!!!!!!!!
-if at the end of some song there is a segfault (xmms going out!),
-this is probably you have an old aac song encoded with an old psytel
-encoder (maybe a 1.x).
-This error is comming from faad2
-To remove this error use psystrip.exe windows program on the file. This maybe
-resolve this problem.
- -------------------------------------------------------------
-
-This plugin was tested with the psytel encoder v2.15 and a nero encoder
-
- -------------------------------------------------------------
-
-
--
-Fr�d�ric Fondriest
+Frederic Fondriest
--- a/plugins/xmms/configure.in
+++ /dev/null
@@ -1,38 +1,0 @@
-dnl configure.in for xmms faad2-2.0 package
-
-AC_INIT(src/libmp4.c)
-AM_INIT_AUTOMAKE(libmp4, 0.4)
-
-dnl save CFLAGS since AC_PROG_CC insert "-g -O2" if CFLAGS is empty
-cflags_save="$CFLAGS"
-
-AM_DISABLE_STATIC
-
-AC_PROG_CC
-AC_PROG_LIBTOOL
-AC_PROG_INSTALL
-
-AC_CHECK_PROGS(XMMS_CONFIG, xmms-config,
- [AC_MSG_ERROR("*** xmms-config not found check PATH or install xmms")])
-
-AC_CHECK_LIB(mp4v2, MP4Create, ,AC_MSG_ERROR(*** libmp4v2 not installed), -lstdc++)
-
-CFLAGS="$cflags_save `xmms-config --cflags`"
-CPPFLAGS="$CPPFLAGS $CFLAGS"
-AC_SUBST(CFLAGS)
-
-AC_CHECK_HEADER(pthread.h,,
- AC_MSG_ERROR(*** pthread headers support not installed or not found))
-AC_CHECK_HEADER(id3.h,,
- AC_MSG_ERROR(*** id3lib headers support not installed or not found))
-AC_CHECK_HEADER(faad.h,,
- AC_MSG_ERROR(*** faad header not installed check your CFLAGS))
-
-AC_OUTPUT(Makefile src/Makefile )
-
-echo ""
-echo "-------==========MP4 & MPEG2/4-AAC decoder configured===========------"
-echo "CFLAGS: $CFLAGS"
-echo "CXXFLAGS: $CXXFLAGS"
-echo "install-dir = `xmms-config --input-plugin-dir`"
-echo ""
--- a/plugins/xmms/src/Makefile.am
+++ b/plugins/xmms/src/Makefile.am
@@ -2,12 +2,11 @@
lib_LTLIBRARIES = libmp4.la
libmp4_la_CFLAGS = `$(XMMS_CONFIG) --cflags` -Wall \
- `$(GTK_CONFIG) --cflags` -DHAVE_GLIB_H=1 \
- -I$(top_srcdir)/include -I$(top_srcdir)/common/mp4v2
+ -I$(top_srcdir)/include -I$(top_srcdir)/common/mp4ff
libmp4_la_LIBADD = $(top_builddir)/libfaad/libfaad.la \
- $(top_builddir)/common/mp4v2/libmp4v2.la
+ $(top_builddir)/common/mp4ff/libmp4ff.a
-libmp4_la_LDFLAGS = -module -avoid-version `$(XMMS_CONFIG) --libs` \
- `$(GTK_CONFIG) --libs` -lpthread -lstdc++
+libmp4_la_LDFLAGS = -module -avoid-version `$(XMMS_CONFIG) --libs` -lpthread
+
libmp4_la_SOURCES = libmp4.c mp4_utils.c aac_utils.c
--- a/plugins/xmms/src/libmp4.c
+++ b/plugins/xmms/src/libmp4.c
@@ -8,8 +8,8 @@
#include <pthread.h>
#include <gtk/gtk.h>
-#include "faad.h"
-#include "mp4.h"
+#include <stdio.h>
+#include <string.h>
#include <xmms/plugin.h>
#include <xmms/util.h>
@@ -16,9 +16,11 @@
#include <xmms/configfile.h>
#include <xmms/titlestring.h>
+#include "neaacdec.h"
+#include "mp4ff.h"
+
#define MP4_DESCRIPTION "MP4 & MPEG2/4-AAC audio player - 1.2.x"
-#define MP4_VERSION "ver. 0.4 - 24 November 2003"
-#define LIBMP4V2_VERSION "-faad2-version"
+#define MP4_VERSION "ver. 0.5-faad2-version - 22 August 2004"
#define MP4_ABOUT "Written by ciberfred"
#define BUFFER_SIZE FAAD_MIN_STREAMSIZE*64
@@ -76,6 +78,8 @@
static int seekPosition = -1;
+extern int getAACTrack(mp4ff_t *infile);
+
InputPlugin *get_iplugin_info(void)
{
return(&mp4_ip);
@@ -112,11 +116,11 @@
gchar* extention;
extention = strrchr(filename, '.');
- if (extention &&
- !strcasecmp(extention, ".mp4") || // official extention
- !strcasecmp(extention, ".m4a") || // Apple mp4 extention
- !strcasecmp(extention, ".aac") // old MPEG2/4-AAC extention
- ){
+ if(extention &&
+ (!strncasecmp(extention, ".mp4", 4) || // official extention
+ !strncasecmp(extention, ".m4a", 4) || // Apple mp4 extention
+ !strncasecmp(extention, ".aac", 4) // old MPEG2/4-AAC extention
+ )){
return (1);
}
}
@@ -131,7 +135,6 @@
return;
aboutbox = xmms_show_message("About MP4 AAC player plugin",
"libfaad2-" FAAD2_VERSION "\n"
- "libmp4v2-" LIBMP4V2_VERSION "\n"
"plugin version: " MP4_VERSION "\n"
MP4_ABOUT,
"Ok", FALSE, NULL, NULL);
@@ -169,61 +172,121 @@
if(mp4cfg.file_type == FILE_MP4)
getMP4info(filename);
else if(mp4cfg.file_type == FILE_AAC)
+ /*
+ * check the id3tagv2
+ */
;
}
+uint32_t read_callback(void *user_data, void *buffer, uint32_t length)
+{
+ return fread(buffer, 1, length, (FILE*)user_data);
+}
+
+uint32_t seek_callback(void *user_data, uint64_t position)
+{
+ return fseek((FILE*)user_data, position, SEEK_SET);
+}
+
+
static void *mp4Decode(void *args)
{
- MP4FileHandle mp4file;
+ FILE* mp4file;
+ unsigned char header[10] = {0};
pthread_mutex_lock(&mutex);
seekPosition = -1;
bPlaying = TRUE;
- if(!(mp4file = MP4Read(args, 0))){
- mp4cfg.file_type = FILE_AAC;
- MP4Close(mp4file);
- }else{
+
+ if(!(mp4file = fopen(args, "rb"))){
+ g_print("MP4!AAC - Can't open file\n");
+ g_free(args);
+ bPlaying = FALSE;
+ pthread_mutex_unlock(&mutex);
+ pthread_exit(NULL);
+
+ }
+ fread(header, 1, 8, mp4file);
+ if(header[4]=='f' &&
+ header[5]=='t' &&
+ header[6]=='y' &&
+ header[7]=='p'){
mp4cfg.file_type = FILE_MP4;
+ }else{
+ mp4cfg.file_type = FILE_AAC;
}
-
- if(mp4cfg.file_type == FILE_MP4){
- // We are reading a MP4 file
+ fseek(mp4file, SEEK_SET, 0);
+ if(mp4cfg.file_type == FILE_MP4){// We are reading a MP4 file
+ mp4ff_t* infile;
gint mp4track;
-
- if((mp4track = getAACTrack(mp4file)) < 0){
- //TODO: check here for others Audio format.....
+
+ mp4ff_callback_t* mp4cb = malloc(sizeof(mp4ff_callback_t));
+ mp4cb->read = read_callback;
+ mp4cb->seek = seek_callback;
+ mp4cb->user_data = mp4file;
+ if(!(infile = mp4ff_open_read(mp4cb))){
+ g_print("MP4 - Can't open file\n");
+ }
+
+ if((mp4track = getAACTrack(infile)) < 0){
+ /*
+ * TODO: check here for others Audio format.....
+ *
+ */
g_print("Unsupported Audio track type\n");
g_free(args);
- MP4Close(mp4file);
+ fclose(mp4file);
bPlaying = FALSE;
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
- }else{
- faacDecHandle decoder;
+ }else{
+ NeAACDecHandle decoder;
unsigned char *buffer = NULL;
guint bufferSize = 0;
gulong samplerate;
guchar channels;
guint avgBitrate;
- MP4Duration duration;
- gulong msDuration;
- MP4SampleId numSamples;
- MP4SampleId sampleID = 1;
+ //MP4Duration duration;
+ int msDuration;
+ int numSamples;
+ int sampleID = 0;
+ unsigned int framesize;
+ mp4AudioSpecificConfig mp4ASC;
- decoder = faacDecOpen();
- MP4GetTrackESConfiguration(mp4file, mp4track, &buffer, &bufferSize);
- if(faacDecInit2(decoder, buffer, bufferSize, &samplerate, &channels)<0){
+ decoder = NeAACDecOpen();
+ mp4ff_get_decoder_config(infile, mp4track, &buffer, &bufferSize);
+ if(NeAACDecInit2(decoder, buffer, bufferSize, &samplerate, &channels)<0){
goto end;
}
- g_free(buffer);
+ if(buffer){
+ framesize = 1024;
+ if(NeAACDecAudioSpecificConfig(buffer, bufferSize, &mp4ASC) >= 0){
+ if(mp4ASC.frameLengthFlag == 1) framesize = 960;
+ if(mp4ASC.sbr_present_flag == 1) framesize *= 2;
+ }
+ g_free(buffer);
+ }
if(channels == 0){
g_print("Number of Channels not supported\n");
- goto end;
+ goto end;
}
- duration = MP4GetTrackDuration(mp4file, mp4track);
- msDuration = MP4ConvertFromTrackDuration(mp4file, mp4track, duration,
- MP4_MSECS_TIME_SCALE);
- numSamples = MP4GetTrackNumberOfSamples(mp4file, mp4track);
+
+ //duration = MP4GetTrackDuration(mp4file, mp4track);
+ //msDuration = MP4ConvertFromTrackDuration(mp4file, mp4track,
+ // duration,MP4_MSECS_TIME_SCALE);
+
+ //msDuration = mp4ff_get_track_duration(infile, mp4track);
+ //printf("%d\n", msDuration);
+
+ //numSamples = MP4GetTrackNumberOfSamples(mp4file, mp4track);
+ numSamples = mp4ff_num_samples(infile, mp4track);
+ {
+ float f = 1024.0;
+ if(mp4ASC.sbr_present_flag == 1)
+ f = f * 2.0;
+ msDuration = ((float)numSamples*(float)(f-1.0)/
+ (float)samplerate)*1000;
+ }
mp4_ip.output->open_audio(FMT_S16_NE, samplerate, channels);
mp4_ip.output->flush(0);
mp4_ip.set_info(args, msDuration, -1, samplerate/1000, channels);
@@ -235,6 +298,7 @@
gint rc;
if(seekPosition!=-1){
+ /*
duration = MP4ConvertToTrackDuration(mp4file,
mp4track,
seekPosition*1000,
@@ -242,11 +306,12 @@
sampleID = MP4GetSampleIdFromTime(mp4file, mp4track, duration, 0);
mp4_ip.output->flush(seekPosition*1000);
seekPosition = -1;
+ */
}
buffer=NULL;
bufferSize=0;
- rc = MP4ReadSample(mp4file, mp4track, sampleID++, &buffer, &bufferSize,
- NULL, NULL, NULL, NULL);
+ rc = mp4ff_read_sample(infile, mp4track, sampleID++,
+ &buffer, &bufferSize);
//g_print("%d/%d\n", sampleID-1, numSamples);
if((rc==0) || (buffer== NULL)){
g_print("MP4: read error\n");
@@ -255,11 +320,11 @@
mp4_ip.output->buffer_free();
goto end;
}else{
- sampleBuffer = faacDecDecode(decoder, &frameInfo, buffer, bufferSize);
+ sampleBuffer = NeAACDecDecode(decoder, &frameInfo, buffer, bufferSize);
if(frameInfo.error > 0){
g_print("MP4: %s\n",
faacDecGetErrorMessage(frameInfo.error));
- goto end;
+ goto end;
}
if(buffer){
g_free(buffer); buffer=NULL; bufferSize=0;
@@ -273,10 +338,9 @@
frameInfo.samples<<1,
sampleBuffer);
mp4_ip.output->write_audio(sampleBuffer, frameInfo.samples<<1);
- }
-
- if(sampleID > numSamples){
+ if(sampleID > numSamples){
break;
+ }
}
while(bPlaying && mp4_ip.output->buffer_playing() && mp4_ip.output->buffer_free()){
xmms_usleep(10000);
@@ -284,16 +348,18 @@
end:
mp4_ip.output->close_audio();
g_free(args);
- faacDecClose(decoder);
- MP4Close(mp4file);
+ NeAACDecClose(decoder);
+ mp4ff_close(infile);
+ if(mp4cb) g_free(mp4cb);
bPlaying = FALSE;
+ fclose(mp4file);
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
- } else{
+ }else{
// WE ARE READING AN AAC FILE
FILE *file = NULL;
- faacDecHandle decoder = 0;
+ NeAACDecHandle decoder = 0;
guchar *buffer = 0;
gulong bufferconsumed = 0;
gulong samplerate = 0;
@@ -303,7 +369,7 @@
gchar *temp = g_strdup(args);
gchar *ext = strrchr(temp, '.');
gchar *xmmstitle = NULL;
- faacDecConfigurationPtr config;
+ NeAACDecConfigurationPtr config;
if((file = fopen(args, "rb")) == 0){
g_print("AAC: can't find file %s\n", args);
@@ -311,7 +377,7 @@
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
- if((decoder = faacDecOpen()) == NULL){
+ if((decoder = NeAACDecOpen()) == NULL){
g_print("AAC: Open Decoder Error\n");
fclose(file);
bPlaying = FALSE;
@@ -318,14 +384,14 @@
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
- config = faacDecGetCurrentConfiguration(decoder);
+ config = NeAACDecGetCurrentConfiguration(decoder);
config->useOldADTSFormat = 0;
- faacDecSetConfiguration(decoder, config);
+ NeAACDecSetConfiguration(decoder, config);
if((buffer = g_malloc(BUFFER_SIZE)) == NULL){
g_print("AAC: error g_malloc\n");
fclose(file);
bPlaying = FALSE;
- faacDecClose(decoder);
+ NeAACDecClose(decoder);
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
@@ -334,7 +400,7 @@
g_free(buffer);
fclose(file);
bPlaying = FALSE;
- faacDecClose(decoder);
+ NeAACDecClose(decoder);
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
@@ -360,7 +426,7 @@
if(input->track_name) g_free(input->track_name);
if(input->genre) g_free(input->genre);
g_free(input);
- bufferconsumed = faacDecInit(decoder,
+ bufferconsumed = NeAACDecInit(decoder,
buffer,
buffervalid,
&samplerate,
@@ -389,7 +455,7 @@
mp4_ip.output->flush(0);
while(bPlaying && buffervalid > 0){
- faacDecFrameInfo finfo;
+ NeAACDecFrameInfo finfo;
unsigned long samplesdecoded;
char* sample_buffer = NULL;
/*
@@ -408,24 +474,24 @@
BUFFER_SIZE-buffervalid, file);
bufferconsumed = 0;
}
- sample_buffer = faacDecDecode(decoder, &finfo, buffer, buffervalid);
+ sample_buffer = NeAACDecDecode(decoder, &finfo, buffer, buffervalid);
if(finfo.error){
- config = faacDecGetCurrentConfiguration(decoder);
+ config = NeAACDecGetCurrentConfiguration(decoder);
if(config->useOldADTSFormat != 1){
- faacDecClose(decoder);
- decoder = faacDecOpen();
- config = faacDecGetCurrentConfiguration(decoder);
+ NeAACDecClose(decoder);
+ decoder = NeAACDecOpen();
+ config = NeAACDecGetCurrentConfiguration(decoder);
config->useOldADTSFormat = 1;
- faacDecSetConfiguration(decoder, config);
+ NeAACDecSetConfiguration(decoder, config);
finfo.bytesconsumed=0;
finfo.samples = 0;
- faacDecInit(decoder,
+ NeAACDecInit(decoder,
buffer,
buffervalid,
&samplerate,
&channels);
}else{
- g_print("FAAD2 Warning %s\n", faacDecGetErrorMessage(finfo.error));
+ g_print("FAAD2 Warning %s\n", NeAACDecGetErrorMessage(finfo.error));
buffervalid = 0;
}
}
@@ -450,7 +516,7 @@
mp4_ip.output->close_audio();
bPlaying = FALSE;
g_free(buffer);
- faacDecClose(decoder);
+ NeAACDecClose(decoder);
g_free(xmmstitle);
fclose(file);
seekPosition = -1;
--- a/plugins/xmms/src/mp4_utils.c
+++ b/plugins/xmms/src/mp4_utils.c
@@ -1,9 +1,11 @@
/*
-** some function for MP4 file based on libmp4v2 from mpeg4ip project
+ * some functions for MP4 files
*/
-#include <mp4.h>
-#include <faad.h>
+#include "mp4ff.h"
+#include "faad.h"
+
+#include <stdio.h>
const char *mp4AudioNames[]=
{
"MPEG-1 Audio Layers 1,2 or 3",
@@ -15,17 +17,6 @@
0
};
-const u_int8_t mp4AudioTypes[] =
- {
- MP4_MPEG1_AUDIO_TYPE, // 0x6B
- MP4_MPEG2_AUDIO_TYPE, // 0x69
- MP4_MPEG2_AAC_MAIN_AUDIO_TYPE, // 0x66
- MP4_MPEG2_AAC_LC_AUDIO_TYPE, // 0x67
- MP4_MPEG2_AAC_SSR_AUDIO_TYPE, // 0x68
- MP4_MPEG4_AUDIO_TYPE, // 0x40
- 0
- };
-
/* MPEG-4 Audio types from 14496-3 Table 1.5.1 (from mp4.h)*/
const char *mpeg4AudioNames[]=
{
@@ -44,72 +35,38 @@
"MPEG-4 Algorithmic Synthesis and Audio FX profile"
};
-int getAACTrack(MP4FileHandle file)
-{
- int numTracks = MP4GetNumberOfTracks(file, NULL, 0);
- int i=0;
+/*
+ * find AAC track
+*/
- for(i=0;i<numTracks;i++){
- MP4TrackId trackID = MP4FindTrackId(file, i, NULL, 0);
- const char *trackType = MP4GetTrackType(file, trackID);
- if(!strcmp(trackType, MP4_AUDIO_TRACK_TYPE)){//we found audio track !
- int j=0;
- u_int8_t audiotype = MP4GetTrackAudioType(file, trackID);
- while(mp4AudioTypes[j]){ // what kind of audio is ?
- if(mp4AudioTypes[j] == audiotype){
- if(mp4AudioTypes[j] == MP4_MPEG4_AUDIO_TYPE){//MPEG4 audio ok
- audiotype = MP4GetTrackAudioMpeg4Type(file, trackID);
- printf("%d-%s\n", audiotype, mpeg4AudioNames[audiotype]);
- return (trackID);
- }
- else{
- printf("%s\n", mp4AudioNames[j]);
- if (mp4AudioTypes[j]== MP4_MPEG2_AAC_LC_AUDIO_TYPE ||
- mp4AudioTypes[j]== MP4_MPEG2_AAC_MAIN_AUDIO_TYPE ||
- mp4AudioTypes[j]== MP4_MPEG2_AAC_SSR_AUDIO_TYPE)
- return(trackID);
- return(-1);
- }
- }
- j++;
- }
- }
- }
- return(-1);
-}
-
-int getAudioTrack(MP4FileHandle file)
+int getAACTrack(mp4ff_t *infile)
{
- int numTracks = MP4GetNumberOfTracks(file, NULL,0);
- int i=0;
+ int i, rc;
+ int numTracks = mp4ff_total_tracks(infile);
- for(i=0;i<numTracks;i++){
- MP4TrackId trackID = MP4FindTrackId(file, i, NULL, 0);
- const char *trackType = MP4GetTrackType(file, trackID);
- if(!strcmp(trackType, MP4_AUDIO_TRACK_TYPE)){
- return(trackID);
- }
- }
- return(-1);
-}
+ printf("total-tracks: %d\n", numTracks);
+ for(i=0; i<numTracks; i++){
+ unsigned char* buff = 0;
+ int buff_size = 0;
+ mp4AudioSpecificConfig mp4ASC;
-int getVideoTrack(MP4FileHandle file)
-{
- int numTracks = MP4GetNumberOfTracks(file, NULL, 0);
- int i=0;
-
- for(i=0;i<numTracks; i++){
- MP4TrackId trackID = MP4FindTrackId(file, i, NULL, 0);
- const char *trackType = MP4GetTrackType(file, trackID);
- if(!strcmp(trackType, MP4_VIDEO_TRACK_TYPE)){
- return (trackID);
+ printf("testing-track: %d\n", i);
+ mp4ff_get_decoder_config(infile, i, &buff, &buff_size);
+ if(buff){
+ rc = NeAACDecAudioSpecificConfig(buff, buff_size, &mp4ASC);
+ free(buff);
+ if(rc < 0)
+ continue;
+ return(i);
}
}
return(-1);
}
+
void getMP4info(char* file)
{
+ /*
MP4FileHandle mp4file;
MP4Duration trackDuration;
int numTracks;
@@ -148,4 +105,5 @@
printf("\n");
}
MP4Close(mp4file);
+ */
}