Revision: 1934
http://gtkpod.svn.sourceforge.net/gtkpod/?rev=1934&view=rev
Author: sikon
Date: 2008-01-13 01:55:18 -0800 (Sun, 13 Jan 2008)
Log Message:
-----------
Volume control
Modified Paths:
--------------
gtkpod/branches/gstreamer_player_support/ChangeLog
gtkpod/branches/gstreamer_player_support/data/gtkpod.glade
gtkpod/branches/gstreamer_player_support/src/player.c
Added Paths:
-----------
gtkpod/branches/gstreamer_player_support/data/volume-control.png
Modified: gtkpod/branches/gstreamer_player_support/ChangeLog
===================================================================
--- gtkpod/branches/gstreamer_player_support/ChangeLog 2008-01-13 09:06:06 UTC
(rev 1933)
+++ gtkpod/branches/gstreamer_player_support/ChangeLog 2008-01-13 09:55:18 UTC
(rev 1934)
@@ -7,6 +7,7 @@
* data/gtkpod.glade:
Video playback support.
+ Volume control (patch by Ryan Houdek).
2008-01-07 Matvey Kozhev <sikon at users.sourceforge.net>
Modified: gtkpod/branches/gstreamer_player_support/data/gtkpod.glade
===================================================================
--- gtkpod/branches/gstreamer_player_support/data/gtkpod.glade 2008-01-13
09:06:06 UTC (rev 1933)
+++ gtkpod/branches/gstreamer_player_support/data/gtkpod.glade 2008-01-13
09:55:18 UTC (rev 1934)
@@ -1655,12 +1655,11 @@
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK |
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK</property>
<child>
- <widget class="GtkLabel" id="label99">
+ <widget class="GtkImage" id="image19">
<property name="visible">True</property>
- <property name="sensitive">False</property>
<property name="events">GDK_POINTER_MOTION_MASK |
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK</property>
- <property name="xpad">6</property>
- <property name="label"
translatable="yes">Volume:</property>
+ <property name="pixbuf">volume-control.png</property>
+ <property name="icon_size">3</property>
</widget>
</child>
</widget>
@@ -1674,13 +1673,13 @@
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK |
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK</property>
<child>
- <widget class="GtkHScale" id="hscale1">
+ <widget class="GtkHScale" id="vol_scale">
<property name="width_request">100</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="events">GDK_POINTER_MOTION_MASK |
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK</property>
- <property name="adjustment">0 0 100 1 10 10</property>
+ <property name="adjustment">0 -90 10 0.20000000000000001 2
2</property>
<property name="draw_value">False</property>
</widget>
</child>
Added: gtkpod/branches/gstreamer_player_support/data/volume-control.png
===================================================================
(Binary files differ)
Property changes on:
gtkpod/branches/gstreamer_player_support/data/volume-control.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: gtkpod/branches/gstreamer_player_support/src/player.c
===================================================================
--- gtkpod/branches/gstreamer_player_support/src/player.c 2008-01-13
09:06:06 UTC (rev 1933)
+++ gtkpod/branches/gstreamer_player_support/src/player.c 2008-01-13
09:55:18 UTC (rev 1934)
@@ -29,6 +29,7 @@
#endif
#ifdef HAVE_GSTREAMER
+#include <math.h>
#include <gst/gst.h>
#include <gst/interfaces/xoverlay.h>
#include <gdk/gdkx.h>
@@ -154,7 +155,20 @@
return FALSE;
}
+#ifndef M_LN10
+#define M_LN10 (log(10.0))
+#endif
+static void volume_changed_callback (GtkWidget *widget, GstElement* volume)
+{
+ gdouble value;
+ gdouble level;
+
+ value = gtk_range_get_value (GTK_RANGE (widget));
+ level = exp (value / 20.0 * M_LN10);
+ g_object_set (volume, "volume", level, NULL);
+}
+
static void *playsong_real (void *ptr)
{
gchar *str;
@@ -172,11 +186,12 @@
GstState state;
gchar *str2 = g_strdup_printf ("file://%s", str);
GstElement *vsink;
- GtkWidget *drawing_area;
+ GtkWidget *drawing_area = gtkpod_xml_get_widget (main_window_xml,
"video_widget");
+ GtkWidget *vol_scale = gtkpod_xml_get_widget (main_window_xml,
"vol_scale");
gtk_label_set_text(GTK_LABEL (song_label), tr->title);
playersong = gst_element_factory_make ("playbin",
"play");
-
+
g_object_set (G_OBJECT (playersong), "uri", str2, NULL);
g_object_set_data (G_OBJECT (song_label), "tr_title", tr->title);
@@ -190,10 +205,13 @@
g_object_set (G_OBJECT (playersong), "video-sink", vsink, NULL);
g_object_set (G_OBJECT (vsink), "force-aspect-ratio", TRUE, NULL);
- drawing_area = gtkpod_xml_get_widget (main_window_xml,
"video_widget");
gst_x_overlay_set_xwindow_id (GST_X_OVERLAY (vsink),
gdk_x11_drawable_get_xid (drawing_area->window));
playerbus = gst_pipeline_get_bus (GST_PIPELINE (playersong));
gst_bus_add_watch (playerbus, my_bus_callback,
playerloop);
+
+ volume_changed_callback (vol_scale, playersong);
+ g_signal_connect (vol_scale, "value-changed", G_CALLBACK
(volume_changed_callback), playersong);
+ gtk_widget_set_sensitive (vol_scale, TRUE);
if(!playerbus)
gst_object_unref (playerbus);
@@ -206,7 +224,6 @@
sret = gst_element_set_state (playersong, GST_STATE_NULL);
#ifndef NEW_PIPE_PER_FILE
-
if (GST_STATE_CHANGE_ASYNC == sret)
{
if (gst_element_get_state (GST_ELEMENT (playersong),
@@ -236,7 +253,7 @@
thread = NULL;
stopall = FALSE;
- g_thread_exit(0);
+ g_thread_exit (0);
return (void*)-1;
}
@@ -306,23 +323,26 @@
void stop_all_songs ()
{
stopall = TRUE;
- stop_song();
- waitforpipeline(1);
+ stop_song ();
+ waitforpipeline (1);
thread = NULL;
+ set_video_mode (FALSE);
+ gtk_tool_button_set_stock_id (GTK_TOOL_BUTTON (play_button),
GTK_STOCK_MEDIA_PLAY);
+ gtk_widget_set_sensitive (gtkpod_xml_get_widget (main_window_xml,
"vol_scale"), FALSE);
}
void previous_song()
{
prevbut = TRUE;
- l = g_list_previous(l);
+ l = g_list_previous (l);
stop_song();
- waitforpipeline(1);
+ waitforpipeline (1);
}
void next_song()
{
stop_song();
- waitforpipeline(1);
+ waitforpipeline (1);
}
int play_song(GList *songs)
@@ -330,17 +350,18 @@
stop_all_songs();
GError *err1 = NULL ;
- if (!g_thread_supported())
+ if (!g_thread_supported ())
{
- g_thread_init(NULL);
- gdk_threads_init();
+ g_thread_init (NULL);
+ gdk_threads_init ();
}
set_video_mode (TRUE);
+ thread = g_thread_create ((GThreadFunc)playsong_real, (void *)songs, TRUE,
&err1);
- if ((thread = g_thread_create((GThreadFunc)playsong_real, (void *)songs,
TRUE, &err1)) == NULL)
+ if (!thread)
{
- printf ("Thread create failed: %s!!\n", err1->message);
+ printf ("GStreamer thread creation failed: %s\n",
err1->message);
g_error_free (err1);
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
gtkpod-cvs2 mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2