diff options
-rw-r--r-- | firmware/mpeg.c | 5 | ||||
-rw-r--r-- | uisimulator/common/mpegplay.c | 25 | ||||
-rw-r--r-- | uisimulator/common/mpegplay.h | 6 | ||||
-rw-r--r-- | uisimulator/x11/Makefile | 13 | ||||
-rw-r--r-- | uisimulator/x11/oss_sound.c | 4 |
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; |