diff libmpcodecs/ad_mp3lib.c @ 7171:772f853f32a1

renamed to ad_mp3lib.c
author arpi
date Fri, 30 Aug 2002 19:40:24 +0000
parents libmpcodecs/ad_mp3.c@523014df7d32
children 28677d779205
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libmpcodecs/ad_mp3lib.c	Fri Aug 30 19:40:24 2002 +0000
@@ -0,0 +1,80 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include "config.h"
+#include "ad_internal.h"
+
+static ad_info_t info = 
+{
+	"MPEG layer-2, layer-3",
+	"mp3lib",
+	AFM_MPEG,
+	"Nick Kurshev",
+	"mpg123",
+	"Optimized to MMX/SSE/3Dnow!"
+};
+
+LIBAD_EXTERN(mp3lib)
+
+#include "../mp3lib/mp3.h"
+
+extern int fakemono;
+
+static sh_audio_t* dec_audio_sh=NULL;
+
+// MP3 decoder buffer callback:
+int mplayer_audio_read(char *buf,int size){
+  return demux_read_data(dec_audio_sh->ds,buf,size);
+}
+
+static int preinit(sh_audio_t *sh)
+{
+  sh->audio_out_minsize=32*36*2*2; //4608;
+  return 1;
+}
+
+static int init(sh_audio_t *sh)
+{
+  // MPEG Audio:
+  dec_audio_sh=sh; // save sh_audio for the callback:
+//  MP3_Init(fakemono,mplayer_accel,&mplayer_audio_read); // TODO!!!
+#ifdef USE_FAKE_MONO
+  MP3_Init(fakemono);
+#else
+  MP3_Init();
+#endif
+  MP3_samplerate=MP3_channels=0;
+  sh->a_buffer_len=MP3_DecodeFrame(sh->a_buffer,-1);
+  if(!sh->a_buffer_len) return 0; // unsupported layer/format
+  sh->channels=2; // hack
+  sh->samplerate=MP3_samplerate;
+  sh->i_bps=MP3_bitrate*(1000/8);
+  MP3_PrintHeader();
+  return 1;
+}
+
+static void uninit(sh_audio_t *sh)
+{
+}
+
+static int control(sh_audio_t *sh,int cmd,void* arg, ...)
+{
+    switch(cmd)
+    {
+      case ADCTRL_RESYNC_STREAM:
+          MP3_DecodeFrame(NULL,-2); // resync
+          MP3_DecodeFrame(NULL,-2); // resync
+          MP3_DecodeFrame(NULL,-2); // resync
+	  return CONTROL_TRUE;
+      case ADCTRL_SKIP_FRAME:
+	  MP3_DecodeFrame(NULL,-2); // skip MPEG frame
+	  return CONTROL_TRUE;
+    }
+  return CONTROL_UNKNOWN;
+}
+
+static int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int maxlen)
+{
+   return MP3_DecodeFrame(buf,-1);
+}