]> git.sesse.net Git - vlc/blobdiff - modules/control/hotkeys.c
Add hotkey to cycle through audio devices
[vlc] / modules / control / hotkeys.c
index 87cdda4f42f1da829b5353e10f48965e93a3c475..83428d09ae3b9d04096cfa8ec8c02ffe4939c09c 100644 (file)
  * Preamble
  *****************************************************************************/
 
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <vlc/vlc.h>
 #include <vlc_interface.h>
 #include <vlc_input.h>
@@ -154,7 +158,7 @@ static void Run( intf_thread_t *p_intf )
         var_Set( p_intf->p_libvlc, p_hotkeys[i].psz_action, val );
     }
 
-    while( !intf_ShouldDie( p_intf ) )
+    for( vlc_bool_t b_quit = VLC_FALSE ; !b_quit; )
     {
         int i_key, i_action;
         int i_times = 0;
@@ -204,11 +208,8 @@ static void Run( intf_thread_t *p_intf )
 
         if( !i_action )
         {
-            vlc_mutex_lock( &p_intf->object_lock );
-            vlc_cond_wait( &p_intf->object_wait, &p_intf->object_lock );
-            vlc_mutex_unlock( &p_intf->object_lock );
+            b_quit = vlc_object_lock_and_wait( p_intf );
             /* No key pressed, sleep a bit more */
-//            msleep( INTF_IDLE_SLEEP );
             continue;
         }
 
@@ -351,6 +352,24 @@ static void Run( intf_thread_t *p_intf )
             val.b_bool = !val.b_bool;
             var_Set( p_playlist, "random", val );
         }
+        else if( i_action == ACTIONID_ZOOM_QUARTER || 
+                 i_action == ACTIONID_ZOOM_HALF ||
+                 i_action == ACTIONID_ZOOM_ORIGINAL || 
+                 i_action == ACTIONID_ZOOM_DOUBLE )
+        {
+            if( p_vout )
+            {
+                if( i_action == ACTIONID_ZOOM_QUARTER )
+                    val.f_float = 0.25;
+                if( i_action == ACTIONID_ZOOM_HALF )
+                    val.f_float = 0.5;
+                if( i_action == ACTIONID_ZOOM_ORIGINAL )
+                    val.f_float = 1;
+                if( i_action == ACTIONID_ZOOM_DOUBLE )
+                    val.f_float = 2;
+                var_Set( p_vout, "zoom", val );
+            }
+        }
         else if( i_action == ACTIONID_PLAY_PAUSE )
         {
             val.i_int = PLAYING_S;
@@ -485,6 +504,54 @@ static void Run( intf_thread_t *p_intf )
                                  _("Audio track: %s"),
                                  list2.p_list->p_values[i].psz_string );
             }
+            else if( i_action == ACTIONID_AUDIODEVICE_CYCLE && p_vout)
+            {
+                vlc_value_t val, list, list2;
+                int i_count, i;
+                aout_instance_t *p_aout = vlc_object_find( p_intf, VLC_OBJECT_AOUT, FIND_ANYWHERE );
+                var_Get( p_aout, "audio-device", &val );
+                var_Change( p_aout, "audio-device", VLC_VAR_GETCHOICES,&list, &list2 );
+                i_count = list.p_list->i_count;
+                if( i_count <= 1 )
+                {
+                    continue;
+                }
+                for( i = 0; i < i_count; i++ )
+                {
+                    if( val.i_int == list.p_list->p_values[i].i_int )
+                    {
+                        break;
+                    }
+                }
+                if( i == i_count )
+                {
+                    msg_Warn( p_aout,
+                              "invalid current audio device, selecting 0" );
+                    var_Set( p_aout, "audio-device",
+                             list.p_list->p_values[0] );
+                    i = 0;
+           
+                }
+                else if( i == i_count -1 )
+                {
+                  var_Set( p_aout, "audio-device",
+                             list.p_list->p_values[0] );
+                    i = 0;
+           
+                }
+                else
+                {
+                  var_Set( p_aout, "audio-device",
+                             list.p_list->p_values[i+1] );                   
+                    i++;
+                }
+                vout_OSDMessage( VLC_OBJECT(p_input), 
+                                 DEFAULT_CHAN,
+                                 _("Audio Device: %s"),
+                                 list2.p_list->p_values[i].psz_string);
+                vlc_object_release( p_aout );        
+            }
             else if( i_action == ACTIONID_SUBTITLE_TRACK )
             {
                 vlc_value_t val, list, list2;
@@ -790,6 +857,7 @@ static void Run( intf_thread_t *p_intf )
             {
                 osd_MenuActivate( VLC_OBJECT(p_intf) );
             }
+
         }
         if( p_vout )
             vlc_object_release( p_vout );
@@ -827,6 +895,7 @@ static int GetKey( intf_thread_t *p_intf)
 static int KeyEvent( vlc_object_t *p_this, char const *psz_var,
                      vlc_value_t oldval, vlc_value_t newval, void *p_data )
 {
+    VLC_UNUSED(psz_var); VLC_UNUSED(oldval);
     intf_thread_t *p_intf = (intf_thread_t *)p_data;
     if ( !newval.i_int )
     {
@@ -856,6 +925,7 @@ static int KeyEvent( vlc_object_t *p_this, char const *psz_var,
 static int ActionKeyCB( vlc_object_t *p_this, char const *psz_var,
                         vlc_value_t oldval, vlc_value_t newval, void *p_data )
 {
+    VLC_UNUSED(oldval); VLC_UNUSED(p_data);
     libvlc_int_t *p_libvlc = (libvlc_int_t *)p_this;
     struct hotkey *p_hotkeys = p_libvlc->p_hotkeys;
     mtime_t i_date;