~ft/aacdec

bfa3eb8e2b42be7b4c7bc0c5be7edc32735d2d3a — menno 18 years ago 502d0c4
Fixes in linux compilation
M bootstrap => bootstrap +2 -2
@@ 2,7 2,7 @@

aclocal -I .
autoheader
libtoolize --automake
automake --add-missing
libtoolize --automake --copy
automake --add-missing --copy
autoconf
echo "Ready to run ./configure"

M common/mp4v2/Makefile.am => common/mp4v2/Makefile.am +4 -2
@@ 4,6 4,8 @@ AM_CXXFLAGS = -Wall

lib_LTLIBRARIES = libmp4v2.la

include_HEADERS = mp4.h mpeg4ip.h

libmp4v2_la_SOURCES = \
    atom_co64.cpp \
    atom_cprt.cpp \


@@ 100,7 102,6 @@ libmp4v2_la_SOURCES = \
    mp4file.h \
    mp4file_io.cpp \
    mp4info.cpp \
    mp4meta.h \
    mp4meta.cpp \
    mp4property.cpp \
    mp4property.h \


@@ 115,7 116,8 @@ libmp4v2_la_SOURCES = \
    qosqualifiers.cpp \
    qosqualifiers.h \
    rtphint.cpp \
    rtphint.h 
    rtphint.h \
    systems.h

EXTRA_DIST = API_CHANGES \
    INTERNALS \

M configure.in => configure.in +34 -6
@@ 1,5 1,5 @@
AC_INIT()
AM_INIT_AUTOMAKE(faad,2.0)
AM_INIT_AUTOMAKE(faad2,2.0)

AM_PROG_LIBTOOL
AC_SUBST(LIBTOOL_DEPS)


@@ 15,6 15,7 @@ AC_PROG_RANLIB

AM_CONFIG_HEADER(config.h)

AC_ARG_WITH( xmms,[    --with-xmms  compile XMMS plugin],WITHXMMS=$withval, WITHXMMS=no)

dnl Checks for header files required for mp4.h
AC_HEADER_STDC


@@ 22,6 23,8 @@ AC_CHECK_HEADERS(stdint.h inttypes.h)
AC_CHECK_HEADERS(mathf.h)
AC_CHECK_HEADERS(float.h)
AC_CHECK_FUNCS(strchr memcpy)
AC_CHECK_HEADERS(sys/time.h)
AC_HEADER_TIME

AC_C_INLINE
AC_C_BIGENDIAN


@@ 69,11 72,36 @@ if test x$external_mp4v2 = xyes; then
  AC_SUBST(MPEG4IP_PLAYER_PLUGIN_DIR)
else
  AM_CONDITIONAL(HAVE_MPEG4IP, false)
  AC_OUTPUT_COMMANDS(,[cd common/mp4v2; aclocal -I .; autoheader; libtoolize --automake; automake --add-missing; autoconf; cd -])
fi

AC_OUTPUT_COMMANDS(,[cd plugins/xmms; libtoolize; aclocal; autoconf; automake --add-missing; cd -])

AC_CONFIG_SUBDIRS(common/mp4v2 plugins/xmms)
if test x$WITHXMMS = xyes; then
  xmmsplugin=yes
  AC_CHECK_PROGS(XMMS_CONFIG, xmms-config,"no_found")
  if test "$XMMS_CONFIG" = "no_found"; then
   AC_MSG_ERROR("*** xmms-config not found - omitting xmms plugin build")
   xmmsplugin=no
   AM_CONDITIONAL(HAVE_XMMS, false)
  else
   AM_CONDITIONAL(HAVE_XMMS, true)
  fi
else
 AM_CONDITIONAL(HAVE_XMMS, false)
 xmmsplugin=no
fi

AC_OUTPUT(libfaad/Makefile common/Makefile  frontend/Makefile Makefile plugins/Makefile plugins/mpeg4ip/Makefile)
if test x$external_mp4v2 = xyes; then
  if test x$xmmsplugin = xyes; then
    AC_CONFIG_SUBDIRS(common/mp4v2 plugins/xmms)
    AC_OUTPUT(libfaad/Makefile common/Makefile frontend/Makefile Makefile plugins/Makefile plugins/mpeg4ip/Makefile plugins/xmms/Makefile plugins/xmms/src/Makefile)
  else
    AC_CONFIG_SUBDIRS(common/mp4v2)
    AC_OUTPUT(libfaad/Makefile common/Makefile  frontend/Makefile Makefile plugins/Makefile plugins/mpeg4ip/Makefile)
  fi
else
  if test x$xmmsplugin = xyes; then
    AC_CONFIG_SUBDIRS(plugins/xmms)
    AC_OUTPUT(libfaad/Makefile frontend/Makefile common/Makefile Makefile plugins/Makefile  common/mp4v2/Makefile plugins/xmms/Makefile plugins/xmms/src/Makefile)
  else
    AC_OUTPUT(libfaad/Makefile frontend/Makefile common/Makefile Makefile plugins/Makefile common/mp4v2/Makefile)
  fi
fi

M frontend/Makefile.am => frontend/Makefile.am +2 -1
@@ 1,6 1,7 @@
bin_PROGRAMS = faad

faad_SOURCES = main.c audio.c $(top_srcdir)/common/faad/getopt.c
faad_SOURCES = main.c audio.c $(top_srcdir)/common/faad/getopt.c \
   audio.h

AM_CFLAGS = -O2
if HAVE_MPEG4IP

M libfaad/Makefile.am => libfaad/Makefile.am +6 -6
@@ 7,13 7,12 @@ ic_predict.c is.c lt_predict.c mdct.c mp4.c ms.c output.c pns.c \
pulse.c specrec.c syntax.c tns.c hcr.c huffman.c \
rvlc.c ssr.c ssr_fb.c ssr_ipqf.c common.c \
sbr_dct.c sbr_e_nf.c sbr_fbt.c sbr_hfadj.c sbr_hfgen.c \
sbr_huff.c sbr_qmf.c sbr_syntax.c sbr_tf_grid.c sbr_dec.c 

libfaad_la_INCLUDES = analysis.h bits.h cfft.h cfft_tab.h common.h \
sbr_huff.c sbr_qmf.c sbr_syntax.c sbr_tf_grid.c sbr_dec.c \
analysis.h bits.h cfft.h cfft_tab.h common.h \
decoder.h dither.h drc.h error.h fixed.h filtbank.h \
huffman.h ic_predict.h iq_table.h is.h kbd_win.h lt_predict.h mdct.h mp4.h \
ms.h output.h pns.h pulse.h rvlc.h sine_win.h ssr.h ssr_fb.h ssr_ipqf.h \
ssr_win.h specrec.h syntax.h tns.h \
ssr_win.h specrec.h syntax.h structs.h tns.h \
sbr_dct.h sbr_dec.h sbr_e_nf.h sbr_fbt.h sbr_hfadj.h sbr_hfgen.h \
sbr_huff.h sbr_noise.h sbr_qmf.h sbr_syntax.h sbr_tf_grid.h \
codebook/hcb.h \


@@ 22,5 21,6 @@ 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


AM_CFLAGS = -O2
AM_LDFLAGS = -lm
AM_CFLAGS = -O2 -g
LDFLAGS = -lm


M plugins/Makefile.am => plugins/Makefile.am +10 -2
@@ 1,5 1,13 @@
if HAVE_MPEG4IP
SUBDIRS = mpeg4ip xmms
  if HAVE_XMMS
    SUBDIRS = mpeg4ip xmms
  else
    SUBDIRS = mpeg4ip
  endif
else
SUBDIRS = xmms
  if HAVE_XMMS
    SUBDIRS = xmms
  else
    SUBDIRS =
  endif
endif

M plugins/xmms/src/Makefile.am => plugins/xmms/src/Makefile.am +4 -6
@@ 1,12 1,10 @@
libdir = `xmms-config --input-plugin-dir`

lib_LTLIBRARIES = libaac.la

if USE_STATIC_FAAD2
INCLUDES = -I$(top_srcdir)/libfaad-include
libaac_la_LDFLAGS = -module -avoid-version `xmms-config --libs` -lpthread -lid3 -lstdc++ -lz
libaac_la_LIBADD = $(top_srcdir)/libfaad/libfaad.la
  INCLUDES = -I../../../include
  libaac_la_LDFLAGS = -module -avoid-version `xmms-config --libs` -lpthread -lid3 -lstdc++ -lz
  libaac_la_LIBADD = ../../../libfaad/libfaad.la
else
libaac_la_LDFLAGS = -module -avoid-version `xmms-config --libs` -lpthread -lfaad -lz -lid3 -lstdc++
  libaac_la_LDFLAGS = -module -avoid-version `xmms-config --libs` -lpthread -lfaad -lz -lid3 -lstdc++
endif
libaac_la_SOURCES = libaac.c id3.cpp dialog_gtk1.c aac_utils.c

M plugins/xmms/src/libaac.c => plugins/xmms/src/libaac.c +103 -103
@@ 1,7 1,7 @@
/*
**			  AAC plugin for XMMS 1.2.7
**				by ciberfred
**		------------------------------------------------
**            AAC plugin for XMMS 1.2.7
**              by ciberfred
**      ------------------------------------------------
**
** need libfaad2     package from http://www.audiocoding.com
** and id3lib-3.8.x  package from http://id3lib.sourceforge.org


@@ 22,29 22,29 @@
#include "xmms/titlestring.h"
#include "aac_utils.h"

#define AAC_DESCRIPTION	"MPEG2/4 AAC player - 1.2.7"
#define AAC_VERSION	"AAC player - 15 June 2003 (v0.4)"
#define AAC_ABOUT	"Writen from scratch by ciberfred from France\n"
#define AAC_DESCRIPTION "MPEG2/4 AAC player - 1.2.7"
#define AAC_VERSION "AAC player - 15 June 2003 (v0.4)"
#define AAC_ABOUT   "Writen from scratch by ciberfred from France\n"
#define PATH2CONFIGFILE "/.xmms/Plugins/aacConfig.txt"
#define BUFFER_SIZE	FAAD_MIN_STREAMSIZE*64

static void	aac_init(void);
static void	aac_play(char*);
static void	aac_stop(void);
static void	aac_pause(short);
static int	aac_getTime(void);
static void	aac_seek(int);
static void	aac_cleanup(void);
static void	aac_about(void);
static void	aac_configuration(void);
static void	*aac_decode(void*);

static void	aac_getSongInfo(char*);
static int	aac_isFile(char*);

extern void	readID3tag(char*);
#define BUFFER_SIZE FAAD_MIN_STREAMSIZE*64

static void aac_init(void);
static void aac_play(char*);
static void aac_stop(void);
static void aac_pause(short);
static int  aac_getTime(void);
static void aac_seek(int);
static void aac_cleanup(void);
static void aac_about(void);
static void aac_configuration(void);
static void *aac_decode(void*);

static void aac_getSongInfo(char*);
static int  aac_isFile(char*);

extern void readID3tag(char*);
extern GtkWidget *createDialogInfo(void);
extern void	clearWindowDatas(void);
extern void clearWindowDatas(void);

static GtkWidget *infoBoxWindow = NULL;
extern char *title, *artist, *album, *track, *genre;


@@ 57,39 57,39 @@ extern char *title, *artist, *album, *track, *genre;

InputPlugin aac_ip =
  {
    0,		// handle
    0,		// filename
    0,      // handle
    0,      // filename
    AAC_DESCRIPTION,// description
    aac_init,	// init_func
    aac_about,	// aboutbox
    aac_configuration,		// configuration
    aac_isFile,	// ???
    0,		// scan dir
    aac_play,	// when play button
    aac_stop,	// when stop
    aac_pause,	// when pause
    aac_seek,	// when seek
    0,		// set equalizer
    aac_getTime,	// ???
    0,		// get volume
    0,		// set volume
    aac_cleanup,	// the cleanup function :)
    0,		// obsolete (???)
    0,		// send visualisation data
    0,		// set player window info
    0,		// set song title text
    0,	// get song title text to show on Playlist
    aac_init,   // init_func
    aac_about,  // aboutbox
    aac_configuration,      // configuration
    aac_isFile, // ???
    0,      // scan dir
    aac_play,   // when play button
    aac_stop,   // when stop
    aac_pause,  // when pause
    aac_seek,   // when seek
    0,      // set equalizer
    aac_getTime,    // ???
    0,      // get volume
    0,      // set volume
    aac_cleanup,    // the cleanup function :)
    0,      // obsolete (???)
    0,      // send visualisation data
    0,      // set player window info
    0,      // set song title text
    0,  // get song title text to show on Playlist
    aac_getSongInfo,// file info box
    0		// pointer to outputPlugin
    0       // pointer to outputPlugin
  };
static gboolean 	bPlaying = FALSE;
static gboolean		bOutputOpen = FALSE;
static pthread_t	decodeThread;
static gboolean		bSeek = FALSE;
static gint		seekPosition = -1; // track position
static pthread_mutex_t	mutex = PTHREAD_MUTEX_INITIALIZER;
static unsigned long	*positionTable = 0;
int			aacType;
static gboolean     bPlaying = FALSE;
static gboolean     bOutputOpen = FALSE;
static pthread_t    decodeThread;
static gboolean     bSeek = FALSE;
static gint     seekPosition = -1; // track position
static pthread_mutex_t  mutex = PTHREAD_MUTEX_INITIALIZER;
static unsigned long    *positionTable = 0;
int         aacType;
/*****************************************************************************/

InputPlugin *get_iplugin_info(void)


@@ 100,7 100,7 @@ InputPlugin *get_iplugin_info(void)

static void aac_init(void)
{
  ConfigFile*	cfg;
  ConfigFile*   cfg;

  memset(&decodeThread, 0, sizeof(pthread_t));
  cfg = xmms_cfg_open_default_file();


@@ 169,19 169,19 @@ static void aac_getSongInfo(char *filename)

static void *aac_decode(void *args)
{
  char 			*filename = args;
  char			*xmmstitle=NULL;
  FILE 			*file = NULL;
  faacDecHandle		decoder = 0;
  unsigned char		*buffer = 0;
  unsigned long		bufferconsumed = 0;
  unsigned long		samplerate = 0;
  unsigned long		lenght=0;
  char			channels;
  unsigned long		buffervalid = 0;
  TitleInput		*input;
  char 			*temp = g_strdup(filename);
  char			*ext  = strrchr(temp, '.');
  char          *filename = args;
  char          *xmmstitle=NULL;
  FILE          *file = NULL;
  faacDecHandle     decoder = 0;
  unsigned char     *buffer = 0;
  unsigned long     bufferconsumed = 0;
  unsigned long     samplerate = 0;
  unsigned long     lenght=0;
  char          channels;
  unsigned long     buffervalid = 0;
  TitleInput        *input;
  char          *temp = g_strdup(filename);
  char          *ext  = strrchr(temp, '.');

  pthread_mutex_lock(&mutex);
  seekPosition=-1;


@@ 197,7 197,7 @@ static void *aac_decode(void *args)
      g_print("erreur getAAC\n");
      fclose(file);
      if(positionTable){
	free(positionTable); positionTable=0;
    free(positionTable); positionTable=0;
      }
      pthread_mutex_unlock(&mutex);
      pthread_exit(NULL);


@@ 250,16 250,16 @@ static void *aac_decode(void *args)
    if(bSeek){
      checkADTSForSeeking(file, &positionTable, &lenght);
      if((aacType = getAacInfo(file)) ==-1){
	printf("erreur getAAC\n");
	g_free(buffer); buffer=0;
	faacDecClose(decoder);
	fclose(file);
	aac_ip.output->close_audio();
	if(positionTable){
	  free(positionTable); positionTable=0;
	}
	pthread_mutex_unlock(&mutex);
	pthread_exit(NULL);
    printf("erreur getAAC\n");
    g_free(buffer); buffer=0;
    faacDecClose(decoder);
    fclose(file);
    aac_ip.output->close_audio();
    if(positionTable){
      free(positionTable); positionTable=0;
    }
    pthread_mutex_unlock(&mutex);
    pthread_exit(NULL);
      }
      printf("AAC-%s Type\n", aacType?"MPEG2":"MPEG4");
    }


@@ 275,7 275,7 @@ static void *aac_decode(void *args)
  g_free(input->genre);
  g_free(input);

  bufferconsumed = faacDecInit(decoder, buffer, &samplerate, &channels);
  bufferconsumed = faacDecInit(decoder, buffer, buffervalid, &samplerate, &channels);
  if((bOutputOpen = aac_ip.output->open_audio(FMT_S16_NE, samplerate, channels)) == FALSE){
    printf("Output Error\n");
    g_free(buffer); buffer=0;


@@ 293,11 293,11 @@ static void *aac_decode(void *args)
  }else{
    aac_ip.set_info(xmmstitle, -1, -1, samplerate, channels);
  }
  aac_ip.output->flush(0);  
  aac_ip.output->flush(0);
  while(bPlaying && buffervalid > 0){
    faacDecFrameInfo	finfo;
    unsigned long		samplesdecoded;
    char			*sample_buffer = NULL;
    faacDecFrameInfo    finfo;
    unsigned long       samplesdecoded;
    char            *sample_buffer = NULL;

    if(bSeek && seekPosition!=-1){
      fseek(file, positionTable[seekPosition], SEEK_SET);


@@ 312,7 312,7 @@ static void *aac_decode(void *args)
      buffervalid += fread(&buffer[buffervalid], 1, BUFFER_SIZE-buffervalid, file);
      bufferconsumed = 0;
    }
    sample_buffer = faacDecDecode(decoder, &finfo, buffer);
    sample_buffer = faacDecDecode(decoder, &finfo, buffer, buffervalid);
    if(finfo.error){
      buffervalid = 0;
      printf("FAAD2 Error %s\n", faacDecGetErrorMessage(finfo.error));


@@ 359,19 359,19 @@ static int aac_isFile(char *filename)

static void aac_about(void)
{
  static GtkWidget	*aboutbox;
  static GtkWidget  *aboutbox;

  if(aboutbox!=NULL)
    return;

  aboutbox = xmms_show_message(
		 "About MPEG2/4-AAC plugin",
		 "decoding engine : FAAD2 team\n"
		 "Plugin coder : ciberfred",
 	         "Ok", FALSE, NULL, NULL);
         "About MPEG2/4-AAC plugin",
         "decoding engine : FAAD2 team\n"
         "Plugin coder : ciberfred",
             "Ok", FALSE, NULL, NULL);
  gtk_signal_connect(GTK_OBJECT(aboutbox), "destroy",
		     GTK_SIGNAL_FUNC(gtk_widget_destroyed),
		     &aboutbox);
             GTK_SIGNAL_FUNC(gtk_widget_destroyed),
             &aboutbox);
}




@@ 379,7 379,7 @@ static  GtkWidget *checkbutton;
static  GtkWidget *window;
static void aac_configuration_save(GtkWidget *widget, gpointer data)
{
  ConfigFile	*cfg;
  ConfigFile    *cfg;
  bSeek = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton));
  cfg = xmms_cfg_open_default_file();
  xmms_cfg_write_boolean(cfg, "AAC", "seeking", bSeek);


@@ 387,7 387,7 @@ static void aac_configuration_save(GtkWidget *widget, gpointer data)
  gtk_widget_destroy(window);
}

static void	aac_configuration(void)
static void aac_configuration(void)
{
  GtkWidget *vbox, *hbox;
  GtkWidget *NotaBene;


@@ 395,8 395,8 @@ static void	aac_configuration(void)

  window = gtk_window_new(GTK_WINDOW_DIALOG);
  gtk_signal_connect(GTK_OBJECT(window), "destroy",
		     GTK_SIGNAL_FUNC(gtk_widget_destroyed),
		     &window);
             GTK_SIGNAL_FUNC(gtk_widget_destroyed),
             &window);
  gtk_window_set_title(GTK_WINDOW(window), "AAC Plugin Configuration");
  gtk_widget_set_usize(window, 220, 200);



@@ 407,9 407,9 @@ static void	aac_configuration(void)
  GTK_WIDGET_UNSET_FLAGS (NotaBene, GTK_CAN_FOCUS);
  gtk_text_insert(GTK_TEXT(NotaBene), NULL, NULL, NULL,
                   "Remember that unable seeking"
		   " is not suitable for playing"
		   " file from network.\n"
		   "Seeking must read first all aac file before playing.",-1);
           " is not suitable for playing"
           " file from network.\n"
           "Seeking must read first all aac file before playing.",-1);
  gtk_box_pack_start(GTK_BOX(vbox), NotaBene, FALSE, FALSE, 0);

  checkbutton = gtk_check_button_new_with_label("Unable Seeking");


@@ 422,13 422,13 @@ static void	aac_configuration(void)

  button2 = gtk_button_new_with_label ("Save");
  gtk_signal_connect_object(GTK_OBJECT(button2), "clicked",
			    GTK_SIGNAL_FUNC(aac_configuration_save),
			    GTK_OBJECT(window));
                GTK_SIGNAL_FUNC(aac_configuration_save),
                GTK_OBJECT(window));
  gtk_box_pack_start(GTK_BOX(hbox), button2, FALSE, FALSE, 0);
  button2 = gtk_button_new_with_label ("Close");
  gtk_signal_connect_object(GTK_OBJECT(button2), "clicked",
			    GTK_SIGNAL_FUNC(gtk_widget_destroy),
			    GTK_OBJECT(window));
                GTK_SIGNAL_FUNC(gtk_widget_destroy),
                GTK_OBJECT(window));
  gtk_box_pack_start(GTK_BOX(hbox), button2, FALSE, FALSE, 0);
  gtk_widget_show_all(window);
}