mp3 playback "engine" now in plugin API, rocks can make sound
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4285 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
41354a85d9
commit
95298a9558
4 changed files with 59 additions and 3 deletions
|
@ -34,6 +34,9 @@
|
||||||
#include "lang.h"
|
#include "lang.h"
|
||||||
#include "keyboard.h"
|
#include "keyboard.h"
|
||||||
#include "mpeg.h"
|
#include "mpeg.h"
|
||||||
|
#include "buffer.h"
|
||||||
|
#include "mp3_playback.h"
|
||||||
|
#include "backlight.h"
|
||||||
|
|
||||||
#ifdef HAVE_LCD_BITMAP
|
#ifdef HAVE_LCD_BITMAP
|
||||||
#include "widgets.h"
|
#include "widgets.h"
|
||||||
|
@ -58,6 +61,7 @@
|
||||||
static unsigned char pluginbuf[PLUGIN_BUFFER_SIZE];
|
static unsigned char pluginbuf[PLUGIN_BUFFER_SIZE];
|
||||||
#else
|
#else
|
||||||
extern unsigned char pluginbuf[];
|
extern unsigned char pluginbuf[];
|
||||||
|
extern void bitswap(unsigned char *data, int length);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static bool plugin_loaded = false;
|
static bool plugin_loaded = false;
|
||||||
|
@ -163,6 +167,19 @@ static struct plugin_api rockbox_api = {
|
||||||
lcd_blit,
|
lcd_blit,
|
||||||
#endif
|
#endif
|
||||||
yield,
|
yield,
|
||||||
|
|
||||||
|
plugin_get_mp3_buffer,
|
||||||
|
mpeg_sound_set,
|
||||||
|
#ifndef SIMULATOR
|
||||||
|
mp3_play_init,
|
||||||
|
mp3_play_data,
|
||||||
|
mp3_play_pause,
|
||||||
|
mp3_play_stop,
|
||||||
|
mp3_is_playing,
|
||||||
|
bitswap,
|
||||||
|
#endif
|
||||||
|
&global_settings,
|
||||||
|
backlight_set_timeout,
|
||||||
};
|
};
|
||||||
|
|
||||||
int plugin_load(char* plugin, void* parameter)
|
int plugin_load(char* plugin, void* parameter)
|
||||||
|
@ -294,6 +311,21 @@ void* plugin_get_buffer(int* buffer_size)
|
||||||
return &pluginbuf[buffer_pos];
|
return &pluginbuf[buffer_pos];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Returns a pointer to the mp3 buffer.
|
||||||
|
Playback gets stopped, to avoid conflicts. */
|
||||||
|
void* plugin_get_mp3_buffer(int* buffer_size)
|
||||||
|
{
|
||||||
|
#ifdef SIMULATOR
|
||||||
|
static unsigned char buf[1700*1024];
|
||||||
|
*buffer_size = sizeof(buf);
|
||||||
|
return buf;
|
||||||
|
#else
|
||||||
|
mpeg_stop();
|
||||||
|
*buffer_size = mp3end - mp3buf;
|
||||||
|
return mp3buf;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
static int plugin_test(int api_version, int model, int memsize)
|
static int plugin_test(int api_version, int model, int memsize)
|
||||||
{
|
{
|
||||||
if (api_version < PLUGIN_MIN_API_VERSION ||
|
if (api_version < PLUGIN_MIN_API_VERSION ||
|
||||||
|
|
|
@ -41,9 +41,11 @@
|
||||||
#include "lcd.h"
|
#include "lcd.h"
|
||||||
#include "id3.h"
|
#include "id3.h"
|
||||||
#include "mpeg.h"
|
#include "mpeg.h"
|
||||||
|
#include "mp3_playback.h"
|
||||||
|
#include "settings.h"
|
||||||
|
|
||||||
/* increase this every time the api struct changes */
|
/* increase this every time the api struct changes */
|
||||||
#define PLUGIN_API_VERSION 9
|
#define PLUGIN_API_VERSION 10
|
||||||
|
|
||||||
/* update this to latest version if a change to the api struct breaks
|
/* update this to latest version if a change to the api struct breaks
|
||||||
backwards compatibility */
|
backwards compatibility */
|
||||||
|
@ -181,18 +183,33 @@ struct plugin_api {
|
||||||
int (*atoi)(const char *str);
|
int (*atoi)(const char *str);
|
||||||
struct tm* (*get_time)(void);
|
struct tm* (*get_time)(void);
|
||||||
void* (*plugin_get_buffer)(int* buffer_size);
|
void* (*plugin_get_buffer)(int* buffer_size);
|
||||||
/* new stuff */
|
|
||||||
|
/* new stuff, sort in next time the API gets broken! */
|
||||||
#ifndef HAVE_LCD_CHARCELLS
|
#ifndef HAVE_LCD_CHARCELLS
|
||||||
unsigned char* lcd_framebuffer;
|
unsigned char* lcd_framebuffer;
|
||||||
/* performance function */
|
/* performance function */
|
||||||
void (*lcd_blit) (unsigned char* p_data, int x, int y, int width, int height, int stride);
|
void (*lcd_blit) (unsigned char* p_data, int x, int y, int width, int height, int stride);
|
||||||
#endif
|
#endif
|
||||||
void (*yield)(void);
|
void (*yield)(void);
|
||||||
|
|
||||||
|
void* (*plugin_get_mp3_buffer)(int* buffer_size);
|
||||||
|
void (*mpeg_sound_set)(int setting, int value);
|
||||||
|
#ifndef SIMULATOR
|
||||||
|
void (*mp3_play_init)(void);
|
||||||
|
void (*mp3_play_data)(unsigned char* start, int size, void (*get_more)(unsigned char** start, int* size));
|
||||||
|
void (*mp3_play_pause)(bool play);
|
||||||
|
void (*mp3_play_stop)(void);
|
||||||
|
bool (*mp3_is_playing)(void);
|
||||||
|
void (*bitswap)(unsigned char *data, int length);
|
||||||
|
#endif
|
||||||
|
struct user_settings* global_settings;
|
||||||
|
void (*backlight_set_timeout)(unsigned int index);
|
||||||
};
|
};
|
||||||
|
|
||||||
/* defined by the plugin loader (plugin.c) */
|
/* defined by the plugin loader (plugin.c) */
|
||||||
int plugin_load(char* plugin, void* parameter);
|
int plugin_load(char* plugin, void* parameter);
|
||||||
void* plugin_get_buffer(int *buffer_size);
|
void* plugin_get_buffer(int *buffer_size);
|
||||||
|
void* plugin_get_mp3_buffer(int *buffer_size);
|
||||||
|
|
||||||
/* defined by the plugin */
|
/* defined by the plugin */
|
||||||
enum plugin_status plugin_start(struct plugin_api* rockbox, void* parameter)
|
enum plugin_status plugin_start(struct plugin_api* rockbox, void* parameter)
|
||||||
|
|
|
@ -46,7 +46,7 @@ void mpeg_set_pitch(int percent);
|
||||||
void demand_irq_enable(bool on);
|
void demand_irq_enable(bool on);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* new functions, to be exported to plugin API */
|
/* new functions, exported to plugin API */
|
||||||
void mp3_play_init(void);
|
void mp3_play_init(void);
|
||||||
void mp3_play_data(unsigned char* start, int size,
|
void mp3_play_data(unsigned char* start, int size,
|
||||||
void (*get_more)(unsigned char** start, int* size) /* callback fn */
|
void (*get_more)(unsigned char** start, int* size) /* callback fn */
|
||||||
|
@ -55,6 +55,7 @@ void mp3_play_pause(bool play);
|
||||||
void mp3_play_stop(void);
|
void mp3_play_stop(void);
|
||||||
long mp3_get_playtime(void);
|
long mp3_get_playtime(void);
|
||||||
void mp3_reset_playtime(void);
|
void mp3_reset_playtime(void);
|
||||||
|
bool mp3_is_playing(void);
|
||||||
|
|
||||||
|
|
||||||
#define SOUND_VOLUME 0
|
#define SOUND_VOLUME 0
|
||||||
|
|
|
@ -1086,4 +1086,10 @@ void mp3_reset_playtime(void)
|
||||||
playstart_tick = current_tick;
|
playstart_tick = current_tick;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool mp3_is_playing(void)
|
||||||
|
{
|
||||||
|
return playing;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* #ifndef SIMULATOR */
|
#endif /* #ifndef SIMULATOR */
|
||||||
|
|
Loading…
Reference in a new issue