#include <assert.h>
+#include "qt4.hpp"
#include "input_manager.hpp"
#include "dialogs_provider.hpp"
-#include "qt4.hpp"
+
+static int ChangeVideo( vlc_object_t *p_this, const char *var, vlc_value_t o,
+ vlc_value_t n, void *param );
+static int ChangeAudio( vlc_object_t *p_this, const char *var, vlc_value_t o,
+ vlc_value_t n, void *param );
/**********************************************************************
* InputManager implementation
{
i_old_playing_status = END_S;
p_input = NULL;
- /* Subscribe to updates */
- connect( THEDP->fixed_timer, SIGNAL( timeout() ), this, SLOT( update() ) );
+ CONNECT( THEDP->fixed_timer, timeout(), this, update() );
}
InputManager::~InputManager()
{
p_input = _p_input;
emit positionUpdated( 0.0,0,0 );
+ b_had_audio = b_had_video = b_has_audio = b_has_video = false;
+ if( p_input )
+ {
+ var_AddCallback( p_input, "audio-es", ChangeAudio, this );
+ var_AddCallback( p_input, "video-es", ChangeVideo, this );
+ }
+
+}
+void InputManager::delInput()
+{
+ if( p_input )
+ {
+ var_DelCallback( p_input, "audio-es", ChangeAudio, this );
+ var_DelCallback( p_input, "video-es", ChangeVideo, this );
+ }
}
void InputManager::update()
{
/// \todo Emit the signals only if it changed
- if( !p_input || p_input->b_die ) return;
+ if( !p_input ) return;
- if( p_input->b_dead )
+ if( p_input->b_dead || p_input->b_die )
{
emit positionUpdated( 0.0, 0, 0 );
emit navigationChanged( 0 );
- emit statusChanged( 0 ); // 0 = STOPPED, 1 = PAUSE, 2 = PLAY
+ emit statusChanged( 0 ); // 0 = STOPPED, 1 = PLAY, 2 = PAUSE
}
+ if( !b_had_audio && b_has_audio )
+ emit audioStarted();
+ if( !b_had_video && b_has_video )
+ emit videoStarted();
+
/* Update position */
mtime_t i_length, i_time;
float f_pos;
{
vlc_value_t val;
var_Change( p_input, "chapter", VLC_VAR_CHOICESCOUNT, &val, NULL );
- if( val.i_int > 0 )
- emit navigationChanged( 1 ); // 1 = chapter, 2 = title, 3 = NO
- else
- emit navigationChanged( 2 );
+ if( val.i_int > 0 )
+ emit navigationChanged( 1 ); // 1 = chapter, 2 = title, 0 = NO
+ else
+ emit navigationChanged( 2 );
}
else
{
void InputManager::sliderUpdate( float new_pos )
{
- if( p_input && !p_input->b_die && !p_input->b_dead )
+ if( p_input && !p_input->b_die && !p_input->b_dead )
var_SetFloat( p_input, "position", new_pos );
}
p_input = NULL;
im = new InputManager( this, p_intf );
/* Get timer updates */
- connect( DialogsProvider::getInstance(p_intf)->fixed_timer,
- SIGNAL(timeout() ), this, SLOT( updateInput() ) );
+ CONNECT( THEDP->fixed_timer, timeout(), this, updateInput() );
/* Warn our embedded IM about input changes */
- connect( this, SIGNAL( inputChanged( input_thread_t * ) ),
- im, SLOT( setInput( input_thread_t * ) ) );
+ CONNECT( this, inputChanged( input_thread_t * ),
+ im, setInput( input_thread_t * ) );
}
MainInputManager::~MainInputManager()
if( p_input && p_input->b_dead )
{
vlc_object_release( p_input );
+ getIM()->delInput();
p_input = NULL;
emit inputChanged( NULL );
}
}
getIM()->togglePlayPause();
}
+
+
+static int ChangeAudio( vlc_object_t *p_this, const char *var, vlc_value_t o,
+ vlc_value_t n, void *param )
+{
+ InputManager *im = (InputManager*)param;
+ im->b_has_audio = true;
+}
+
+static int ChangeVideo( vlc_object_t *p_this, const char *var, vlc_value_t o,
+ vlc_value_t n, void *param )
+{
+ InputManager *im = (InputManager*)param;
+ im->b_has_video = true;
+}