Update to gmtk-1.0.9alpha

This commit is contained in:
dcoppa 2013-10-07 10:20:28 +00:00
parent 07ec4564e4
commit af6b95867b
6 changed files with 35 additions and 528 deletions

View File

@ -1,8 +1,8 @@
# $OpenBSD: Makefile,v 1.20 2013/08/07 21:33:00 naddy Exp $
# $OpenBSD: Makefile,v 1.21 2013/10/07 10:20:28 dcoppa Exp $
COMMENT = gnome-mplayer toolkit
DISTNAME = gmtk-1.0.8
REVISION = 2
DISTNAME = gmtk-1.0.9a
PKGNAME = gmtk-1.0.9alpha
SHARED_LIBS = gmlib 2.0 \
gmtk 2.0

View File

@ -1,2 +1,2 @@
SHA256 (gmtk-1.0.8.tar.gz) = AH+6hfS6avaz/Z1RYuGKfkBZyEjhEusDuEsseq0Aiww=
SIZE (gmtk-1.0.8.tar.gz) = 407790
SHA256 (gmtk-1.0.9a.tar.gz) = WU+/Szlm8oubtIWoTrTaLOdRlYNkYQG2tF7Z5GviLRU=
SIZE (gmtk-1.0.9a.tar.gz) = 410020

View File

@ -1,24 +0,0 @@
$OpenBSD: patch-src_gm_parse_c,v 1.3 2013/07/12 09:58:56 dcoppa Exp $
Minor string cleanups (upstream svn revision r223)
--- src/gm_parse.c.orig Fri Jul 12 11:31:34 2013
+++ src/gm_parse.c Fri Jul 12 11:38:34 2013
@@ -134,7 +134,7 @@ gboolean gm_parse_asx_is_asx(const gchar * uri)
continue;
}
newline = g_strdup(line);
- if (g_ascii_strncasecmp(newline, "<asx", g_utf8_strlen("<asx", -1)) == 0) {
+ if (g_ascii_strncasecmp(newline, "<asx", strlen("<asx")) == 0) {
ret = TRUE;
g_free(newline);
break;
@@ -180,7 +180,7 @@ gboolean gm_parse_asx_is_asx(const gchar * uri)
} else {
gm_log(FALSE, G_LOG_LEVEL_DEBUG, "line = %s", line);
newline = g_strdup(line);
- if (g_ascii_strncasecmp(newline, "<asx", g_utf8_strlen("<asx", -1)) == 0) {
+ if (g_ascii_strncasecmp(newline, "<asx", strlen("<asx")) == 0) {
gm_log(FALSE, G_LOG_LEVEL_DEBUG, "asx");
ret = TRUE;
g_free(newline);

View File

@ -1,458 +1,20 @@
$OpenBSD: patch-src_gmtk_media_player_c,v 1.13 2013/07/12 09:58:56 dcoppa Exp $
$OpenBSD: patch-src_gmtk_media_player_c,v 1.14 2013/10/07 10:20:28 dcoppa Exp $
If the user gives some mplayer video output driver (vo) options in
the "Video Output" preferences they should be passed along on the
mplayer command line (upstream svn revision r222)
Add key bindings for h tv_step_channel down and k tv_step_channel
up (upstream svn revision r228)
Use case-insensitive parsing of metadata attributes
(upstream svn revision r212)
Fix OSD messages so they only displayed for level 1 and higher
(upstream svn revision r216)
Exclude input.conf from file not found message
(upstream svn revision r213)
Fix issue #682: item names in "Items to Play" replaced with CPUID
string (upstream svn revision r220)
--- src/gmtk_media_player.c.orig Tue Feb 19 18:02:13 2013
+++ src/gmtk_media_player.c Fri Jul 12 11:31:22 2013
@@ -75,6 +75,22 @@ static void alignment_realized(GtkWidget * widget, gpo
}
+static gboolean vodesc_looks_like_vo(gchar const*const desc, gchar const*const vo) {
+ if(g_strcmp0(desc, vo) == 0) {
+ return TRUE;
+ }
+ if(!g_str_has_prefix(desc, vo)) {
+ return FALSE;
+ }
+ /* we know that they are not equal but desc starts with vo, i.e. desc is longer than vo */
+ /* now to check that desc looks like vo: */
+ const size_t vol = strlen(vo);
+ if(desc[vol] == ':') {
+ return TRUE;
+ }
+ return FALSE;
+}
+
static void socket_realized(GtkWidget * widget, gpointer data)
{
GmtkMediaPlayer *player = GMTK_MEDIA_PLAYER(data);
@@ -83,7 +99,7 @@ static void socket_realized(GtkWidget * widget, gpoint
player->socket_id = GPOINTER_TO_INT(gtk_socket_get_id(GTK_SOCKET(widget)));
style = gtk_widget_get_style(widget);
if (player->vo != NULL) {
- if (!(g_ascii_strncasecmp(player->vo, "vdpau", strlen("vdpau")) == 0)) {
+ if (!vodesc_looks_like_vo(player->vo, "vdpau")) {
gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, &(style->black));
gtk_widget_modify_bg(widget, GTK_STATE_ACTIVE, &(style->black));
gtk_widget_modify_bg(widget, GTK_STATE_SELECTED, &(style->black));
@@ -477,6 +493,13 @@ static void gmtk_media_player_init(GmtkMediaPlayer * p
player->album = NULL;
player->disposed = FALSE;
player->player_lock = g_mutex_new();
+ player->name_regex = g_regex_new(".*name\\s*:\\s*(.*)\n", G_REGEX_CASELESS, 0, NULL);
+ player->genre_regex = g_regex_new(".*genre\\s*:\\s*(.*)\n", G_REGEX_CASELESS, 0, NULL);
+ player->title_regex = g_regex_new(".*title\\s*:\\s*(.*)\n", G_REGEX_CASELESS, 0, NULL);
+ player->artist_regex = g_regex_new(".*artist\\s*:\\s*(.*)\n", G_REGEX_CASELESS, 0, NULL);
+ player->album_regex = g_regex_new(".*album\\s*:\\s*(.*)\n", G_REGEX_CASELESS, 0, NULL);
+ player->deintN_regex = g_regex_new("(.*)(:deint=[0-9]+)\\b(.*)", G_REGEX_CASELESS, 0, NULL);
+
gmtk_media_player_log_state(player, "after init");
}
@@ -741,7 +764,7 @@ static gboolean player_key_press_event_callback(GtkWid
case GDK_d:
write_to_mplayer(player, "frame_drop\n");
cmd =
- g_strdup_printf("osd_show_property_text \"%s: ${framedropping}\"\n",
+ g_strdup_printf("osd_show_property_text \"%s: ${framedropping}\" 1000 1\n",
g_dgettext(GETTEXT_PACKAGE, "Frame Dropping"));
write_to_mplayer(player, cmd);
g_free(cmd);
@@ -755,7 +778,7 @@ static gboolean player_key_press_event_callback(GtkWid
case GDK_D:
write_to_mplayer(player, "step_property deinterlace\n");
cmd =
- g_strdup_printf("osd_show_property_text \"%s: ${deinterlace}\"\n",
+ g_strdup_printf("osd_show_property_text \"%s: ${deinterlace}\" 1000 1\n",
g_dgettext(GETTEXT_PACKAGE, "Deinterlace"));
write_to_mplayer(player, cmd);
g_free(cmd);
@@ -1119,7 +1142,7 @@ void gmtk_media_player_send_command(GmtkMediaPlayer *
case COMMAND_SWITCH_FRAME_DROP:
write_to_mplayer(player, "frame_drop\n");
cmd =
- g_strdup_printf("osd_show_property_text \"%s ${framedropping}\"\n",
+ g_strdup_printf("osd_show_property_text \"%s ${framedropping}\" 1000 1\n",
g_dgettext(GETTEXT_PACKAGE, "Frame Dropping"));
write_to_mplayer(player, cmd);
g_free(cmd);
@@ -1147,11 +1170,12 @@ void gmtk_media_player_set_attribute_boolean(GmtkMedia
cmd = NULL;
if (value) {
cmd =
- g_strdup_printf("osd_show_property_text \"%s\"\n",
+ g_strdup_printf("osd_show_property_text \"%s\" 1000 1\n",
g_dgettext(GETTEXT_PACKAGE, "Subtitles Visible"));
} else {
cmd =
- g_strdup_printf("osd_show_property_text \"%s\"\n", g_dgettext(GETTEXT_PACKAGE, "Subtitles Hidden"));
+ g_strdup_printf("osd_show_property_text \"%s\" 1000 1\n",
+ g_dgettext(GETTEXT_PACKAGE, "Subtitles Hidden"));
}
write_to_mplayer(player, cmd);
g_free(cmd);
@@ -1775,6 +1799,14 @@ const gchar *gmtk_media_player_get_attribute_string(Gm
}
break;
+ case ATTRIBUTE_GENRE:
+ if (player->genre == NULL || strlen(player->genre) == 0) {
+ value = NULL;
+ } else {
+ value = player->genre;
+ }
+ break;
+
case ATTRIBUTE_PROFILE:
value = player->profile;
break;
@@ -2208,8 +2240,50 @@ static const gchar *playback_error_to_string(const Gmt
}
+/* if it contains a deint=N leave as is, otherwise add deint=2
+ returns newly-allocated string, passing ownership to caller */
+static gchar* vdpau_compute_vo_with_deint(GmtkMediaPlayer * player, gchar const*const vodesc) {
+ gchar* ret;
+ if(g_regex_match(player->deintN_regex, vodesc, 0, NULL)) {
+ ret = g_strdup(vodesc);
+ } else {
+ ret = g_strdup_printf("%s:deint=2", vodesc);
+ }
+ return ret;
+}
+/* if it contains a deint=N remove that, otherwise leave as is
+ returns newly-allocated string, passing ownership to caller */
+static gchar* vdpau_compute_vo_without_deint(GmtkMediaPlayer * player, gchar const*const vodesc) {
+ GMatchInfo *match_info = NULL;
+ gchar *ret;
+ if(g_regex_match(player->deintN_regex, vodesc, 0, &match_info)) {
+ gchar *before = g_match_info_fetch(match_info, 1);
+ gchar *after = g_match_info_fetch(match_info, 3);
+ ret = g_strdup_printf("%s%s", before, after);
+ g_free(before);
+ g_free(after);
+ } else {
+ ret = g_strdup(vodesc);
+ }
+ g_match_info_free(match_info);
+ return ret;
+}
+/* replace the vo part with "gl_nosw"
+ returns newly-allocated string, passing ownership to caller */
+static gchar* vodesc_replace_gl_with_gl_nosw(GmtkMediaPlayer * player, gchar const*const vodesc) {
+ /* find the first colon : and replace the part before that with gl_nosw */
+ char *colonptr = strchr(vodesc, ':');
+ gchar *ret;
+ if(colonptr == NULL) {
+ ret = g_strdup("gl_nosw");
+ } else {
+ ret = g_strdup_printf("gl_nosw%s", colonptr);
+ }
+ return ret;
+}
+
gpointer launch_mplayer(gpointer data)
{
GmtkMediaPlayer *player = GMTK_MEDIA_PLAYER(data);
@@ -2321,12 +2395,18 @@ gpointer launch_mplayer(gpointer data)
if (player->vo != NULL) {
argv[argn++] = g_strdup_printf("-vo");
- if (g_ascii_strncasecmp(player->vo, "vdpau", strlen("vdpau")) == 0) {
+ if (vodesc_looks_like_vo(player->vo, "vdpau")) {
if (player->deinterlace) {
- argv[argn++] = g_strdup_printf("vdpau:deint=2,%s,gl,x11", player->vo);
+ /* if it contains a deint=N leave as is, otherwise add deint=2 */
+ gchar* vo_with_deint = vdpau_compute_vo_with_deint(player, player->vo);
+ argv[argn++] = g_strdup_printf("%s,gl,x11,", player->vo);
+ g_free(vo_with_deint);
} else {
- argv[argn++] = g_strdup_printf("%s,gl,x11", player->vo);
+ /* if it contains a deint=N remove that, otherwise leave as is */
+ gchar* vo_without_deint = vdpau_compute_vo_without_deint(player, player->vo);
+ argv[argn++] = g_strdup_printf("%s,gl,x11,", player->vo);
+ g_free(vo_without_deint);
}
// told by uau that vdpau without hardware decoding is often what you want
@@ -2339,12 +2419,12 @@ gpointer launch_mplayer(gpointer data)
}
}
- } else if (g_ascii_strncasecmp(player->vo, "vaapi", strlen("vaapi")) == 0) {
+ } else if (vodesc_looks_like_vo(player->vo, "vaapi")) {
argv[argn++] = g_strdup_printf("%s,", player->vo);
argv[argn++] = g_strdup_printf("-va");
argv[argn++] = g_strdup_printf("vaapi");
- } else if (g_ascii_strncasecmp(player->vo, "xvmc", strlen("xvmc")) == 0) {
+ } else if (vodesc_looks_like_vo(player->vo, "xvmc")) {
if (player->disable_xvmc) {
argv[argn++] = g_strdup_printf("xv,");
@@ -2354,13 +2434,15 @@ gpointer launch_mplayer(gpointer data)
} else {
- if (g_ascii_strncasecmp(player->vo, "gl", strlen("gl")) == 0 && player->enable_hardware_codecs) {
- argv[argn++] = g_strdup_printf("gl_nosw");
- } else if (g_ascii_strncasecmp(player->vo, "gl2", strlen("gl2")) == 0 && player->enable_hardware_codecs) {
- argv[argn++] = g_strdup_printf("gl_nosw");
+ if (vodesc_looks_like_vo(player->vo, "gl") && player->enable_hardware_codecs) {
+ gchar *vodesc = vodesc_replace_gl_with_gl_nosw(player, player->vo);
+ argv[argn++] = vodesc;
+ } else if (vodesc_looks_like_vo(player->vo, "gl2") && player->enable_hardware_codecs) {
+ gchar *vodesc = vodesc_replace_gl_with_gl_nosw(player, player->vo);
+ argv[argn++] = vodesc;
} else {
argv[argn++] = g_strdup_printf("%s", player->vo);
- if (g_ascii_strncasecmp(player->vo, "x11", strlen("x11")) == 0) {
+ if (vodesc_looks_like_vo(player->vo, "x11")) {
argv[argn++] = g_strdup_printf("-zoom");
}
}
@@ -3010,7 +3092,7 @@ gboolean thread_reader_error(GIOChannel * source, GIOC
}
if (strstr(mplayer_output->str, "Failed creating VDPAU decoder") != NULL) {
- if (player->enable_divx && (g_ascii_strncasecmp(player->vo, "vdpau", strlen("vdpau")) == 0))
+ if (player->enable_divx && vodesc_looks_like_vo(player->vo, "vdpau"))
player->playback_error = ERROR_RETRY_WITHOUT_DIVX_VDPAU;
}
@@ -3020,7 +3102,7 @@ gboolean thread_reader_error(GIOChannel * source, GIOC
}
if (strstr(mplayer_output->str, "The selected video_out device is incompatible with this codec") != NULL) {
- if (!player->disable_xvmc && (g_ascii_strncasecmp(player->vo, "xvmc", strlen("xvmc")) == 0))
+ if (!player->disable_xvmc && vodesc_looks_like_vo(player->vo, "xvmc"))
player->playback_error = ERROR_RETRY_WITHOUT_XVMC;
}
@@ -3042,6 +3124,7 @@ gboolean thread_reader_error(GIOChannel * source, GIOC
if (strstr(mplayer_output->str, "Failed to open") != NULL) {
if (strstr(mplayer_output->str, "LIRC") == NULL &&
+ strstr(mplayer_output->str, "input.conf") == NULL &&
strstr(mplayer_output->str, "/dev/rtc") == NULL &&
strstr(mplayer_output->str, "VDPAU") == NULL && strstr(mplayer_output->str, "registry file") == NULL) {
if (strstr(mplayer_output->str, "<") == NULL && strstr(mplayer_output->str, ">") == NULL
@@ -3161,6 +3244,8 @@ gboolean thread_reader(GIOChannel * source, GIOConditi
GmtkMediaPlayerAudioTrack *audio_track = NULL;
GList *iter;
GtkWidget *dialog;
+ gchar **split;
+ gint index;
if (player == NULL) {
gm_log(player->debug, G_LOG_LEVEL_MESSAGE, "player is NULL");
@@ -3635,94 +3720,120 @@ gboolean thread_reader(GIOChannel * source, GIOConditi
gtk_widget_destroy(dialog);
}
- if (strstr(mplayer_output->str, "Name : ") != 0) {
- buf = strstr(mplayer_output->str, "Name : ");
- buf = strstr(mplayer_output->str, "Name : ") + strlen("Name : ");
- buf = g_strchomp(buf);
- if (player->title != NULL) {
- g_free(player->title);
- player->title = NULL;
- }
+ if (g_regex_match(player->name_regex, mplayer_output->str, 0, NULL) \
+ && (g_strrstr(mplayer_output->str, "CPU vendor name:") == NULL)) {
+ split = g_regex_split(player->name_regex, mplayer_output->str, 0);
+ index = 0;
+ while (split[index]) {
+ if (strlen(split[index]) > 0) {
+ if (player->title != NULL) {
+ g_free(player->title);
+ player->title = NULL;
+ }
- player->title = g_locale_to_utf8(buf, -1, NULL, NULL, NULL);
- if (player->title == NULL) {
- player->title = g_strdup(buf);
- gm_str_strip_unicode(player->title, strlen(player->title));
+ player->title = g_locale_to_utf8(split[index], -1, NULL, NULL, NULL);
+ if (player->title == NULL) {
+ player->title = g_strdup(split[index]);
+ gm_str_strip_unicode(player->title, strlen(player->title));
+ }
+ player->has_metadata = TRUE;
+ create_event_int(player, "attribute-changed", ATTRIBUTE_TITLE);
+ }
+ index++;
}
- player->has_metadata = TRUE;
- create_event_int(player, "attribute-changed", ATTRIBUTE_TITLE);
+ g_strfreev(split);
}
- if (strstr(mplayer_output->str, "Genre : ") != 0) {
- buf = strstr(mplayer_output->str, "Genre : ");
- buf = strstr(mplayer_output->str, "Genre : ") + strlen("Genre : ");
- buf = g_strchomp(buf);
- if (player->artist != NULL) {
- g_free(player->artist);
- player->artist = NULL;
- }
+ if (g_regex_match(player->genre_regex, mplayer_output->str, 0, NULL)) {
+ split = g_regex_split(player->genre_regex, mplayer_output->str, 0);
+ index = 0;
+ while (split[index]) {
+ if (strlen(split[index]) > 0) {
+ if (player->title != NULL) {
+ g_free(player->genre);
+ player->title = NULL;
+ }
- player->artist = g_locale_to_utf8(buf, -1, NULL, NULL, NULL);
- if (player->artist == NULL) {
- player->artist = g_strdup(buf);
- gm_str_strip_unicode(player->artist, strlen(player->artist));
+ player->genre = g_locale_to_utf8(split[index], -1, NULL, NULL, NULL);
+ if (player->genre == NULL) {
+ player->genre = g_strdup(split[index]);
+ gm_str_strip_unicode(player->genre, strlen(player->genre));
+ }
+ player->has_metadata = TRUE;
+ create_event_int(player, "attribute-changed", ATTRIBUTE_GENRE);
+ }
+ index++;
}
- player->has_metadata = TRUE;
- create_event_int(player, "attribute-changed", ATTRIBUTE_ARTIST);
+ g_strfreev(split);
}
- if (strstr(mplayer_output->str, "Title: ") != 0) {
- buf = strstr(mplayer_output->str, "Title:");
- buf = strstr(mplayer_output->str, "Title: ") + strlen("Title: ");
- buf = g_strchomp(buf);
- if (player->title != NULL) {
- g_free(player->title);
- player->title = NULL;
- }
+ if (g_regex_match(player->title_regex, mplayer_output->str, 0, NULL)) {
+ split = g_regex_split(player->title_regex, mplayer_output->str, 0);
+ index = 0;
+ while (split[index]) {
+ if (strlen(split[index]) > 0) {
+ if (player->title != NULL) {
+ g_free(player->title);
+ player->title = NULL;
+ }
- player->title = g_locale_to_utf8(buf, -1, NULL, NULL, NULL);
- if (player->title == NULL) {
- player->title = g_strdup(buf);
- gm_str_strip_unicode(player->title, strlen(player->title));
+ player->title = g_locale_to_utf8(split[index], -1, NULL, NULL, NULL);
+ if (player->title == NULL) {
+ player->title = g_strdup(split[index]);
+ gm_str_strip_unicode(player->title, strlen(player->title));
+ }
+ player->has_metadata = TRUE;
+ create_event_int(player, "attribute-changed", ATTRIBUTE_TITLE);
+ }
+ index++;
}
- player->has_metadata = TRUE;
- create_event_int(player, "attribute-changed", ATTRIBUTE_TITLE);
+ g_strfreev(split);
}
- if (strstr(mplayer_output->str, "Artist: ") != 0) {
- buf = strstr(mplayer_output->str, "Artist:");
- buf = strstr(mplayer_output->str, "Artist: ") + strlen("Artist: ");
- buf = g_strchomp(buf);
- if (player->artist != NULL) {
- g_free(player->artist);
- player->artist = NULL;
- }
+ if (g_regex_match(player->artist_regex, mplayer_output->str, 0, NULL)) {
+ split = g_regex_split(player->artist_regex, mplayer_output->str, 0);
+ index = 0;
+ while (split[index]) {
+ if (strlen(split[index]) > 0) {
+ if (player->artist != NULL) {
+ g_free(player->artist);
+ player->artist = NULL;
+ }
- player->artist = g_locale_to_utf8(buf, -1, NULL, NULL, NULL);
- if (player->artist == NULL) {
- player->artist = g_strdup(buf);
- gm_str_strip_unicode(player->artist, strlen(player->artist));
+ player->artist = g_locale_to_utf8(split[index], -1, NULL, NULL, NULL);
+ if (player->artist == NULL) {
+ player->artist = g_strdup(split[index]);
+ gm_str_strip_unicode(player->artist, strlen(player->artist));
+ }
+ player->has_metadata = TRUE;
+ create_event_int(player, "attribute-changed", ATTRIBUTE_ARTIST);
+ }
+ index++;
}
- player->has_metadata = TRUE;
- create_event_int(player, "attribute-changed", ATTRIBUTE_ARTIST);
+ g_strfreev(split);
}
- if (strstr(mplayer_output->str, "Album: ") != 0) {
- buf = strstr(mplayer_output->str, "Album:");
- buf = strstr(mplayer_output->str, "Album: ") + strlen("Album: ");
- buf = g_strchomp(buf);
- if (player->album != NULL) {
- g_free(player->album);
- player->album = NULL;
- }
+ if (g_regex_match(player->album_regex, mplayer_output->str, 0, NULL)) {
+ split = g_regex_split(player->album_regex, mplayer_output->str, 0);
+ index = 0;
+ while (split[index]) {
+ if (strlen(split[index]) > 0) {
+ if (player->album != NULL) {
+ g_free(player->album);
+ player->album = NULL;
+ }
- player->album = g_locale_to_utf8(buf, -1, NULL, NULL, NULL);
- if (player->album == NULL) {
- player->album = g_strdup(buf);
- gm_str_strip_unicode(player->album, strlen(player->album));
+ player->album = g_locale_to_utf8(split[index], -1, NULL, NULL, NULL);
+ if (player->album == NULL) {
+ player->album = g_strdup(split[index]);
+ gm_str_strip_unicode(player->album, strlen(player->album));
+ }
+ player->has_metadata = TRUE;
+ create_event_int(player, "attribute-changed", ATTRIBUTE_ALBUM);
+ }
+ index++;
}
- player->has_metadata = TRUE;
- create_event_int(player, "attribute-changed", ATTRIBUTE_ALBUM);
+ g_strfreev(split);
}
if (player->minimum_mplayer == FALSE) {
--- src/gmtk_media_player.c.orig Fri Aug 16 17:18:55 2013
+++ src/gmtk_media_player.c Mon Oct 7 11:56:50 2013
@@ -834,6 +834,12 @@ static gboolean player_key_press_event_callback(GtkWid
case GDK_o:
write_to_mplayer(player, "osd\n");
break;
+ case GDK_h:
+ write_to_mplayer(player, "tv_step_channel -1\n");
+ break;
+ case GDK_k:
+ write_to_mplayer(player, "tv_step_channel 1\n");
+ break;
default:
gm_log(player->debug, G_LOG_LEVEL_INFO, "ignoring key %s%s%s%s",
(event->state & GDK_CONTROL_MASK) ? "Control-" : "", (event->state & GDK_MOD1_MASK) ? "Alt-" : "",

View File

@ -1,43 +0,0 @@
$OpenBSD: patch-src_gmtk_media_player_h,v 1.6 2013/07/12 09:58:56 dcoppa Exp $
Use case-insensitive parsing of metadata attributes
(upstream svn revision r212)
If the user gives some mplayer video output driver (vo) options in
the "Video Output" preferences they should be passed along on the
mplayer command line (upstream svn revision r222)
--- src/gmtk_media_player.h.orig Tue Feb 19 18:02:13 2013
+++ src/gmtk_media_player.h Thu Jul 11 17:03:07 2013
@@ -182,7 +182,8 @@ typedef enum {
ATTRIBUTE_PROFILE,
ATTRIBUTE_PREFERRED_AUDIO_LANGUAGE,
ATTRIBUTE_PREFERRED_SUBTITLE_LANGUAGE,
- ATTRIBUTE_SPEED_SET
+ ATTRIBUTE_SPEED_SET,
+ ATTRIBUTE_GENRE
} GmtkMediaPlayerMediaAttributes;
typedef enum {
@@ -327,6 +328,7 @@ struct _GmtkMediaPlayer {
gchar *artist;
gchar *title;
gchar *album;
+ gchar *genre;
gboolean enable_divx;
gboolean disable_xvmc;
gboolean retry_on_full_cache;
@@ -398,6 +400,13 @@ struct _GmtkMediaPlayer {
gboolean disposed;
GMutex *player_lock;
+ GRegex *name_regex;
+ GRegex *genre_regex;
+ GRegex *title_regex;
+ GRegex *artist_regex;
+ GRegex *album_regex;
+ GRegex *deintN_regex;
+
};
struct _GmtkMediaPlayerClass {

View File

@ -0,0 +1,12 @@
$OpenBSD: patch-src_gmtk_pc_in,v 1.1 2013/10/07 10:20:29 dcoppa Exp $
--- src/gmtk.pc.in.orig Mon Oct 7 10:54:02 2013
+++ src/gmtk.pc.in Mon Oct 7 10:54:21 2013
@@ -10,7 +10,7 @@ gtk3=@ENABLE_GTK3@
Name: gmtk
Description: Gnome Media Player Toolkit
Version: @VERSION@
-Requires.private: gmlib >= @VERSION@
+Requires.private: gmlib
Requires:
Libs: -L${libdir} -lgmtk
Cflags: -I${includedir}