Show SDL errors on player UI
This commit is contained in:
parent
9125da6100
commit
c6cd6522a6
|
@ -21,6 +21,6 @@ libinfinite_la_SOURCES = \
|
||||||
display.c display.h \
|
display.c display.h \
|
||||||
effects.c effects.h\
|
effects.c effects.h\
|
||||||
cputest.c cputest.h\
|
cputest.c cputest.h\
|
||||||
mmx.h types.h
|
mmx.h music-player.h types.h
|
||||||
|
|
||||||
EXTRA_DIST = infinite_states
|
EXTRA_DIST = infinite_states
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
*/
|
*/
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <libaudcore/drct.h>
|
#include <libaudcore/drct.h>
|
||||||
|
#include <libaudcore/interface.h>
|
||||||
#include <libaudcore/playlist.h>
|
#include <libaudcore/playlist.h>
|
||||||
#include <libaudcore/plugin.h>
|
#include <libaudcore/plugin.h>
|
||||||
#include <libaudcore/plugins.h>
|
#include <libaudcore/plugins.h>
|
||||||
|
@ -166,6 +167,10 @@ static void adjust_volume(gint delta) {
|
||||||
aud_drct_set_volume_main(volume + delta);
|
aud_drct_set_volume_main(volume + delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void notify_critical_error (const gchar *message) {
|
||||||
|
aud_ui_show_error(message);
|
||||||
|
}
|
||||||
|
|
||||||
static void disable_plugin() {
|
static void disable_plugin() {
|
||||||
PluginHandle * plugin = aud_plugin_lookup_basename("libinfinite");
|
PluginHandle * plugin = aud_plugin_lookup_basename("libinfinite");
|
||||||
aud_plugin_enable(plugin, false);
|
aud_plugin_enable(plugin, false);
|
||||||
|
@ -181,6 +186,7 @@ static Player player = {
|
||||||
.next = next,
|
.next = next,
|
||||||
.seek = seek,
|
.seek = seek,
|
||||||
.adjust_volume = adjust_volume,
|
.adjust_volume = adjust_volume,
|
||||||
|
.notify_critical_error = notify_critical_error,
|
||||||
.disable_plugin = disable_plugin
|
.disable_plugin = disable_plugin
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#ifndef __INFINITY_COMPUTE__
|
#ifndef __INFINITY_COMPUTE__
|
||||||
#define __INFINITY_COMPUTE__
|
#define __INFINITY_COMPUTE__
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
#define NB_FCT 7
|
#define NB_FCT 7
|
||||||
|
@ -74,5 +75,4 @@ void compute_generate_vector_field(vector_field_t *vector_field);
|
||||||
byte *compute_surface(t_interpol *vector, gint32 width, gint32 height);
|
byte *compute_surface(t_interpol *vector, gint32 width, gint32 height);
|
||||||
byte *compute_surface_mmx(t_interpol *vector, gint32 width, gint32 height);
|
byte *compute_surface_mmx(t_interpol *vector, gint32 width, gint32 height);
|
||||||
|
|
||||||
|
|
||||||
#endif /* __INFINITY_COMPUTE__ */
|
#endif /* __INFINITY_COMPUTE__ */
|
||||||
|
|
|
@ -49,17 +49,26 @@ static SDL_Color color_table[NB_PALETTES][256];
|
||||||
static gint16 current_colors[256];
|
static gint16 current_colors[256];
|
||||||
|
|
||||||
static byte *surface1;
|
static byte *surface1;
|
||||||
|
static Player *player;
|
||||||
|
|
||||||
static void init_sdl(gint32 _width, gint32 _height, gint32 _scale)
|
static gchar error_msg[256];
|
||||||
|
|
||||||
|
static gboolean sdl_init(gint32 _width, gint32 _height, gint32 _scale)
|
||||||
{
|
{
|
||||||
if (SDL_Init((Uint32)(SDL_INIT_VIDEO | SDL_INIT_TIMER)) < 0)
|
if (SDL_Init((Uint32)(SDL_INIT_VIDEO | SDL_INIT_TIMER)) < 0) {
|
||||||
g_error("Infinity: Couldn't initialize SDL: %s\n", SDL_GetError());
|
g_snprintf(error_msg, 256, "Infinity cannot initialize SDL: %s", SDL_GetError());
|
||||||
|
player->notify_critical_error(error_msg);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
screen = SDL_SetVideoMode(_width * _scale, _height * _scale, 16, VIDEO_FLAGS);
|
screen = SDL_SetVideoMode(_width * _scale, _height * _scale, 16, VIDEO_FLAGS);
|
||||||
if (screen == NULL)
|
if (screen == NULL) {
|
||||||
g_error("Infinity: could not init video mode: %s\n", SDL_GetError());
|
g_snprintf(error_msg, 256, "Infinity cannot create display: %s", SDL_GetError());
|
||||||
g_message("Infinity: SDL SetVideoMode() Ok");
|
player->notify_critical_error(error_msg);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
(void)SDL_ShowCursor(0);
|
(void)SDL_ShowCursor(0);
|
||||||
(void)SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
|
(void)SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void generate_colors()
|
static void generate_colors()
|
||||||
|
@ -208,19 +217,26 @@ static void line(gint32 x1, gint32 y1, gint32 x2, gint32 y2, gint32 c)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void display_init(gint32 _width, gint32 _height, gint32 _scale)
|
gboolean display_init(gint32 _width, gint32 _height, gint32 _scale, Player *_player)
|
||||||
{
|
{
|
||||||
|
gboolean sdl_ok;
|
||||||
|
|
||||||
width = _width;
|
width = _width;
|
||||||
height = _height;
|
height = _height;
|
||||||
scale = _scale;
|
scale = _scale;
|
||||||
|
player = _player;
|
||||||
|
|
||||||
pcm_data_mutex = SDL_CreateMutex();
|
pcm_data_mutex = SDL_CreateMutex();
|
||||||
compute_init(width, height, scale);
|
compute_init(width, height, scale);
|
||||||
init_sdl(width, height, scale);
|
sdl_ok = sdl_init(width, height, scale);
|
||||||
generate_colors();
|
generate_colors();
|
||||||
effects_load_effects();
|
effects_load_effects();
|
||||||
vector_field = compute_vector_field_new(width, height);
|
vector_field = compute_vector_field_new(width, height);
|
||||||
compute_generate_vector_field(vector_field);
|
compute_generate_vector_field(vector_field);
|
||||||
|
if (!sdl_ok) {
|
||||||
|
display_quit();
|
||||||
|
}
|
||||||
|
return sdl_ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
void display_quit(void)
|
void display_quit(void)
|
||||||
|
@ -234,21 +250,22 @@ void display_quit(void)
|
||||||
SDL_Quit();
|
SDL_Quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
void display_resize(gint32 _width, gint32 _height)
|
gboolean display_resize(gint32 _width, gint32 _height)
|
||||||
{
|
{
|
||||||
width = _width;
|
width = _width;
|
||||||
height = _height;
|
height = _height;
|
||||||
screen = SDL_SetVideoMode(width * scale,
|
screen = SDL_SetVideoMode(width * scale, height * scale, 16, VIDEO_FLAGS);
|
||||||
height * scale,
|
if (screen == NULL) {
|
||||||
16, VIDEO_FLAGS);
|
g_snprintf(error_msg, 256, "Infinity cannot resize display to %dx%d pixels: %s",
|
||||||
if (screen == NULL)
|
width * scale, height * scale, SDL_GetError());
|
||||||
g_error("Infinity: Couldn't set %dx%d video mode: %s\n",
|
player->notify_critical_error(error_msg);
|
||||||
width * scale, height * scale,
|
return FALSE;
|
||||||
SDL_GetError());
|
}
|
||||||
compute_vector_field_destroy(vector_field);
|
compute_vector_field_destroy(vector_field);
|
||||||
vector_field = compute_vector_field_new(width, height);
|
vector_field = compute_vector_field_new(width, height);
|
||||||
compute_resize(width, height);
|
compute_resize(width, height);
|
||||||
compute_generate_vector_field(vector_field);
|
compute_generate_vector_field(vector_field);
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void display_set_pcm_data(const float *data, int channels)
|
inline void display_set_pcm_data(const float *data, int channels)
|
||||||
|
|
|
@ -21,19 +21,19 @@
|
||||||
|
|
||||||
#include "compute.h"
|
#include "compute.h"
|
||||||
#include "effects.h"
|
#include "effects.h"
|
||||||
|
#include "music-player.h"
|
||||||
|
|
||||||
#define NB_PALETTES 5
|
#define NB_PALETTES 5
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initializes the display related structures.
|
* Initializes the display related structures, including the SDL library.
|
||||||
*
|
*
|
||||||
* It initializes the module and the SDL library.
|
* Warning: must be called before any SDL operation and must not be
|
||||||
|
* called when SDL was already started.
|
||||||
*
|
*
|
||||||
* Warning: because this function initializes the SDL
|
* Returns true on success; and false otherwise.
|
||||||
* library, must be called before any SDL operation and
|
|
||||||
* must not be called when SDL was already started.
|
|
||||||
*/
|
*/
|
||||||
void display_init(gint32 width, gint32 height, gint32 scale);
|
gboolean display_init(gint32 _width, gint32 _height, gint32 _scale, Player *player);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Closes the display module.
|
* Closes the display module.
|
||||||
|
@ -53,8 +53,10 @@ void display_quit(void);
|
||||||
/*
|
/*
|
||||||
* Change the size of the display to the new dimension
|
* Change the size of the display to the new dimension
|
||||||
* width x height.
|
* width x height.
|
||||||
|
*
|
||||||
|
* Returns true on success; and false otherwise.
|
||||||
*/
|
*/
|
||||||
void display_resize(gint32 width, gint32 height);
|
gboolean display_resize(gint32 width, gint32 height);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set data as the data PCM data of this module.
|
* Set data as the data PCM data of this module.
|
||||||
|
|
|
@ -16,9 +16,8 @@
|
||||||
#ifndef __INFINITY_EFFECTS__
|
#ifndef __INFINITY_EFFECTS__
|
||||||
#define __INFINITY_EFFECTS__
|
#define __INFINITY_EFFECTS__
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
#include <types.h>
|
#include "types.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Represents effect related information.
|
* Represents effect related information.
|
||||||
|
@ -52,5 +51,4 @@ void effects_save_effect(t_effect *effect);
|
||||||
void effects_load_effects(void);
|
void effects_load_effects(void);
|
||||||
void effects_load_random_effect(t_effect *effect);
|
void effects_load_random_effect(t_effect *effect);
|
||||||
|
|
||||||
|
|
||||||
#endif /* __INFINITY_EFFECTS__ */
|
#endif /* __INFINITY_EFFECTS__ */
|
||||||
|
|
|
@ -72,7 +72,7 @@ void infinity_init(InfParameters * _params, Player * _player)
|
||||||
gint32 _try;
|
gint32 _try;
|
||||||
|
|
||||||
if (initializing) {
|
if (initializing) {
|
||||||
g_warning("We are already initializing");
|
g_warning("Infinity: is already initializing...");
|
||||||
_try = 0;
|
_try = 0;
|
||||||
while (initializing) {
|
while (initializing) {
|
||||||
g_usleep(1000000);
|
g_usleep(1000000);
|
||||||
|
@ -88,6 +88,14 @@ void infinity_init(InfParameters * _params, Player * _player)
|
||||||
height = params->get_height();
|
height = params->get_height();
|
||||||
scale = params->get_scale();
|
scale = params->get_scale();
|
||||||
|
|
||||||
|
if (! display_init(width, height, scale, player)) {
|
||||||
|
g_critical("Infinity: cannot initialize display");
|
||||||
|
initializing = FALSE;
|
||||||
|
finished = TRUE;
|
||||||
|
player->disable_plugin();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
old_color = 0;
|
old_color = 0;
|
||||||
color = 0;
|
color = 0;
|
||||||
|
|
||||||
|
@ -100,7 +108,6 @@ void infinity_init(InfParameters * _params, Player * _player)
|
||||||
quiting = FALSE;
|
quiting = FALSE;
|
||||||
first_xevent = TRUE;
|
first_xevent = TRUE;
|
||||||
|
|
||||||
display_init(width, height, scale);
|
|
||||||
current_title = g_strdup("Infinity");
|
current_title = g_strdup("Infinity");
|
||||||
set_title();
|
set_title();
|
||||||
title_timer = g_timer_new();
|
title_timer = g_timer_new();
|
||||||
|
@ -214,6 +221,12 @@ static gint disable_func(gpointer data)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void schedule_exit() {
|
||||||
|
GDK_THREADS_ENTER();
|
||||||
|
(void)gtk_idle_add(disable_func, NULL);
|
||||||
|
GDK_THREADS_LEAVE();
|
||||||
|
}
|
||||||
|
|
||||||
static void check_events()
|
static void check_events()
|
||||||
{
|
{
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
|
@ -268,9 +281,7 @@ static void check_events()
|
||||||
* }
|
* }
|
||||||
* break;*/
|
* break;*/
|
||||||
case SDL_QUIT:
|
case SDL_QUIT:
|
||||||
GDK_THREADS_ENTER();
|
schedule_exit();
|
||||||
(void)gtk_idle_add(disable_func, NULL);
|
|
||||||
GDK_THREADS_LEAVE();
|
|
||||||
break;
|
break;
|
||||||
case SDL_VIDEORESIZE:
|
case SDL_VIDEORESIZE:
|
||||||
g_return_if_fail(SDL_LockMutex(resizing_mutex) >= 0);
|
g_return_if_fail(SDL_LockMutex(resizing_mutex) >= 0);
|
||||||
|
@ -413,7 +424,10 @@ static int renderer(void *arg)
|
||||||
if (finished)
|
if (finished)
|
||||||
break;
|
break;
|
||||||
if (must_resize) {
|
if (must_resize) {
|
||||||
display_resize(width, height);
|
if (! display_resize(width, height)) {
|
||||||
|
schedule_exit();
|
||||||
|
break;
|
||||||
|
}
|
||||||
params->set_width(width);
|
params->set_width(width);
|
||||||
params->set_height(height);
|
params->set_height(height);
|
||||||
must_resize = FALSE;
|
must_resize = FALSE;
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
#define __INFINITY_INFINITY__
|
#define __INFINITY_INFINITY__
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
#include "music-player.h"
|
||||||
|
|
||||||
typedef struct _InfParameters {
|
typedef struct _InfParameters {
|
||||||
gint32 (*get_x_origin) (void);
|
gint32 (*get_x_origin) (void);
|
||||||
|
@ -33,23 +34,6 @@ typedef struct _InfParameters {
|
||||||
gint32 (*get_max_fps) (void);
|
gint32 (*get_max_fps) (void);
|
||||||
} InfParameters;
|
} InfParameters;
|
||||||
|
|
||||||
typedef struct _Player {
|
|
||||||
|
|
||||||
gboolean (*is_playing) (void);
|
|
||||||
gchar* (*get_title) (void);
|
|
||||||
|
|
||||||
void (*play) (void);
|
|
||||||
void (*pause) (void);
|
|
||||||
void (*stop) (void);
|
|
||||||
void (*previous) (void);
|
|
||||||
void (*next) (void);
|
|
||||||
void (*seek) (gint32 usecs);
|
|
||||||
void (*adjust_volume) (gint delta);
|
|
||||||
|
|
||||||
void (*disable_plugin) (void); /* tell the player that this plugin has stopped */
|
|
||||||
|
|
||||||
} Player;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initializes rendering process.
|
* Initializes rendering process.
|
||||||
*
|
*
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Library General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
#ifndef __INFINITY_PLAYER__
|
||||||
|
#define __INFINITY_PLAYER__
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Interface that Infinity uses to talk with the hosting music player.
|
||||||
|
*/
|
||||||
|
typedef struct _Player {
|
||||||
|
|
||||||
|
gboolean (*is_playing) (void);
|
||||||
|
gchar* (*get_title) (void);
|
||||||
|
|
||||||
|
void (*play) (void);
|
||||||
|
void (*pause) (void);
|
||||||
|
void (*stop) (void);
|
||||||
|
void (*previous) (void);
|
||||||
|
void (*next) (void);
|
||||||
|
void (*seek) (gint32 usecs);
|
||||||
|
void (*adjust_volume) (gint delta);
|
||||||
|
|
||||||
|
void (*notify_critical_error) (const gchar *message);
|
||||||
|
void (*disable_plugin) (void); /* tell the player that this plugin has stopped */
|
||||||
|
|
||||||
|
} Player;
|
||||||
|
|
||||||
|
#endif /* __INFINITY_PLAYER__ */
|
Loading…
Reference in New Issue