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 /lib | |
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
Diffstat (limited to 'lib')
-rw-r--r-- | lib/gtk-vlc-player/gtk-vlc-player.c | 51 | ||||
-rw-r--r-- | lib/gtk-vlc-player/gtk-vlc-player.h | 4 |
2 files changed, 38 insertions, 17 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); |