X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Finput_manager.cpp;h=a009f483e148701eb182ddd549aafab587a2e734;hb=6ee1e193fd896ab9a4729fde14f009d9ce629815;hp=02cdd440b054832bd7ae4dba3db7e29ab0e430bb;hpb=712f983f22d2880e2fe8f1af101d8b314b87c26b;p=vlc diff --git a/modules/gui/qt4/input_manager.cpp b/modules/gui/qt4/input_manager.cpp index 02cdd440b0..a009f483e1 100644 --- a/modules/gui/qt4/input_manager.cpp +++ b/modules/gui/qt4/input_manager.cpp @@ -38,7 +38,9 @@ InputManager::InputManager( QObject *parent, intf_thread_t *_p_intf) : QObject( parent ), p_intf( _p_intf ) { i_old_playing_status = END_S; + old_name=""; p_input = NULL; + i_rate = 0; ON_TIMEOUT( update() ); } @@ -85,18 +87,13 @@ void InputManager::update() if( p_input->b_dead || p_input->b_die ) { emit positionUpdated( 0.0, 0, 0 ); - msg_Dbg( p_intf, "*********** NAV 0"); emit navigationChanged( 0 ); - emit statusChanged( 0 ); // 0 = STOPPED, 1 = PLAY, 2 = PAUSE + i_old_playing_status = 0; + emit statusChanged( END_S ); // see vlc_input.h, input_state_e enum delInput(); return; } - 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; @@ -104,8 +101,16 @@ void InputManager::update() i_time = var_GetTime( p_input, "time") / 1000000; f_pos = var_GetFloat( p_input, "position" ); emit positionUpdated( f_pos, i_time, i_length ); + + int i_new_rate = var_GetInteger( p_input, "rate"); + if( i_new_rate != i_rate ) + { + i_rate = i_new_rate; + /* Update rate */ + emit rateChanged( i_rate ); + } - /* Update disc status */ + /* Update navigation status */ vlc_value_t val; val.i_int = 0; var_Change( p_input, "title", VLC_VAR_CHOICESCOUNT, &val, NULL ); if( val.i_int > 0 ) @@ -114,12 +119,10 @@ void InputManager::update() var_Change( p_input, "chapter", VLC_VAR_CHOICESCOUNT, &val, NULL ); if( val.i_int > 0 ) { - msg_Dbg( p_intf, "******* CHAPTER"); emit navigationChanged( 1 ); // 1 = chapter, 2 = title, 0 = NO } else { - msg_Dbg( p_intf, "******* TITLE"); emit navigationChanged( 2 ); } } @@ -130,20 +133,35 @@ void InputManager::update() /* Update text */ QString text; - if( input_GetItem(p_input)->p_meta && - input_GetItem(p_input)->p_meta->psz_nowplaying && - *input_GetItem(p_input)->p_meta->psz_nowplaying ) + char *psz_name = input_item_GetTitle( input_GetItem( p_input ) ); + char *psz_nowplaying = + input_item_GetNowPlaying( input_GetItem( p_input ) ); + char *psz_artist = input_item_GetArtist( input_GetItem( p_input ) ); + if( EMPTY_STR( psz_name ) ) + { + free( psz_name ); + psz_name = input_item_GetName( input_GetItem( p_input ) ); + } + if( !EMPTY_STR( psz_nowplaying ) ) + { + text.sprintf( "%s - %s", psz_nowplaying, psz_name ); + } + else if( !EMPTY_STR( psz_artist ) ) { - text.sprintf( "%s - %s", - input_GetItem(p_input)->p_meta->psz_nowplaying, - input_GetItem(p_input)->psz_name ); + text.sprintf( "%s - %s", psz_artist, psz_name ); } else { - text.sprintf( "%s", input_GetItem(p_input)->psz_name ); + text.sprintf( "%s", psz_name ); + } + free( psz_name ); + free( psz_nowplaying ); + free( psz_artist ); + if( old_name != text ) + { + emit nameChanged( text ); + old_name=text; } - emit nameChanged( text ); - /* Update playing status */ var_Get( p_input, "state", &val ); val.i_int = val.i_int == PAUSE_S ? PAUSE_S : PLAYING_S; @@ -203,7 +221,7 @@ void InputManager::sectionNext() void InputManager::sectionMenu() { if( hasInput() ) - var_SetInteger( p_input, "title 0", 2); + var_SetInteger( p_input, "title 0", 2 ); } void InputManager::slower() @@ -224,6 +242,12 @@ void InputManager::normalRate() var_SetInteger( p_input, "rate", INPUT_RATE_DEFAULT ); } +void InputManager::setRate( int new_rate ) +{ + if( hasInput() ) + var_SetInteger( p_input, "rate", new_rate ); +} + /********************************************************************** * MainInputManager implementation. Wrap an input manager and * take care of updating the main playlist input @@ -248,27 +272,40 @@ MainInputManager::~MainInputManager() void MainInputManager::updateInput() { - vlc_mutex_lock( &p_intf->change_lock ); - if( p_input && p_input->b_dead ) + if( VLC_OBJECT_INTF == p_intf->i_object_type ) { - vlc_object_release( p_input ); - getIM()->delInput(); - p_input = NULL; - emit inputChanged( NULL ); - } + vlc_mutex_lock( &p_intf->change_lock ); + if( p_input && p_input->b_dead ) + { + vlc_object_release( p_input ); + getIM()->delInput(); + p_input = NULL; + emit inputChanged( NULL ); + } - if( !p_input ) - { - QPL_LOCK; - p_input = THEPL->p_input; - if( p_input ) + if( !p_input ) + { + QPL_LOCK; + p_input = THEPL->p_input; + if( p_input ) + { + vlc_object_yield( p_input ); + emit inputChanged( p_input ); + } + QPL_UNLOCK; + } + vlc_mutex_unlock( &p_intf->change_lock ); + } + else { + /* we are working as a dialogs provider */ + playlist_t *p_playlist = (playlist_t *) vlc_object_find( p_intf, + VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); + if( p_playlist ) { - vlc_object_yield( p_input ); + p_input = p_playlist->p_input; emit inputChanged( p_input ); } - QPL_UNLOCK; } - vlc_mutex_unlock( &p_intf->change_lock ); } void MainInputManager::stop() @@ -301,7 +338,7 @@ static int ChangeAudio( vlc_object_t *p_this, const char *var, vlc_value_t o, { InputManager *im = (InputManager*)param; im->b_has_audio = true; - return 0; + return VLC_SUCCESS; } static int ChangeVideo( vlc_object_t *p_this, const char *var, vlc_value_t o, @@ -309,5 +346,5 @@ static int ChangeVideo( vlc_object_t *p_this, const char *var, vlc_value_t o, { InputManager *im = (InputManager*)param; im->b_has_video = true; - return 0; + return VLC_SUCCESS; }