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

Reply via email to