summaryrefslogtreecommitdiffstats
path: root/libmpcodecs/ad_mp3.c
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-03-25 21:06:01 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-03-25 21:06:01 +0000
commit7c026066ea35886bddfda08a71c0cc8f170a5d86 (patch)
tree963bf77f55faf2b9795502065ef95878fade190a /libmpcodecs/ad_mp3.c
parent94d3170bd0561939a0ec322860be1f28d711e271 (diff)
downloadmpv-7c026066ea35886bddfda08a71c0cc8f170a5d86.tar.bz2
mpv-7c026066ea35886bddfda08a71c0cc8f170a5d86.tar.xz
imported from MPlayerXP, dlopen() hack removed, some bugs fixed, interface functions changed to static, info->author field added
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@5341 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpcodecs/ad_mp3.c')
-rw-r--r--libmpcodecs/ad_mp3.c79
1 files changed, 79 insertions, 0 deletions
diff --git a/libmpcodecs/ad_mp3.c b/libmpcodecs/ad_mp3.c
new file mode 100644
index 0000000000..683ce09771
--- /dev/null
+++ b/libmpcodecs/ad_mp3.c
@@ -0,0 +1,79 @@
+#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(mp3)
+
+#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);
+ 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);
+}