Commit 1914caa5 authored by Pierre d'Herbemont's avatar Pierre d'Herbemont

Gestures: Obtain the p_input associated with the p_playlist when needed.

parent d215ca3f
...@@ -43,7 +43,6 @@ ...@@ -43,7 +43,6 @@
struct intf_sys_t struct intf_sys_t
{ {
vlc_object_t * p_vout; vlc_object_t * p_vout;
input_thread_t * p_input;
vlc_bool_t b_got_gesture; vlc_bool_t b_got_gesture;
vlc_bool_t b_button_pressed; vlc_bool_t b_button_pressed;
int i_mouse_x, i_mouse_y; int i_mouse_x, i_mouse_y;
...@@ -131,6 +130,23 @@ static int gesture( int i_pattern, int i_num ) ...@@ -131,6 +130,23 @@ static int gesture( int i_pattern, int i_num )
return ( i_pattern >> ( i_num * 4 ) ) & 0xF; return ( i_pattern >> ( i_num * 4 ) ) & 0xF;
} }
/*****************************************************************************
* input_from_playlist: don't forget to release the return value
* Also this function should really be available from core.
*****************************************************************************/
static input_thread_t * input_from_playlist ( playlist_t *p_playlist )
{
input_thread_t * p_input;
PL_LOCK;
p_input = p_playlist->p_input;
if( p_input )
vlc_object_yield( p_input );
PL_UNLOCK;
return p_input;
}
/***************************************************************************** /*****************************************************************************
* CloseIntf: destroy dummy interface * CloseIntf: destroy dummy interface
*****************************************************************************/ *****************************************************************************/
...@@ -154,7 +170,6 @@ static void RunIntf( intf_thread_t *p_intf ) ...@@ -154,7 +170,6 @@ static void RunIntf( intf_thread_t *p_intf )
p_intf->p_sys->p_vout = NULL; p_intf->p_sys->p_vout = NULL;
vlc_mutex_unlock( &p_intf->change_lock ); vlc_mutex_unlock( &p_intf->change_lock );
input_thread_t * p_input = p_intf->p_sys->p_input;
if( InitThread( p_intf ) < 0 ) if( InitThread( p_intf ) < 0 )
{ {
...@@ -207,21 +222,37 @@ static void RunIntf( intf_thread_t *p_intf ) ...@@ -207,21 +222,37 @@ static void RunIntf( intf_thread_t *p_intf )
break; break;
case GESTURE(LEFT,RIGHT,NONE,NONE): case GESTURE(LEFT,RIGHT,NONE,NONE):
case GESTURE(RIGHT,LEFT,NONE,NONE): case GESTURE(RIGHT,LEFT,NONE,NONE):
val.i_int = PLAYING_S;
if( p_input )
{ {
var_Get( p_input, "state", &val); input_thread_t * p_input;
if( val.i_int == PAUSE_S ) p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
FIND_ANYWHERE );
p_input = input_from_playlist( p_playlist );
if( !p_input )
{ {
val.i_int = PLAYING_S; vlc_object_release( p_playlist );
break;
} }
else
val.i_int = PLAYING_S;
if( p_input )
{ {
val.i_int = PAUSE_S; var_Get( p_input, "state", &val);
if( val.i_int == PAUSE_S )
{
val.i_int = PLAYING_S;
}
else
{
val.i_int = PAUSE_S;
}
var_Set( p_input, "state", val);
} }
var_Set( p_input, "state", val); msg_Dbg(p_intf, "Play/Pause");
vlc_object_release( p_input );
vlc_object_release( p_playlist );
} }
msg_Dbg(p_intf, "Play/Pause");
break; break;
case GESTURE(LEFT,DOWN,NONE,NONE): case GESTURE(LEFT,DOWN,NONE,NONE):
p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
...@@ -269,8 +300,24 @@ static void RunIntf( intf_thread_t *p_intf ) ...@@ -269,8 +300,24 @@ static void RunIntf( intf_thread_t *p_intf )
break; break;
case GESTURE(UP,RIGHT,NONE,NONE): case GESTURE(UP,RIGHT,NONE,NONE):
{ {
input_thread_t * p_input;
vlc_value_t val, list, list2; vlc_value_t val, list, list2;
int i_count, i; int i_count, i;
p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
FIND_ANYWHERE );
if( !p_playlist )
break;
p_input = input_from_playlist( p_playlist );
if( !p_input )
{
vlc_object_release( p_playlist );
break;
}
var_Get( p_input, "audio-es", &val ); var_Get( p_input, "audio-es", &val );
var_Change( p_input, "audio-es", VLC_VAR_GETCHOICES, var_Change( p_input, "audio-es", VLC_VAR_GETCHOICES,
&list, &list2 ); &list, &list2 );
...@@ -307,12 +354,30 @@ static void RunIntf( intf_thread_t *p_intf ) ...@@ -307,12 +354,30 @@ static void RunIntf( intf_thread_t *p_intf )
list.p_list->p_values[i+1] ); list.p_list->p_values[i+1] );
i++; i++;
} }
vlc_object_release( p_input );
vlc_object_release( p_playlist );
} }
break; break;
case GESTURE(DOWN,RIGHT,NONE,NONE): case GESTURE(DOWN,RIGHT,NONE,NONE):
{ {
input_thread_t * p_input;
vlc_value_t val, list, list2; vlc_value_t val, list, list2;
int i_count, i; int i_count, i;
p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
FIND_ANYWHERE );
if( !p_playlist )
break;
p_input = input_from_playlist( p_playlist );
if( !p_input )
{
vlc_object_release( p_playlist );
break;
}
var_Get( p_input, "spu-es", &val ); var_Get( p_input, "spu-es", &val );
var_Change( p_input, "spu-es", VLC_VAR_GETCHOICES, var_Change( p_input, "spu-es", VLC_VAR_GETCHOICES,
...@@ -348,6 +413,8 @@ static void RunIntf( intf_thread_t *p_intf ) ...@@ -348,6 +413,8 @@ static void RunIntf( intf_thread_t *p_intf )
list.p_list->p_values[i+1] ); list.p_list->p_values[i+1] );
i = i + 1; i = i + 1;
} }
vlc_object_release( p_input );
vlc_object_release( p_playlist );
} }
break; break;
case GESTURE(UP,LEFT,NONE,NONE): case GESTURE(UP,LEFT,NONE,NONE):
...@@ -424,12 +491,6 @@ static int InitThread( intf_thread_t * p_intf ) ...@@ -424,12 +491,6 @@ static int InitThread( intf_thread_t * p_intf )
* during those operations */ * during those operations */
vlc_mutex_lock( &p_intf->change_lock ); vlc_mutex_lock( &p_intf->change_lock );
/* p_intf->p_sys->p_input references counting strategy:
* - InitThread is responsible for only one ref count retaining
* - EndThread is responsible for the corresponding release */
p_intf->p_sys->p_input = vlc_object_find( p_intf, VLC_OBJECT_INPUT,
FIND_PARENT );
p_intf->p_sys->b_got_gesture = VLC_FALSE; p_intf->p_sys->b_got_gesture = VLC_FALSE;
p_intf->p_sys->b_button_pressed = VLC_FALSE; p_intf->p_sys->b_button_pressed = VLC_FALSE;
p_intf->p_sys->i_threshold = p_intf->p_sys->i_threshold =
...@@ -476,11 +537,6 @@ static void EndThread( intf_thread_t * p_intf ) ...@@ -476,11 +537,6 @@ static void EndThread( intf_thread_t * p_intf )
vlc_object_release( p_intf->p_sys->p_vout ); vlc_object_release( p_intf->p_sys->p_vout );
} }
if( p_intf->p_sys->p_input )
{
vlc_object_release(p_intf->p_sys->p_input);
}
vlc_mutex_unlock( &p_intf->change_lock ); vlc_mutex_unlock( &p_intf->change_lock );
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment