Author: belegdol
Update of /cvs/free/rpms/gnome-mplayer/F-14
In directory se02.es.rpmfusion.net:/tmp/cvs-serv6239
Added Files:
gnome-mplayer-applefix.patch
Log Message:
* Fri Jul 01 2011 Julian Sikorski <belegdol(a)fedoraproject.org> - 1.0.4-1
- Updated to 1.0.4
- Enabled gtk3 on Fedora 15 and above
gnome-mplayer-applefix.patch:
gui.c | 5 ++++
libgmtk/gmtk_media_player.c | 54 +++++++++++++++++++++++++++++++++++++-------
libgmtk/gmtk_media_player.h | 13 +++++++++-
main.c | 1
4 files changed, 64 insertions(+), 9 deletions(-)
--- NEW FILE gnome-mplayer-applefix.patch ---
Index: src/libgmtk/gmtk_media_player.h
===================================================================
--- src/libgmtk/gmtk_media_player.h (wersja 2151)
+++ src/libgmtk/gmtk_media_player.h (wersja 2152)
@@ -170,7 +170,8 @@
ATTRIBUTE_ENABLE_FRAME_DROP,
ATTRIBUTE_TITLE,
ATTRIBUTE_ARTIST,
- ATTRIBUTE_ALBUM
+ ATTRIBUTE_ALBUM,
+ ATTRIBUTE_RETRY_ON_FULL_CACHE
} GmtkMediaPlayerMediaAttributes;
typedef enum {
@@ -201,6 +202,13 @@
COMMAND_SWITCH_FRAME_DROP
} GmtkMediaPlayerCommand;
+typedef enum {
+ EVENT_TYPE_INT,
+ EVENT_TYPE_DOUBLE,
+ EVENT_TYPE_BOOLEAN,
+ EVENT_TYPE_ALLOCATION
+} GmtkMediaPlayerEventType;
+
typedef struct _GmtkMediaPlayer GmtkMediaPlayer;
typedef struct _GmtkMediaPlayerClass GmtkMediaPlayerClass;
@@ -222,9 +230,11 @@
typedef struct _GmtkMediaPlayerEvent {
GmtkMediaPlayer *player;
+ GmtkMediaPlayerEventType type;
gchar *event_name;
gint event_data_int;
gdouble event_data_double;
+ gboolean event_data_boolean;
GtkAllocation *event_allocation;
} GmtkMediaPlayerEvent;
@@ -304,6 +314,7 @@
gchar *album;
gboolean enable_divx;
gboolean disable_xvmc;
+ gboolean retry_on_full_cache;
gboolean deinterlace;
gboolean frame_drop;
Index: src/libgmtk/gmtk_media_player.c
===================================================================
--- src/libgmtk/gmtk_media_player.c (wersja 2151)
+++ src/libgmtk/gmtk_media_player.c (wersja 2152)
@@ -69,15 +69,27 @@
if (event && event->event_name != NULL
&& (event->player->restart == FALSE || event->event_data_int ==
ATTRIBUTE_AF_EXPORT_FILENAME)) {
- if (g_strcasecmp(event->event_name, "position-changed") == 0 ||
- g_strcasecmp(event->event_name, "cache-percent-changed") == 0)
{
- g_signal_emit_by_name(event->player, event->event_name,
event->event_data_double);
- } else if (g_strcasecmp(event->event_name, "size_allocate") == 0) {
- g_signal_emit_by_name(event->player, event->event_name,
event->event_allocation);
- } else {
- g_signal_emit_by_name(event->player, event->event_name,
event->event_data_int);
- }
+ switch (event->type) {
+ case EVENT_TYPE_INT:
+ g_signal_emit_by_name(event->player, event->event_name,
event->event_data_int);
+ break;
+
+ case EVENT_TYPE_DOUBLE:
+ g_signal_emit_by_name(event->player, event->event_name,
event->event_data_double);
+ break;
+
+ case EVENT_TYPE_BOOLEAN:
+ g_signal_emit_by_name(event->player, event->event_name,
event->event_data_boolean);
+ break;
+
+ case EVENT_TYPE_ALLOCATION:
+ g_signal_emit_by_name(event->player, event->event_name,
event->event_allocation);
+ break;
+
+ default:
+ printf("undefined event %s\n", event->event_name);
+ }
g_free(event->event_name);
}
if (event)
@@ -93,6 +105,7 @@
event = g_new0(GmtkMediaPlayerEvent, 1);
event->player = player;
+ event->type = EVENT_TYPE_INT;
event->event_name = g_strdup(name);
event->event_data_int = value;
g_idle_add(signal_event, event);
@@ -104,17 +117,31 @@
event = g_new0(GmtkMediaPlayerEvent, 1);
event->player = player;
+ event->type = EVENT_TYPE_DOUBLE;
event->event_name = g_strdup(name);
event->event_data_double = value;
g_idle_add(signal_event, event);
}
+void create_event_boolean(GmtkMediaPlayer * player, const gchar * name, gboolean value)
+{
+ GmtkMediaPlayerEvent *event;
+
+ event = g_new0(GmtkMediaPlayerEvent, 1);
+ event->player = player;
+ event->type = EVENT_TYPE_BOOLEAN;
+ event->event_name = g_strdup(name);
+ event->event_data_boolean = value;
+ g_idle_add(signal_event, event);
+}
+
void create_event_allocation(GmtkMediaPlayer * player, const gchar * name, GtkAllocation
* allocation)
{
GmtkMediaPlayerEvent *event;
event = g_new0(GmtkMediaPlayerEvent, 1);
event->player = player;
+ event->type = EVENT_TYPE_ALLOCATION;
event->event_name = g_strdup(name);
event->event_allocation = allocation;
g_idle_add(signal_event, event);
@@ -300,6 +327,7 @@
player->channel_in = NULL;
player->channel_out = NULL;
player->channel_err = NULL;
+ player->retry_on_full_cache = FALSE;
}
static void gmtk_media_player_dispose(GObject * object)
@@ -993,6 +1021,10 @@
ret = player->hardware_ac3;
break;
+ case ATTRIBUTE_RETRY_ON_FULL_CACHE:
+ ret = player->retry_on_full_cache;
+ break;
+
default:
if (player->debug)
printf("Unsupported Attribute\n");
@@ -1788,6 +1820,7 @@
player->title_is_menu = FALSE;
player->enable_divx = TRUE;
player->disable_xvmc = FALSE;
+ player->retry_on_full_cache = FALSE;
g_mutex_lock(player->thread_running);
@@ -2477,6 +2510,11 @@
error_msg = g_strdup_printf(_("Compressed SWF format not supported"));
}
+ if (strstr(mplayer_output->str, "MOV: missing header (moov/cmov) chunk") !=
NULL) {
+ player->retry_on_full_cache = TRUE;
+ create_event_boolean(player, "attribute-changed",
ATTRIBUTE_RETRY_ON_FULL_CACHE);
+ }
+
if (strstr(mplayer_output->str, "Title: ") != 0) {
buf = strstr(mplayer_output->str, "Title:");
buf = strstr(mplayer_output->str, "Title: ") + strlen("Title:
");
Index: src/gui.c
===================================================================
--- src/gui.c (wersja 2151)
+++ src/gui.c (wersja 2152)
@@ -6052,6 +6052,11 @@
g_strlcpy(idledata->media_info, text, 1024);
g_thread_create(get_cover_art, metadata, FALSE, NULL);
break;
+
+ case ATTRIBUTE_RETRY_ON_FULL_CACHE:
+ idledata->retry_on_full_cache = gmtk_media_player_get_attribute_boolean
(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_RETRY_ON_FULL_CACHE);
+ break;
+
default:
if (verbose) {
printf("Unhandled attribute change %i\n", attribute);
Index: src/main.c
===================================================================
--- src/main.c (wersja 2151)
+++ src/main.c (wersja 2152)
@@ -534,6 +534,7 @@
idledata->width = width;
idledata->height = height;
+ idledata->retry_on_full_cache = FALSE;
idledata->cachepercent = -1.0;
g_strlcpy(idledata->info, uri, 1024);
set_media_info(idledata);