gtk-play: Port to GstPlay

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-examples/-/merge_requests/33>
This commit is contained in:
Philippe Normand 2020-12-06 12:24:40 +00:00 committed by Philippe Normand
parent 840fcf43f5
commit e0c77b75cd
4 changed files with 179 additions and 170 deletions

View file

@ -37,7 +37,7 @@
#include <gtk/gtk.h>
#include <gst/player/player.h>
#include <gst/play/play.h>
#include "gtk-video-renderer.h"
#define APP_NAME "gtk-play"
@ -58,8 +58,9 @@ typedef struct
{
GtkApplicationWindow parent;
GstPlayer *player;
GstPlayerVideoRenderer *renderer;
GstPlay *player;
GstPlaySignalAdapter *signal_adapter;
GstPlayVideoRenderer *renderer;
GList *uris;
GList *current_uri;
@ -204,11 +205,11 @@ gtk_play_set_rate (GtkPlay * play, gdouble step)
{
gdouble val;
val = gst_player_get_rate (play->player);
val = gst_play_get_rate (play->player);
val += step;
if (val == 0.0)
val = step;
gst_player_set_rate (play->player, val);
gst_play_set_rate (play->player, val);
if (val == 1.0)
gtk_label_set_label (play->rate_label, NULL);
@ -302,7 +303,7 @@ key_press_event_cb (GtkWidget * widget, GdkEventKey * event, gpointer data)
}
case GDK_KEY_BackSpace:{
/* Reset playback speed to normal */
gdouble val = gst_player_get_rate (play->player);
gdouble val = gst_play_get_rate (play->player);
gtk_play_set_rate (play, 1.0 - val);
break;
}
@ -322,7 +323,7 @@ key_press_event_cb (GtkWidget * widget, GdkEventKey * event, gpointer data)
case GDK_KEY_KP_9:
case GDK_KEY_9:{
/* Increase volume */
gdouble volume = gst_player_get_volume (play->player);
gdouble volume = gst_play_get_volume (play->player);
gtk_scale_button_set_value (GTK_SCALE_BUTTON (play->volume_button),
volume * 1.10);
break;
@ -330,15 +331,15 @@ key_press_event_cb (GtkWidget * widget, GdkEventKey * event, gpointer data)
case GDK_KEY_KP_0:
case GDK_KEY_0:{
/* Decrease volume */
gdouble volume = gst_player_get_volume (play->player);
gdouble volume = gst_play_get_volume (play->player);
gtk_scale_button_set_value (GTK_SCALE_BUTTON (play->volume_button),
volume * 0.9);
break;
}
case GDK_KEY_m:{
/* Mute sound */
gboolean mute = gst_player_get_mute (play->player);
gst_player_set_mute (play->player, !mute);
gboolean mute = gst_play_get_mute (play->player);
gst_play_set_mute (play->player, !mute);
break;
}
case GDK_KEY_f:{
@ -380,7 +381,7 @@ play_pause_button_clicked_cb (GtkButton * button, GtkPlay * play)
GtkWidget *image;
if (play->playing) {
gst_player_pause (play->player);
gst_play_pause (play->player);
image = TOOLBAR_GET_OBJECT (play_image);
gtk_button_set_image (GTK_BUTTON (play->play_pause_button), image);
play->playing = FALSE;
@ -397,7 +398,7 @@ play_pause_button_clicked_cb (GtkButton * button, GtkPlay * play)
gtk_application_inhibit (GTK_APPLICATION (g_application_get_default ()),
GTK_WINDOW (play), GTK_APPLICATION_INHIBIT_IDLE, "Playing media");
gst_player_play (play->player);
gst_play_play (play->player);
image = TOOLBAR_GET_OBJECT (pause_image);
gtk_button_set_image (GTK_BUTTON (play->play_pause_button), image);
play->playing = TRUE;
@ -419,9 +420,9 @@ play_current_uri (GtkPlay * play, GList * uri, const gchar * ext_suburi)
/* set uri or suburi */
if (ext_suburi)
gst_player_set_subtitle_uri (play->player, ext_suburi);
gst_play_set_subtitle_uri (play->player, ext_suburi);
else
gst_player_set_uri (play->player, uri->data);
gst_play_set_uri (play->player, uri->data);
play->current_uri = uri;
if (play->playing) {
if (play->inhibit_cookie)
@ -430,9 +431,9 @@ play_current_uri (GtkPlay * play, GList * uri, const gchar * ext_suburi)
play->inhibit_cookie =
gtk_application_inhibit (GTK_APPLICATION (g_application_get_default ()),
GTK_WINDOW (play), GTK_APPLICATION_INHIBIT_IDLE, "Playing media");
gst_player_play (play->player);
gst_play_play (play->player);
} else {
gst_player_pause (play->player);
gst_play_pause (play->player);
if (play->inhibit_cookie)
gtk_application_uninhibit (GTK_APPLICATION (g_application_get_default ()),
play->inhibit_cookie);
@ -456,12 +457,12 @@ static gboolean
color_balance_channel_change_value_cb (GtkRange * range, GtkScrollType scroll,
gdouble value, GtkPlay * play)
{
GstPlayerColorBalanceType type;
GstPlayColorBalanceType type;
type = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (range), "type"));
value = CLAMP (value, 0.0, 1.0);
gst_player_set_color_balance (play->player, type, value);
gst_play_set_color_balance (play->player, type, value);
return FALSE;
}
@ -470,14 +471,14 @@ static gboolean
color_balance_channel_button_press_cb (GtkWidget * widget,
GdkEventButton * event, GtkPlay * play)
{
GstPlayerColorBalanceType type;
GstPlayColorBalanceType type;
if (event->type != GDK_2BUTTON_PRESS)
return FALSE;
type = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (widget), "type"));
gtk_range_set_value (GTK_RANGE (widget), 0.5);
gst_player_set_color_balance (play->player, type, 0.5);
gst_play_set_color_balance (play->player, type, 0.5);
return FALSE;
}
@ -503,10 +504,10 @@ color_balance_dialog (GtkPlay * play)
gtk_box_set_homogeneous (GTK_BOX (box), TRUE);
gtk_box_pack_start (GTK_BOX (content), box, TRUE, TRUE, 5);
for (i = GST_PLAYER_COLOR_BALANCE_BRIGHTNESS;
i <= GST_PLAYER_COLOR_BALANCE_HUE; i++) {
for (i = GST_PLAY_COLOR_BALANCE_BRIGHTNESS;
i <= GST_PLAY_COLOR_BALANCE_HUE; i++) {
ctlbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
label = gtk_label_new (gst_player_color_balance_type_get_name (i));
label = gtk_label_new (gst_play_color_balance_type_get_name (i));
scale = gtk_scale_new_with_range (GTK_ORIENTATION_VERTICAL, 0, 1, 0.5);
gtk_widget_set_size_request (scale, 0, 200);
gtk_box_pack_start (GTK_BOX (ctlbox), label, FALSE, TRUE, 2);
@ -514,7 +515,7 @@ color_balance_dialog (GtkPlay * play)
gtk_box_pack_end (GTK_BOX (box), ctlbox, TRUE, TRUE, 2);
value = gst_player_get_color_balance (play->player, i);
value = gst_play_get_color_balance (play->player, i);
gtk_range_set_value (GTK_RANGE (scale), value);
g_object_set_data (G_OBJECT (scale), "type", GUINT_TO_POINTER (i));
@ -534,7 +535,7 @@ color_balance_dialog (GtkPlay * play)
static void
color_balance_clicked_cb (GtkWidget * unused, GtkPlay * play)
{
if (gst_player_has_color_balance (play->player)) {
if (gst_play_has_color_balance (play->player)) {
color_balance_dialog (play);
return;
}
@ -623,31 +624,31 @@ audio_channels_string (gint num)
}
static gchar *
stream_info_get_string (GstPlayerStreamInfo * stream, gint type, gboolean label)
stream_info_get_string (GstPlayStreamInfo * stream, gint type, gboolean label)
{
gchar *buffer = NULL;
switch (type) {
case AUDIO_INFO_RATE:
{
GstPlayerAudioInfo *audio = (GstPlayerAudioInfo *) stream;
GstPlayAudioInfo *audio = (GstPlayAudioInfo *) stream;
buffer = g_strdup_printf ("%s%d", label ? "Sample rate : " : "",
gst_player_audio_info_get_sample_rate (audio));
gst_play_audio_info_get_sample_rate (audio));
break;
}
case AUDIO_INFO_LANGUAGE:
{
GstPlayerAudioInfo *audio = (GstPlayerAudioInfo *) stream;
const gchar *lang = gst_player_audio_info_get_language (audio);
GstPlayAudioInfo *audio = (GstPlayAudioInfo *) stream;
const gchar *lang = gst_play_audio_info_get_language (audio);
if (lang)
buffer = g_strdup_printf ("%s%s", label ? "Language : " : "", lang);
break;
}
case AUDIO_INFO_CHANNELS:
{
GstPlayerAudioInfo *audio = (GstPlayerAudioInfo *) stream;
GstPlayAudioInfo *audio = (GstPlayAudioInfo *) stream;
buffer = g_strdup_printf ("%s%s", label ? "Channels : " : "",
audio_channels_string (gst_player_audio_info_get_channels (audio)));
audio_channels_string (gst_play_audio_info_get_channels (audio)));
break;
}
case SUBTITLE_INFO_CODEC:
@ -655,13 +656,13 @@ stream_info_get_string (GstPlayerStreamInfo * stream, gint type, gboolean label)
case AUDIO_INFO_CODEC:
{
buffer = g_strdup_printf ("%s%s", label ? "Codec : " : "",
gst_player_stream_info_get_codec (stream));
gst_play_stream_info_get_codec (stream));
break;
}
case AUDIO_INFO_MAX_BITRATE:
{
GstPlayerAudioInfo *audio = (GstPlayerAudioInfo *) stream;
gint bitrate = gst_player_audio_info_get_max_bitrate (audio);
GstPlayAudioInfo *audio = (GstPlayAudioInfo *) stream;
gint bitrate = gst_play_audio_info_get_max_bitrate (audio);
if (bitrate > 0)
buffer = g_strdup_printf ("%s%d", label ? "Max bitrate : " : "",
@ -670,8 +671,8 @@ stream_info_get_string (GstPlayerStreamInfo * stream, gint type, gboolean label)
}
case VIDEO_INFO_MAX_BITRATE:
{
GstPlayerVideoInfo *video = (GstPlayerVideoInfo *) stream;
gint bitrate = gst_player_video_info_get_max_bitrate (video);
GstPlayVideoInfo *video = (GstPlayVideoInfo *) stream;
gint bitrate = gst_play_video_info_get_max_bitrate (video);
if (bitrate > 0)
buffer = g_strdup_printf ("%s%d", label ? "Max bitrate : " : "",
@ -681,9 +682,9 @@ stream_info_get_string (GstPlayerStreamInfo * stream, gint type, gboolean label)
case VIDEO_INFO_PAR:
{
guint par_d, par_n;
GstPlayerVideoInfo *video = (GstPlayerVideoInfo *) stream;
GstPlayVideoInfo *video = (GstPlayVideoInfo *) stream;
gst_player_video_info_get_pixel_aspect_ratio (video, &par_n, &par_d);
gst_play_video_info_get_pixel_aspect_ratio (video, &par_n, &par_d);
buffer = g_strdup_printf ("%s%u:%u", label ? "pixel-aspect-ratio : " :
"", par_n, par_d);
break;
@ -691,26 +692,26 @@ stream_info_get_string (GstPlayerStreamInfo * stream, gint type, gboolean label)
case VIDEO_INFO_FPS:
{
gint fps_d, fps_n;
GstPlayerVideoInfo *video = (GstPlayerVideoInfo *) stream;
GstPlayVideoInfo *video = (GstPlayVideoInfo *) stream;
gst_player_video_info_get_framerate (video, &fps_n, &fps_d);
gst_play_video_info_get_framerate (video, &fps_n, &fps_d);
buffer = g_strdup_printf ("%s%.2f", label ? "Framerate : " : "",
(gdouble) fps_n / fps_d);
break;
}
case VIDEO_INFO_RESOLUTION:
{
GstPlayerVideoInfo *video = (GstPlayerVideoInfo *) stream;
GstPlayVideoInfo *video = (GstPlayVideoInfo *) stream;
buffer = g_strdup_printf ("%s%dx%d", label ? "Resolution : " : "",
gst_player_video_info_get_width (video),
gst_player_video_info_get_height (video));
gst_play_video_info_get_width (video),
gst_play_video_info_get_height (video));
break;
}
case SUBTITLE_INFO_LANGUAGE:
{
GstPlayerSubtitleInfo *sub = (GstPlayerSubtitleInfo *) stream;
GstPlaySubtitleInfo *sub = (GstPlaySubtitleInfo *) stream;
buffer = g_strdup_printf ("%s%s", label ? "Language : " : "",
gst_player_subtitle_info_get_language (sub));
gst_play_subtitle_info_get_language (sub));
break;
}
default:
@ -720,23 +721,23 @@ stream_info_get_string (GstPlayerStreamInfo * stream, gint type, gboolean label)
}
static void
fill_tree_model (GtkTreeStore * tree, GtkPlay * play, GstPlayerMediaInfo * info)
fill_tree_model (GtkTreeStore * tree, GtkPlay * play, GstPlayMediaInfo * info)
{
GList *l;
guint count;
GtkTreeIter child, parent;
count = 0;
for (l = gst_player_media_info_get_stream_list (info); l != NULL; l = l->next) {
for (l = gst_play_media_info_get_stream_list (info); l != NULL; l = l->next) {
gchar *buffer;
gint i, start, end;
GstPlayerStreamInfo *stream = (GstPlayerStreamInfo *) l->data;
GstPlayStreamInfo *stream = (GstPlayStreamInfo *) l->data;
/* define the field range based on stream type */
if (GST_IS_PLAYER_VIDEO_INFO (stream)) {
if (GST_IS_PLAY_VIDEO_INFO (stream)) {
start = VIDEO_INFO_START + 1;
end = VIDEO_INFO_END;
} else if (GST_IS_PLAYER_AUDIO_INFO (stream)) {
} else if (GST_IS_PLAY_AUDIO_INFO (stream)) {
start = AUDIO_INFO_START + 1;
end = AUDIO_INFO_END;
} else {
@ -750,7 +751,7 @@ fill_tree_model (GtkTreeStore * tree, GtkPlay * play, GstPlayerMediaInfo * info)
g_free (buffer);
buffer = g_strdup_printf ("Type : %s",
gst_player_stream_info_get_stream_type (stream));
gst_play_stream_info_get_stream_type (stream));
gtk_tree_store_append (tree, &child, &parent);
gtk_tree_store_set (tree, &child, COL_TEXT, buffer, -1);
g_free (buffer);
@ -774,7 +775,7 @@ media_info_dialog_button_clicked_cb (GtkButton * button, GtkPlay * play)
}
static void
media_info_dialog (GtkPlay * play, GstPlayerMediaInfo * media_info)
media_info_dialog (GtkPlay * play, GstPlayMediaInfo * media_info)
{
GtkBuilder *dialog_ui;
GtkWidget *view;
@ -814,9 +815,9 @@ media_info_dialog (GtkPlay * play, GstPlayerMediaInfo * media_info)
static void
media_info_clicked_cb (GtkButton * button, GtkPlay * play)
{
GstPlayerMediaInfo *media_info;
GstPlayMediaInfo *media_info;
media_info = gst_player_get_media_info (play->player);
media_info = gst_play_get_media_info (play->player);
if (!media_info)
return;
@ -891,25 +892,25 @@ G_MODULE_EXPORT void
seekbar_value_changed_cb (GtkRange * range, GtkPlay * play)
{
gdouble value = gtk_range_get_value (GTK_RANGE (play->seekbar));
gst_player_seek (play->player, gst_util_uint64_scale (value, GST_SECOND, 1));
gst_play_seek (play->player, gst_util_uint64_scale (value, GST_SECOND, 1));
}
G_MODULE_EXPORT void
volume_button_value_changed_cb (GtkScaleButton * button, gdouble value,
GtkPlay * play)
{
gst_player_set_volume (play->player, value);
gst_play_set_volume (play->player, value);
}
static gint
_get_current_track_index (GtkPlay * play, void *(*func) (GstPlayer * player))
_get_current_track_index (GtkPlay * play, void *(*func) (GstPlay * player))
{
void *obj;
gint index = -1;
obj = func (play->player);
if (obj) {
index = gst_player_stream_info_get_index ((GstPlayerStreamInfo *) obj);
index = gst_play_stream_info_get_index ((GstPlayStreamInfo *) obj);
g_object_unref (obj);
}
@ -919,21 +920,21 @@ _get_current_track_index (GtkPlay * play, void *(*func) (GstPlayer * player))
static gint
get_current_track_index (GtkPlay * play, GType type)
{
if (type == GST_TYPE_PLAYER_VIDEO_INFO)
if (type == GST_TYPE_PLAY_VIDEO_INFO)
return _get_current_track_index (play,
(void *) gst_player_get_current_video_track);
else if (type == GST_TYPE_PLAYER_AUDIO_INFO)
(void *) gst_play_get_current_video_track);
else if (type == GST_TYPE_PLAY_AUDIO_INFO)
return _get_current_track_index (play,
(void *) gst_player_get_current_audio_track);
(void *) gst_play_get_current_audio_track);
else
return _get_current_track_index (play,
(void *) gst_player_get_current_subtitle_track);
(void *) gst_play_get_current_subtitle_track);
}
static gchar *
get_menu_label (GstPlayerStreamInfo * stream, GType type)
get_menu_label (GstPlayStreamInfo * stream, GType type)
{
if (type == GST_TYPE_PLAYER_AUDIO_INFO) {
if (type == GST_TYPE_PLAY_AUDIO_INFO) {
gchar *label = NULL;
gchar *lang, *codec, *channels;
@ -953,7 +954,7 @@ get_menu_label (GstPlayerStreamInfo * stream, GType type)
g_free (codec);
g_free (channels);
return label;
} else if (type == GST_TYPE_PLAYER_VIDEO_INFO) {
} else if (type == GST_TYPE_PLAY_VIDEO_INFO) {
/* label format: <codec_name> */
return stream_info_get_string (stream, VIDEO_INFO_CODEC, FALSE);
} else {
@ -979,26 +980,26 @@ new_subtitle_clicked_cb (GtkWidget * unused, GtkPlay * play)
static void
disable_track (GtkPlay * play, GType type)
{
if (type == GST_TYPE_PLAYER_VIDEO_INFO) {
gst_player_set_video_track_enabled (play->player, FALSE);
} else if (type == GST_TYPE_PLAYER_AUDIO_INFO)
gst_player_set_audio_track_enabled (play->player, FALSE);
if (type == GST_TYPE_PLAY_VIDEO_INFO) {
gst_play_set_video_track_enabled (play->player, FALSE);
} else if (type == GST_TYPE_PLAY_AUDIO_INFO)
gst_play_set_audio_track_enabled (play->player, FALSE);
else
gst_player_set_subtitle_track_enabled (play->player, FALSE);
gst_play_set_subtitle_track_enabled (play->player, FALSE);
}
static void
change_track (GtkPlay * play, gint index, GType type)
{
if (type == GST_TYPE_PLAYER_VIDEO_INFO) {
gst_player_set_video_track (play->player, index);
gst_player_set_video_track_enabled (play->player, TRUE);
} else if (type == GST_TYPE_PLAYER_AUDIO_INFO) {
gst_player_set_audio_track (play->player, index);
gst_player_set_audio_track_enabled (play->player, TRUE);
if (type == GST_TYPE_PLAY_VIDEO_INFO) {
gst_play_set_video_track (play->player, index);
gst_play_set_video_track_enabled (play->player, TRUE);
} else if (type == GST_TYPE_PLAY_AUDIO_INFO) {
gst_play_set_audio_track (play->player, index);
gst_play_set_audio_track_enabled (play->player, TRUE);
} else {
gst_player_set_subtitle_track (play->player, index);
gst_player_set_subtitle_track_enabled (play->player, TRUE);
gst_play_set_subtitle_track (play->player, index);
gst_play_set_subtitle_track_enabled (play->player, TRUE);
}
}
@ -1029,14 +1030,14 @@ visualization_changed_cb (GtkWidget * widget, GtkPlay * play)
if (gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (widget))) {
name = g_object_get_data (G_OBJECT (widget), "name");
if (g_strcmp0 (name, "disable") == 0) {
gst_player_set_visualization_enabled (play->player, FALSE);
gst_play_set_visualization_enabled (play->player, FALSE);
} else {
const gchar *vis_name;
gst_player_set_visualization (play->player, name);
gst_play_set_visualization (play->player, name);
/* if visualization is not enabled then enable it */
if (!(vis_name = gst_player_get_current_visualization (play->player))) {
gst_player_set_visualization_enabled (play->player, TRUE);
if (!(vis_name = gst_play_get_current_visualization (play->player))) {
gst_play_set_visualization_enabled (play->player, TRUE);
}
}
}
@ -1050,11 +1051,11 @@ create_visualization_menu (GtkPlay * play)
GtkWidget *sep;
GSList *group = NULL;
const gchar *cur_vis;
GstPlayerVisualization **viss, **p;
GstPlayVisualization **viss, **p;
menu = gtk_menu_new ();
cur_vis = gst_player_get_current_visualization (play->player);
viss = gst_player_visualizations_get ();
cur_vis = gst_play_get_current_visualization (play->player);
viss = gst_play_visualizations_get ();
p = viss;
while (*p) {
@ -1071,7 +1072,7 @@ create_visualization_menu (GtkPlay * play)
G_CALLBACK (visualization_changed_cb), play);
p++;
}
gst_player_visualizations_free (viss);
gst_play_visualizations_free (viss);
sep = gtk_separator_menu_item_new ();
item = gtk_radio_menu_item_new_with_label (group, "Disable");
@ -1088,7 +1089,7 @@ create_visualization_menu (GtkPlay * play)
}
static GtkWidget *
create_tracks_menu (GtkPlay * play, GstPlayerMediaInfo * media_info, GType type)
create_tracks_menu (GtkPlay * play, GstPlayMediaInfo * media_info, GType type)
{
GtkWidget *menu;
GtkWidget *item;
@ -1102,16 +1103,16 @@ create_tracks_menu (GtkPlay * play, GstPlayerMediaInfo * media_info, GType type)
current_index = get_current_track_index (play, type);
if (type == GST_TYPE_PLAYER_VIDEO_INFO)
list = gst_player_media_info_get_video_streams (media_info);
else if (type == GST_TYPE_PLAYER_AUDIO_INFO)
list = gst_player_media_info_get_audio_streams (media_info);
if (type == GST_TYPE_PLAY_VIDEO_INFO)
list = gst_play_media_info_get_video_streams (media_info);
else if (type == GST_TYPE_PLAY_AUDIO_INFO)
list = gst_play_media_info_get_audio_streams (media_info);
else
list = gst_player_media_info_get_subtitle_streams (media_info);
list = gst_play_media_info_get_subtitle_streams (media_info);
menu = gtk_menu_new ();
if (type == GST_TYPE_PLAYER_SUBTITLE_INFO) {
if (type == GST_TYPE_PLAY_SUBTITLE_INFO) {
GtkWidget *ext_subtitle;
ext_subtitle = gtk_menu_item_new_with_label ("New File");
sep = gtk_separator_menu_item_new ();
@ -1124,12 +1125,12 @@ create_tracks_menu (GtkPlay * play, GstPlayerMediaInfo * media_info, GType type)
for (l = list; l != NULL; l = l->next) {
gint index;
gchar *buffer;
GstPlayerStreamInfo *s = (GstPlayerStreamInfo *) l->data;
GstPlayStreamInfo *s = (GstPlayStreamInfo *) l->data;
buffer = get_menu_label (s, type);
item = gtk_radio_menu_item_new_with_label (group, buffer);
group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (item));
index = gst_player_stream_info_get_index (s);
index = gst_play_stream_info_get_index (s);
g_object_set_data (G_OBJECT (item), "index", GINT_TO_POINTER (index));
g_object_set_data (G_OBJECT (item), "type", GSIZE_TO_POINTER (type));
if (current_index == index)
@ -1176,7 +1177,7 @@ gtk_player_popup_menu_create (GtkPlay * play, GdkEventButton * event)
GtkWidget *submenu;
GtkWidget *vis;
GtkWidget *cb;
GstPlayerMediaInfo *media_info;
GstPlayMediaInfo *media_info;
menu = gtk_menu_new ();
info = gtk_menu_item_new_with_label ("Media Information");
@ -1190,22 +1191,22 @@ gtk_player_popup_menu_create (GtkPlay * play, GdkEventButton * event)
vis = gtk_menu_item_new_with_label ("Visualization");
cb = gtk_menu_item_new_with_label ("Color Balance");
media_info = gst_player_get_media_info (play->player);
media_info = gst_play_get_media_info (play->player);
if (media_info && !gst_player_media_info_get_video_streams (media_info))
if (media_info && !gst_play_media_info_get_video_streams (media_info))
gtk_widget_set_sensitive (video, FALSE);
else {
submenu = create_tracks_menu (play, media_info, GST_TYPE_PLAYER_VIDEO_INFO);
submenu = create_tracks_menu (play, media_info, GST_TYPE_PLAY_VIDEO_INFO);
if (submenu)
gtk_menu_item_set_submenu (GTK_MENU_ITEM (video), submenu);
else
gtk_widget_set_sensitive (video, FALSE);
}
if (media_info && !gst_player_media_info_get_audio_streams (media_info))
if (media_info && !gst_play_media_info_get_audio_streams (media_info))
gtk_widget_set_sensitive (audio, FALSE);
else {
submenu = create_tracks_menu (play, media_info, GST_TYPE_PLAYER_AUDIO_INFO);
submenu = create_tracks_menu (play, media_info, GST_TYPE_PLAY_AUDIO_INFO);
if (submenu)
gtk_menu_item_set_submenu (GTK_MENU_ITEM (audio), submenu);
else
@ -1214,17 +1215,17 @@ gtk_player_popup_menu_create (GtkPlay * play, GdkEventButton * event)
/* enable visualization menu for audio stream */
if (media_info &&
gst_player_media_info_get_audio_streams (media_info) &&
!gst_player_media_info_get_video_streams (media_info)) {
gst_play_media_info_get_audio_streams (media_info) &&
!gst_play_media_info_get_video_streams (media_info)) {
submenu = create_visualization_menu (play);
gtk_menu_item_set_submenu (GTK_MENU_ITEM (vis), submenu);
} else {
gtk_widget_set_sensitive (vis, FALSE);
}
if (media_info && gst_player_media_info_get_video_streams (media_info)) {
if (media_info && gst_play_media_info_get_video_streams (media_info)) {
submenu = create_tracks_menu (play, media_info,
GST_TYPE_PLAYER_SUBTITLE_INFO);
GST_TYPE_PLAY_SUBTITLE_INFO);
gtk_menu_item_set_submenu (GTK_MENU_ITEM (sub), submenu);
} else {
gtk_widget_set_sensitive (sub, FALSE);
@ -1235,7 +1236,7 @@ gtk_player_popup_menu_create (GtkPlay * play, GdkEventButton * event)
gtk_widget_set_sensitive (prev, g_list_previous
(play->current_uri) ? TRUE : FALSE);
gtk_widget_set_sensitive (info, media_info ? TRUE : FALSE);
gtk_widget_set_sensitive (cb, gst_player_has_color_balance (play->player) ?
gtk_widget_set_sensitive (cb, gst_play_has_color_balance (play->player) ?
TRUE : FALSE);
g_signal_connect (G_OBJECT (open), "activate",
@ -1424,14 +1425,14 @@ create_ui (GtkPlay * play)
gtk_application_add_window (GTK_APPLICATION (g_application_get_default ()),
GTK_WINDOW (play));
play->renderer = gst_player_gtk_video_renderer_new ();
play->renderer = gst_play_gtk_video_renderer_new ();
if (play->renderer) {
play->video_area =
gst_player_gtk_video_renderer_get_widget (GST_PLAYER_GTK_VIDEO_RENDERER
gst_play_gtk_video_renderer_get_widget (GST_PLAY_GTK_VIDEO_RENDERER
(play->renderer));
g_object_unref (play->video_area);
} else {
play->renderer = gst_player_video_overlay_video_renderer_new (NULL);
play->renderer = gst_play_video_overlay_video_renderer_new (NULL);
play->video_area = gtk_drawing_area_new ();
g_signal_connect (play->video_area, "realize",
@ -1510,7 +1511,7 @@ create_ui (GtkPlay * play)
}
static void
duration_changed_cb (GstPlayer * unused, GstClockTime duration, GtkPlay * play)
duration_changed_cb (GstPlay * unused, GstClockTime duration, GtkPlay * play)
{
g_signal_handlers_block_by_func (play->seekbar,
seekbar_value_changed_cb, play);
@ -1541,22 +1542,26 @@ update_position_label (GtkLabel * label, guint64 seconds)
}
static void
position_updated_cb (GstPlayer * unused, GstClockTime position, GtkPlay * play)
position_updated_cb (GstPlaySignalAdapter * unused, GstClockTime position,
GtkPlay * play)
{
if (!GST_IS_PLAY (play->player))
return;
g_signal_handlers_block_by_func (play->seekbar,
seekbar_value_changed_cb, play);
gtk_range_set_value (GTK_RANGE (play->seekbar),
(gdouble) position / GST_SECOND);
update_position_label (play->elapshed_label, position / GST_SECOND);
update_position_label (play->remain_label,
GST_CLOCK_DIFF (position, gst_player_get_duration (play->player)) /
GST_CLOCK_DIFF (position, gst_play_get_duration (play->player)) /
GST_SECOND);
g_signal_handlers_unblock_by_func (play->seekbar,
seekbar_value_changed_cb, play);
}
static void
eos_cb (GstPlayer * unused, GtkPlay * play)
eos_cb (GstPlaySignalAdapter * unused, GtkPlay * play)
{
if (play->playing) {
GList *next = NULL;
@ -1570,7 +1575,7 @@ eos_cb (GstPlayer * unused, GtkPlay * play)
} else {
GtkWidget *image;
gst_player_pause (play->player);
gst_play_pause (play->player);
image = TOOLBAR_GET_OBJECT (play_image);
gtk_button_set_image (GTK_BUTTON (play->play_pause_button), image);
play->playing = FALSE;
@ -1583,7 +1588,7 @@ eos_cb (GstPlayer * unused, GtkPlay * play)
}
static GdkPixbuf *
gtk_play_get_cover_image (GstPlayerMediaInfo * media_info)
gtk_play_get_cover_image (GstPlayMediaInfo * media_info)
{
GstSample *sample;
GstMapInfo info;
@ -1595,7 +1600,7 @@ gtk_play_get_cover_image (GstPlayerMediaInfo * media_info)
GstTagImageType type = GST_TAG_IMAGE_TYPE_UNDEFINED;
/* get image sample buffer from media */
sample = gst_player_media_info_get_image_sample (media_info);
sample = gst_play_media_info_get_image_sample (media_info);
if (!sample)
return NULL;
@ -1640,19 +1645,19 @@ gtk_play_get_cover_image (GstPlayerMediaInfo * media_info)
}
static void
media_info_updated_cb (GstPlayer * player, GstPlayerMediaInfo * media_info,
GtkPlay * play)
media_info_updated_cb (GstPlaySignalAdapter * adapter,
GstPlayMediaInfo * media_info, GtkPlay * play)
{
const gchar *title;
GdkPixbuf *pixbuf;
gchar *basename = NULL;
gchar *filename = NULL;
title = gst_player_media_info_get_title (media_info);
title = gst_play_media_info_get_title (media_info);
if (!title) {
filename =
g_filename_from_uri (gst_player_media_info_get_uri (media_info), NULL,
g_filename_from_uri (gst_play_media_info_get_uri (media_info), NULL,
NULL);
basename = g_path_get_basename (filename);
}
@ -1671,12 +1676,12 @@ media_info_updated_cb (GstPlayer * player, GstPlayerMediaInfo * media_info,
}
static void
player_volume_changed_cb (GstPlayer * player, GtkPlay * play)
player_volume_changed_cb (GstPlaySignalAdapter * adapter, GtkPlay * play)
{
gdouble new_val, cur_val;
cur_val = gtk_scale_button_get_value (GTK_SCALE_BUTTON (play->volume_button));
new_val = gst_player_get_volume (play->player);
new_val = gst_play_get_volume (play->player);
if (fabs (cur_val - new_val) > 0.001) {
g_signal_handlers_block_by_func (play->volume_button,
@ -1742,22 +1747,23 @@ gtk_play_constructor (GType type, guint n_construct_params,
create_ui (self);
self->player =
gst_player_new (self->renderer);
self->player = gst_play_new (self->renderer);
self->signal_adapter = gst_play_signal_adapter_new (self->player);
g_signal_connect (self->player, "position-updated",
g_signal_connect (self->signal_adapter, "position-updated",
G_CALLBACK (position_updated_cb), self);
g_signal_connect (self->player, "duration-changed",
g_signal_connect (self->signal_adapter, "duration-changed",
G_CALLBACK (duration_changed_cb), self);
g_signal_connect (self->player, "end-of-stream", G_CALLBACK (eos_cb), self);
g_signal_connect (self->player, "media-info-updated",
g_signal_connect (self->signal_adapter, "end-of-stream", G_CALLBACK (eos_cb),
self);
g_signal_connect (self->signal_adapter, "media-info-updated",
G_CALLBACK (media_info_updated_cb), self);
g_signal_connect (self->player, "volume-changed",
g_signal_connect (self->signal_adapter, "volume-changed",
G_CALLBACK (player_volume_changed_cb), self);
/* enable visualization (by default playbin uses goom) */
/* if visualization is enabled then use the first element */
gst_player_set_visualization_enabled (self->player, TRUE);
gst_play_set_visualization_enabled (self->player, TRUE);
g_signal_connect (G_OBJECT (self), "show", G_CALLBACK (show_cb), NULL);
@ -1777,9 +1783,12 @@ gtk_play_dispose (GObject * object)
if (self->uris)
g_list_free_full (self->uris, g_free);
self->uris = NULL;
g_clear_object (&self->signal_adapter);
if (self->player) {
gst_player_stop (self->player);
g_object_unref (self->player);
gst_play_stop (self->player);
gst_object_unref (self->player);
}
self->player = NULL;

View file

@ -20,7 +20,7 @@
#include "gtk-video-renderer.h"
struct _GstPlayerGtkVideoRenderer
struct _GstPlayGtkVideoRenderer
{
GObject parent;
@ -28,14 +28,14 @@ struct _GstPlayerGtkVideoRenderer
GtkWidget *widget;
};
struct _GstPlayerGtkVideoRendererClass
struct _GstPlayGtkVideoRendererClass
{
GObjectClass parent_class;
};
static void
gst_player_gtk_video_renderer_interface_init
(GstPlayerVideoRendererInterface * iface);
(GstPlayVideoRendererInterface * iface);
enum
{
@ -44,9 +44,9 @@ enum
GTK_VIDEO_RENDERER_PROP_LAST
};
G_DEFINE_TYPE_WITH_CODE (GstPlayerGtkVideoRenderer,
G_DEFINE_TYPE_WITH_CODE (GstPlayGtkVideoRenderer,
gst_player_gtk_video_renderer, G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE (GST_TYPE_PLAYER_VIDEO_RENDERER,
G_IMPLEMENT_INTERFACE (GST_TYPE_PLAY_VIDEO_RENDERER,
gst_player_gtk_video_renderer_interface_init));
static GParamSpec
@ -56,7 +56,7 @@ static void
gst_player_gtk_video_renderer_get_property (GObject * object,
guint prop_id, GValue * value, GParamSpec * pspec)
{
GstPlayerGtkVideoRenderer *self = GST_PLAYER_GTK_VIDEO_RENDERER (object);
GstPlayGtkVideoRenderer *self = GST_PLAY_GTK_VIDEO_RENDERER (object);
switch (prop_id) {
case GTK_VIDEO_RENDERER_PROP_WIDGET:
@ -71,7 +71,7 @@ gst_player_gtk_video_renderer_get_property (GObject * object,
static void
gst_player_gtk_video_renderer_finalize (GObject * object)
{
GstPlayerGtkVideoRenderer *self = GST_PLAYER_GTK_VIDEO_RENDERER (object);
GstPlayGtkVideoRenderer *self = GST_PLAY_GTK_VIDEO_RENDERER (object);
if (self->sink)
gst_object_unref (self->sink);
@ -84,7 +84,7 @@ gst_player_gtk_video_renderer_finalize (GObject * object)
static void
gst_player_gtk_video_renderer_class_init
(GstPlayerGtkVideoRendererClass * klass)
(GstPlayGtkVideoRendererClass * klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
@ -102,7 +102,7 @@ static void
}
static void
gst_player_gtk_video_renderer_init (GstPlayerGtkVideoRenderer * self)
gst_player_gtk_video_renderer_init (GstPlayGtkVideoRenderer * self)
{
GstElement *gtk_sink = gst_element_factory_make ("gtkglsink", NULL);
@ -122,27 +122,27 @@ gst_player_gtk_video_renderer_init (GstPlayerGtkVideoRenderer * self)
}
static GstElement *gst_player_gtk_video_renderer_create_video_sink
(GstPlayerVideoRenderer * iface, GstPlayer * player)
(GstPlayVideoRenderer * iface, GstPlay * player)
{
GstPlayerGtkVideoRenderer *self = GST_PLAYER_GTK_VIDEO_RENDERER (iface);
GstPlayGtkVideoRenderer *self = GST_PLAY_GTK_VIDEO_RENDERER (iface);
return gst_object_ref (self->sink);
}
static void
gst_player_gtk_video_renderer_interface_init
(GstPlayerVideoRendererInterface * iface)
(GstPlayVideoRendererInterface * iface)
{
iface->create_video_sink = gst_player_gtk_video_renderer_create_video_sink;
}
/**
* gst_player_gtk_video_renderer_new:
* gst_play_gtk_video_renderer_new:
*
* Returns: (transfer full):
*/
GstPlayerVideoRenderer *
gst_player_gtk_video_renderer_new (void)
GstPlayVideoRenderer *
gst_play_gtk_video_renderer_new (void)
{
GstElementFactory *factory;
@ -154,21 +154,21 @@ gst_player_gtk_video_renderer_new (void)
gst_object_unref (factory);
return g_object_new (GST_TYPE_PLAYER_GTK_VIDEO_RENDERER, NULL);
return g_object_new (GST_TYPE_PLAY_GTK_VIDEO_RENDERER, NULL);
}
/**
* gst_player_gtk_video_renderer_get_widget:
* @self: #GstPlayerVideoRenderer instance
* gst_play_gtk_video_renderer_get_widget:
* @self: #GstPlayVideoRenderer instance
*
* Returns: (transfer full): The GtkWidget
*/
GtkWidget *gst_player_gtk_video_renderer_get_widget
(GstPlayerGtkVideoRenderer * self)
GtkWidget *gst_play_gtk_video_renderer_get_widget
(GstPlayGtkVideoRenderer * self)
{
GtkWidget *widget;
g_return_val_if_fail (GST_IS_PLAYER_GTK_VIDEO_RENDERER (self), NULL);
g_return_val_if_fail (GST_IS_PLAY_GTK_VIDEO_RENDERER (self), NULL);
g_object_get (self, "widget", &widget, NULL);

View file

@ -21,28 +21,28 @@
#ifndef __GTK_VIDEO_RENDERER_H__
#define __GTK_VIDEO_RENDERER_H__
#include <gst/player/player.h>
#include <gst/play/play.h>
#include <gtk/gtk.h>
G_BEGIN_DECLS
typedef struct _GstPlayerGtkVideoRenderer
GstPlayerGtkVideoRenderer;
typedef struct _GstPlayerGtkVideoRendererClass
GstPlayerGtkVideoRendererClass;
typedef struct _GstPlayGtkVideoRenderer
GstPlayGtkVideoRenderer;
typedef struct _GstPlayGtkVideoRendererClass
GstPlayGtkVideoRendererClass;
#define GST_TYPE_PLAYER_GTK_VIDEO_RENDERER (gst_player_gtk_video_renderer_get_type ())
#define GST_IS_PLAYER_GTK_VIDEO_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PLAYER_GTK_VIDEO_RENDERER))
#define GST_IS_PLAYER_GTK_VIDEO_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PLAYER_GTK_VIDEO_RENDERER))
#define GST_PLAYER_GTK_VIDEO_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_PLAYER_GTK_VIDEO_RENDERER, GstPlayerGtkVideoRendererClass))
#define GST_PLAYER_GTK_VIDEO_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PLAYER_GTK_VIDEO_RENDERER, GstPlayerGtkVideoRenderer))
#define GST_PLAYER_GTK_VIDEO_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PLAYER_GTK_VIDEO_RENDERER, GstPlayerGtkVideoRendererClass))
#define GST_PLAYER_GTK_VIDEO_RENDERER_CAST(obj) ((GstPlayerGtkVideoRenderer*)(obj))
#define GST_TYPE_PLAY_GTK_VIDEO_RENDERER (gst_player_gtk_video_renderer_get_type ())
#define GST_IS_PLAY_GTK_VIDEO_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_PLAY_GTK_VIDEO_RENDERER))
#define GST_IS_PLAY_GTK_VIDEO_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_PLAY_GTK_VIDEO_RENDERER))
#define GST_PLAY_GTK_VIDEO_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_PLAY_GTK_VIDEO_RENDERER, GstPlayGtkVideoRendererClass))
#define GST_PLAY_GTK_VIDEO_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_PLAY_GTK_VIDEO_RENDERER, GstPlayGtkVideoRenderer))
#define GST_PLAY_GTK_VIDEO_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_PLAY_GTK_VIDEO_RENDERER, GstPlayGtkVideoRendererClass))
#define GST_PLAY_GTK_VIDEO_RENDERER_CAST(obj) ((GstPlayGtkVideoRenderer*)(obj))
GType gst_player_gtk_video_renderer_get_type (void);
GstPlayerVideoRenderer * gst_player_gtk_video_renderer_new (void);
GtkWidget * gst_player_gtk_video_renderer_get_widget (GstPlayerGtkVideoRenderer * self);
GstPlayVideoRenderer * gst_play_gtk_video_renderer_new (void);
GtkWidget * gst_play_gtk_video_renderer_get_widget (GstPlayGtkVideoRenderer * self);
G_END_DECLS

View file

@ -13,5 +13,5 @@ if gtk_dep.found()
gtk_play_resources,
'gtk-video-renderer.h',
'gtk-video-renderer.c'],
dependencies : [glib_dep, gobject_dep, gmodule_dep, gst_dep, gsttag_dep, gstplayer_dep, gtk_dep, x11_dep])
dependencies : [glib_dep, gobject_dep, gmodule_dep, gst_dep, gsttag_dep, gstplay_dep, gtk_dep, x11_dep])
endif