~ubuntu-branches/ubuntu/natty/vlc/natty

« back to all changes in this revision

Viewing changes to modules/gui/maemo/maemo_input.c

  • Committer: Bazaar Package Importer
  • Author(s): Benjamin Drung
  • Date: 2010-06-25 01:09:16 UTC
  • mfrom: (1.1.30 upstream)
  • Revision ID: james.westby@ubuntu.com-20100625010916-asxhep2mutg6g6pd
Tags: 1.1.0-1ubuntu1
* Merge from Debian unstable, remaining changes:
  - build and install the libx264 plugin
  - add Xb-Npp header to vlc package
  - Add apport hook to include more vlc dependencies in bug reports
* Drop xulrunner patches.
* Drop 502_xulrunner_191.diff.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*****************************************************************************
2
 
* maemo_input.c : Input handling for the maemo plugin
3
 
*****************************************************************************
4
 
* Copyright (C) 2008 the VideoLAN team
5
 
* $Id: de7ba9800d2b966133a546ac6ceb8eabeb3cce13 $
6
 
*
7
 
* Authors: Antoine Lejeune <phytos@videolan.org>
8
 
*
9
 
* This program is free software; you can redistribute it and/or modify
10
 
* it under the terms of the GNU General Public License as published by
11
 
* the Free Software Foundation; either version 2 of the License, or
12
 
* (at your option) any later version.
13
 
*
14
 
* This program is distributed in the hope that it will be useful,
15
 
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
 
* GNU General Public License for more details.
18
 
*
19
 
* You should have received a copy of the GNU General Public License
20
 
* along with this program; if not, write to the Free Software
21
 
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
22
 
*****************************************************************************/
23
 
 
24
 
#ifdef HAVE_CONFIG_H
25
 
# include "config.h"
26
 
#endif
27
 
 
28
 
#include <vlc_common.h>
29
 
 
30
 
#include "maemo.h"
31
 
#include "maemo_input.h"
32
 
 
33
 
static int input_event_cb( vlc_object_t *p_this, const char *psz_var,
34
 
                           vlc_value_t oldval, vlc_value_t newval, void *param );
35
 
 
36
 
 
37
 
gboolean process_events( gpointer data )
38
 
{
39
 
    intf_thread_t *p_intf = (intf_thread_t *)data;
40
 
    vlc_spin_lock( &p_intf->p_sys->event_lock );
41
 
 
42
 
    int i_event = p_intf->p_sys->i_event;
43
 
    p_intf->p_sys->i_event = 0;
44
 
 
45
 
    vlc_spin_unlock( &p_intf->p_sys->event_lock );
46
 
    if( i_event )
47
 
    {
48
 
        if( i_event & EVENT_PLAYLIST_CURRENT )
49
 
            item_changed_pl( p_intf );
50
 
        if( i_event & EVENT_ACTIVITY )
51
 
            item_changed_pl( p_intf );
52
 
        if( i_event & EVENT_ITEM_CHANGED )
53
 
            item_changed( p_intf );
54
 
        if( i_event & EVENT_INTF_CHANGED )
55
 
            update_position( p_intf );
56
 
    }
57
 
 
58
 
    return TRUE;
59
 
}
60
 
 
61
 
void set_input( intf_thread_t *p_intf, input_thread_t *p_input )
62
 
{
63
 
    if( p_input && !( p_input->b_die || p_input->b_dead ) )
64
 
    {
65
 
        p_intf->p_sys->p_input = p_input;
66
 
        vlc_object_hold( p_input );
67
 
        var_AddCallback( p_input, "intf-event", input_event_cb, p_intf );
68
 
 
69
 
        // "Activate" the seekbar
70
 
        gtk_widget_set_sensitive( GTK_WIDGET( p_intf->p_sys->p_seekbar ), TRUE );
71
 
    }
72
 
    else
73
 
        p_intf->p_sys->p_input = NULL;
74
 
}
75
 
 
76
 
void delete_input( intf_thread_t *p_intf )
77
 
{
78
 
    if( p_intf->p_sys->p_input )
79
 
    {
80
 
        var_DelCallback( p_intf->p_sys->p_input, "intf-event",
81
 
                         input_event_cb, p_intf );
82
 
        vlc_object_release( p_intf->p_sys->p_input );
83
 
        p_intf->p_sys->p_input = NULL;
84
 
 
85
 
        // Reset the seekbar
86
 
        hildon_seekbar_set_position( p_intf->p_sys->p_seekbar, 0 );
87
 
        gtk_widget_set_sensitive( GTK_WIDGET( p_intf->p_sys->p_seekbar ), FALSE );
88
 
    }
89
 
}
90
 
 
91
 
void item_changed_pl( intf_thread_t *p_intf )
92
 
{
93
 
    if( p_intf->p_sys->p_input &&
94
 
        ( p_intf->p_sys->p_input->b_dead || p_intf->p_sys->p_input->b_die ) )
95
 
    {
96
 
        delete_input( p_intf );
97
 
        return;
98
 
    }
99
 
 
100
 
    if( !p_intf->p_sys->p_input )
101
 
    {
102
 
        set_input( p_intf, playlist_CurrentInput( p_intf->p_sys->p_playlist ) );
103
 
    }
104
 
    return;
105
 
}
106
 
 
107
 
int playlist_current_cb( vlc_object_t *p_this, const char *psz_var,
108
 
                         vlc_value_t oldval, vlc_value_t newval, void *param )
109
 
{
110
 
    (void)p_this; (void)psz_var; (void)oldval; (void)newval;
111
 
    intf_thread_t *p_intf = (intf_thread_t *)param;
112
 
    vlc_spin_lock( &p_intf->p_sys->event_lock );
113
 
 
114
 
    p_intf->p_sys->i_event |= EVENT_PLAYLIST_CURRENT;
115
 
 
116
 
    vlc_spin_unlock( &p_intf->p_sys->event_lock );
117
 
    return VLC_SUCCESS;
118
 
}
119
 
 
120
 
int activity_cb( vlc_object_t *p_this, const char *psz_var,
121
 
                 vlc_value_t oldval, vlc_value_t newval, void *param )
122
 
{
123
 
    (void)p_this; (void)psz_var; (void)oldval; (void)newval;
124
 
    intf_thread_t *p_intf = (intf_thread_t *)param;
125
 
    vlc_spin_lock( &p_intf->p_sys->event_lock );
126
 
 
127
 
    p_intf->p_sys->i_event |= EVENT_ACTIVITY;
128
 
 
129
 
    vlc_spin_unlock( &p_intf->p_sys->event_lock );
130
 
    return VLC_SUCCESS;
131
 
}
132
 
 
133
 
void item_changed( intf_thread_t *p_intf )
134
 
{
135
 
    GtkButton *p_button = GTK_BUTTON( p_intf->p_sys->p_play_button );
136
 
    vlc_value_t state;
137
 
 
138
 
    if( !p_intf->p_sys->p_input )
139
 
        return;
140
 
 
141
 
    var_Get( p_intf->p_sys->p_input, "state", &state );
142
 
 
143
 
    // We change the "play" button
144
 
    if( state.i_int == PLAYING_S )
145
 
        gtk_button_set_image( p_button, gtk_image_new_from_stock( "vlc-pause",
146
 
                              GTK_ICON_SIZE_BUTTON ) );
147
 
    else
148
 
        gtk_button_set_image( p_button, gtk_image_new_from_stock( "vlc-play",
149
 
                              GTK_ICON_SIZE_BUTTON ) );
150
 
}
151
 
 
152
 
int item_changed_cb( vlc_object_t *p_this, const char *psz_var,
153
 
                     vlc_value_t oldval, vlc_value_t newval, void *param )
154
 
{
155
 
    (void)p_this; (void)psz_var; (void)oldval; (void)newval;
156
 
    intf_thread_t *p_intf = (intf_thread_t *)param;
157
 
    vlc_spin_lock( &p_intf->p_sys->event_lock );
158
 
 
159
 
    p_intf->p_sys->i_event |= EVENT_ITEM_CHANGED;
160
 
 
161
 
    vlc_spin_unlock( &p_intf->p_sys->event_lock );
162
 
    return VLC_SUCCESS;
163
 
}
164
 
 
165
 
void update_position( intf_thread_t *p_intf )
166
 
{
167
 
    if( p_intf->p_sys->p_input )
168
 
    {
169
 
        hildon_seekbar_set_total_time( p_intf->p_sys->p_seekbar,
170
 
                    var_GetTime( p_intf->p_sys->p_input, "length" )/1000000 );
171
 
        hildon_seekbar_set_position( p_intf->p_sys->p_seekbar,
172
 
                    var_GetTime( p_intf->p_sys->p_input, "time" )/1000000 );
173
 
    }
174
 
}
175
 
 
176
 
int interface_changed_cb( vlc_object_t *p_this, const char *psz_var,
177
 
                          vlc_value_t oldval, vlc_value_t newval, void *param )
178
 
{
179
 
    (void)p_this; (void)psz_var; (void)oldval; (void)newval;
180
 
    intf_thread_t *p_intf = (intf_thread_t *)param;
181
 
    vlc_spin_lock( &p_intf->p_sys->event_lock );
182
 
 
183
 
    p_intf->p_sys->i_event |= EVENT_INTF_CHANGED;
184
 
 
185
 
    vlc_spin_unlock( &p_intf->p_sys->event_lock );
186
 
    return VLC_SUCCESS;
187
 
}
188
 
 
189
 
static int input_event_cb( vlc_object_t *p_this, const char *psz_var,
190
 
                           vlc_value_t oldval, vlc_value_t newval, void *param )
191
 
{
192
 
    if( newval.i_int == INPUT_EVENT_STATE )
193
 
        return item_changed_cb( p_this, psz_var, oldval, newval, param );
194
 
    else
195
 
        return interface_changed_cb( p_this, psz_var, oldval, newval, param );
196
 
}
197