summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--firmware/mpeg.c5
-rw-r--r--uisimulator/common/mpegplay.c25
-rw-r--r--uisimulator/common/mpegplay.h6
-rw-r--r--uisimulator/x11/Makefile13
-rw-r--r--uisimulator/x11/oss_sound.c4
5 files changed, 37 insertions, 16 deletions
diff --git a/firmware/mpeg.c b/firmware/mpeg.c
index 2e5464eb03..8f0612c693 100644
--- a/firmware/mpeg.c
+++ b/firmware/mpeg.c
@@ -38,6 +38,8 @@
#include "usb.h"
#include "file.h"
#include "hwcompat.h"
+#else
+#include "mpegplay.h"
#endif /* #ifndef SIMULATOR */
extern void bitswap(unsigned char *data, int length);
@@ -2447,6 +2449,9 @@ void mpeg_play(int offset)
break;
continue;
}
+#ifdef HAVE_MPEG_PLAY
+ real_mpeg_play(trackname);
+#endif
playlist_next(steps);
taginfo.offset = offset;
set_elapsed(&taginfo);
diff --git a/uisimulator/common/mpegplay.c b/uisimulator/common/mpegplay.c
index f48fc699f6..c7e2552b35 100644
--- a/uisimulator/common/mpegplay.c
+++ b/uisimulator/common/mpegplay.c
@@ -21,7 +21,8 @@
*
****************************************************************************/
-#ifdef MPEG_PLAY
+#ifdef HAVE_MPEG_PLAY
+#ifdef HAVE_LIBMAD
#include <string.h>
#include <stdlib.h>
@@ -119,7 +120,7 @@ signed int dither(mad_fixed_t sample, struct dither *dither)
#define INPUT_BUFFER_SIZE (5*8192)
#define OUTPUT_BUFFER_SIZE 8192 /* Must be an integer multiple of 4. */
-void mpeg_play(char* fname)
+void real_mpeg_play(char* fname)
{
unsigned char InputBuffer[INPUT_BUFFER_SIZE],
OutputBuffer[OUTPUT_BUFFER_SIZE],
@@ -128,9 +129,9 @@ void mpeg_play(char* fname)
int Status=0, i, fd;
unsigned long FrameCount=0;
sound_t sound;
- mp3entry mp3;
- register signed int s0, s1;
+ struct mp3entry mp3;
static struct dither d0, d1;
+ int key=0;
mp3info(&mp3, fname);
@@ -152,9 +153,6 @@ void mpeg_play(char* fname)
mad_timer_reset(&Timer);
do {
- if (button_get())
- break;
-
if (Stream.buffer==NULL || Stream.error==MAD_ERROR_BUFLEN) {
size_t ReadSize,Remaining;
unsigned char *ReadStart;
@@ -170,7 +168,7 @@ void mpeg_play(char* fname)
Remaining=0;
}
- if ((ReadSize=read(fd,ReadStart,ReadSize)) < 0) {
+ if ((int)(ReadSize=read(fd,ReadStart,ReadSize)) < 0) {
fprintf(stderr,"end of input stream\n");
break;
}
@@ -229,6 +227,12 @@ void mpeg_play(char* fname)
OutputPtr=OutputBuffer;
}
}
+
+ if ((key=button_get(0))==BUTTON_STOP)
+ {
+ break;
+ }
+
}while(1);
/* Mad is no longer used, the structures that were initialized must
@@ -244,7 +248,7 @@ void mpeg_play(char* fname)
{
size_t BufferSize=OutputPtr-OutputBuffer;
- if(write(sound,OutputBuffer,1,BufferSize)!=BufferSize)
+ if (output_sound(&sound, OutputPtr, BufferSize)!=(int)BufferSize)
{
fprintf(stderr,"PCM write error\n");
Status=2;
@@ -267,4 +271,5 @@ void mpeg_play(char* fname)
}
-#endif
+#endif /* HAVE_LIBMAD */
+#endif /* HAVE_MPEG_PLAY */
diff --git a/uisimulator/common/mpegplay.h b/uisimulator/common/mpegplay.h
index d0c100c45b..f513125253 100644
--- a/uisimulator/common/mpegplay.h
+++ b/uisimulator/common/mpegplay.h
@@ -16,8 +16,8 @@
*
****************************************************************************/
-#ifdef MPEG_PLAY
+#ifdef HAVE_MPEG_PLAY
-void mpeg_play(char* fname);
+void real_mpeg_play(char* fname);
-#endif
+#endif /* HAVE_MPEG_PLAY */
diff --git a/uisimulator/x11/Makefile b/uisimulator/x11/Makefile
index 8076686f52..36e814e121 100644
--- a/uisimulator/x11/Makefile
+++ b/uisimulator/x11/Makefile
@@ -101,6 +101,14 @@ else
endif
COMMONSRCS = io.c
+ifeq ($(HAVE_MPEG_PLAY),1)
+ SOUNDSRC = mpegplay.c oss_sound.c
+ LDFLAGS += $(SOUND_LDFLAGS)
+ CFLAGS += $(SOUND_CFLAGS) -DHAVE_MPEG_PLAY
+else
+ SOUNDSRC =
+endif
+
FIRMSRCS = $(LCDSRSC) id3.c debug.c usb.c mpeg.c mp3_playback.c power.c\
powermgmt.c panic.c mp3data.c sprintf.c buffer.c timefuncs.c
@@ -117,7 +125,7 @@ endif
SRCS = screenhack.c uibasic.c resources.c visual.c lcd-x11.c stubs.c \
button-x11.c thread.c sim_icons.c $(APPS) $(MENUS) $(FIRMSRCS) \
- $(COMMONSRCS) lcd-common.c fmradio.c
+ $(COMMONSRCS) $(SOUNDSRC) lcd-common.c fmradio.c
ROCKSRC := $(wildcard $(APPDIR)/plugins/*.c)
ROCKS := $(ROCKSRC:$(APPDIR)/plugins/%.c=$(OBJDIR)/%.rock)
@@ -321,6 +329,9 @@ $(OBJDIR)/lcd-player.o: $(DRIVERS)/lcd-player.c
$(OBJDIR)/radio.o: $(RECDIR)/radio.c
$(CC) $(APPCFLAGS) -c $< -o $@
+$(OBJDIR)/mpegplay.o: $(SIMCOMMON)/mpegplay.c
+ $(CC) $(CFLAGS) -c $< -o $@
+
# these ones are simulator-specific
$(OBJDIR)/%.o: %.c
diff --git a/uisimulator/x11/oss_sound.c b/uisimulator/x11/oss_sound.c
index e69c403acd..51d85470e7 100644
--- a/uisimulator/x11/oss_sound.c
+++ b/uisimulator/x11/oss_sound.c
@@ -21,7 +21,7 @@
#include <stdio.h>
#include <fcntl.h>
-#include <linux/soundcard.h>
+#include <sys/soundcard.h>
#include "../common/sound.h"
/* We want to use the "real" open in this file */
@@ -39,7 +39,7 @@ int init_sound(sound_t* sound) {
}
int config_sound(sound_t* sound, int sound_freq, int channels) {
- int format=AFMT_U16_LE;
+ int format=AFMT_S16_NE;
int setting=0x000C000D; // 12 fragments size 8kb ? WHAT IS THIS?
sound->freq=sound_freq;