diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-05-09 17:02:31 +0200 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-05-09 17:02:31 +0200 |
commit | 3c6ffd36bc58c05875957a509117c3136511d0d7 (patch) | |
tree | eeec23a3dd4f2811a3c3dc3f5af6ecd914a71132 | |
parent | 0a6869f2d4bfd639fac3c62953b3d2274bcedae9 (diff) | |
download | experiment-player-3c6ffd36bc58c05875957a509117c3136511d0d7.tar.gz |
use only filenames instead of URIs when working with the VLC player
* under windows, "C:\..." paths are constructed for the quickopen-menu,
they are not accepted by libvlc_media_new_location()
* support both loading filenames and URIs
-rw-r--r-- | lib/gtk-vlc-player/gtk-vlc-player.c | 51 | ||||
-rw-r--r-- | lib/gtk-vlc-player/gtk-vlc-player.h | 4 | ||||
-rw-r--r-- | src/experiment-player.h | 2 | ||||
-rw-r--r-- | src/main.c | 14 |
4 files changed, 47 insertions, 24 deletions
diff --git a/lib/gtk-vlc-player/gtk-vlc-player.c b/lib/gtk-vlc-player/gtk-vlc-player.c index fec9adf..b8582ad 100644 --- a/lib/gtk-vlc-player/gtk-vlc-player.c +++ b/lib/gtk-vlc-player/gtk-vlc-player.c @@ -30,6 +30,16 @@ static inline void update_length(GtkVlcPlayer *player, gint64 new_length); static void vlc_time_changed(const struct libvlc_event_t *event, void *userdata); static void vlc_length_changed(const struct libvlc_event_t *event, void *userdata); +static void vlc_player_load_media(GtkVlcPlayer *player, libvlc_media_t *media); + +enum { + TIME_CHANGED_SIGNAL, + LENGTH_CHANGED_SIGNAL, + LAST_SIGNAL +}; + +static guint gtk_vlc_player_signals[LAST_SIGNAL] = {0, 0}; + GType gtk_vlc_player_get_type(void) { @@ -56,15 +66,6 @@ gtk_vlc_player_get_type(void) return type; } -enum { - TIME_CHANGED_SIGNAL, - LENGTH_CHANGED_SIGNAL, - LAST_SIGNAL -}; - - -static guint gtk_vlc_player_signals[LAST_SIGNAL] = {0, 0}; - static void gtk_vlc_player_class_init(GtkVlcPlayerClass *klass) { @@ -252,22 +253,40 @@ gtk_vlc_player_new(void) return GTK_WIDGET(g_object_new(GTK_TYPE_VLC_PLAYER, NULL)); } +static void +vlc_player_load_media(GtkVlcPlayer *player, libvlc_media_t *media) +{ + libvlc_media_parse(media); + libvlc_media_player_set_media(player->media_player, media); + + /* NOTE: media was parsed so get_duration works */ + update_length(player, (gint64)libvlc_media_get_duration(media)); + update_time(player, 0); +} + gboolean -gtk_vlc_player_load(GtkVlcPlayer *player, const gchar *uri) +gtk_vlc_player_load_filename(GtkVlcPlayer *player, const gchar *file) { libvlc_media_t *media; - media = libvlc_media_new_location(player->vlc_inst, (const char *)uri); + media = libvlc_media_new_path(player->vlc_inst, (const char *)file); if (media == NULL) return TRUE; + vlc_player_load_media(player, media); + libvlc_media_release(media); - libvlc_media_parse(media); - libvlc_media_player_set_media(player->media_player, media); + return FALSE; +} - /* NOTE: media was parsed so get_duration works */ - update_length(player, (gint64)libvlc_media_get_duration(media)); - update_time(player, 0); +gboolean +gtk_vlc_player_load_uri(GtkVlcPlayer *player, const gchar *uri) +{ + libvlc_media_t *media; + media = libvlc_media_new_location(player->vlc_inst, (const char *)uri); + if (media == NULL) + return TRUE; + vlc_player_load_media(player, media); libvlc_media_release(media); return FALSE; diff --git a/lib/gtk-vlc-player/gtk-vlc-player.h b/lib/gtk-vlc-player/gtk-vlc-player.h index 665f980..969aa6d 100644 --- a/lib/gtk-vlc-player/gtk-vlc-player.h +++ b/lib/gtk-vlc-player/gtk-vlc-player.h @@ -50,7 +50,9 @@ GType gtk_vlc_player_get_type(void); * API */ GtkWidget *gtk_vlc_player_new(void); -gboolean gtk_vlc_player_load(GtkVlcPlayer *player, const gchar *uri); + +gboolean gtk_vlc_player_load_filename(GtkVlcPlayer *player, const gchar *file); +gboolean gtk_vlc_player_load_uri(GtkVlcPlayer *player, const gchar *uri); void gtk_vlc_player_play(GtkVlcPlayer *player); void gtk_vlc_player_pause(GtkVlcPlayer *player); diff --git a/src/experiment-player.h b/src/experiment-player.h index e8a145f..9fb2faa 100644 --- a/src/experiment-player.h +++ b/src/experiment-player.h @@ -3,7 +3,7 @@ #include <gtk/gtk.h> -gboolean load_media_file(const gchar *uri); +gboolean load_media_file(const gchar *file); extern GtkWidget *player_window; @@ -60,14 +60,16 @@ file_menu_openmovie_item_activate_cb(GtkWidget *widget, NULL); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { - gchar *uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog)); + gchar *file; - if (load_media_file(uri)) { + file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + + if (load_media_file(file)) { /* TODO */ } refresh_quickopen_menu(GTK_MENU(quickopen_menu)); - g_free(uri); + g_free(file); } gtk_widget_destroy(dialog); @@ -103,13 +105,13 @@ button_image_set_from_stock(GtkButton *widget, const gchar *name) } gboolean -load_media_file(const gchar *uri) +load_media_file(const gchar *file) { - if (gtk_vlc_player_load(GTK_VLC_PLAYER(player_widget), uri)) + if (gtk_vlc_player_load_filename(GTK_VLC_PLAYER(player_widget), file)) return TRUE; g_free(current_filename); - current_filename = g_strdup(uri); + current_filename = g_strdup(file); gtk_widget_set_sensitive(controls_hbox, TRUE); |