vlc | branch: master | Francois Cartegnie <[email protected]> | Wed Mar 30 23:45:46 2011 +0200| [2e3ce1ccaab119d84ff531041e684fba4c31cea1] | committer: Francois Cartegnie
epg: narrow input lock > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=2e3ce1ccaab119d84ff531041e684fba4c31cea1 --- modules/gui/qt4/components/epg/EPGWidget.cpp | 21 +++++++++++++++------ modules/gui/qt4/components/epg/EPGWidget.hpp | 2 +- modules/gui/qt4/dialogs/epg.cpp | 11 ++--------- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/modules/gui/qt4/components/epg/EPGWidget.cpp b/modules/gui/qt4/components/epg/EPGWidget.cpp index cc1391c..d059de2 100644 --- a/modules/gui/qt4/components/epg/EPGWidget.cpp +++ b/modules/gui/qt4/components/epg/EPGWidget.cpp @@ -33,6 +33,9 @@ #include <QLabel> #include <QStringList> #include "qt4.hpp" +#include "input_manager.hpp" +#include <vlc_common.h> +#include <vlc_epg.h> EPGWidget::EPGWidget( QWidget *parent ) : QWidget( parent ) { @@ -94,18 +97,22 @@ void EPGWidget::setZoom( int level ) m_rulerWidget->setScale( scale ); } -void EPGWidget::updateEPG( vlc_epg_t **pp_epg, int i_epg, uint8_t i_input_type ) +void EPGWidget::updateEPG( input_item_t *p_input_item ) { + if( !p_input_item ) return; + /* flush our EPG data if input type has changed */ - if ( b_input_type_known && i_input_type != i_event_source_type ) m_epgView->reset(); - i_event_source_type = i_input_type; + if ( b_input_type_known && p_input_item->i_type != i_event_source_type ) m_epgView->reset(); + i_event_source_type = p_input_item->i_type; b_input_type_known = true; m_epgView->cleanup(); /* expire items and flags */ - - for ( int i = 0; i < i_epg; ++i ) + /* Fixme: input could have dissapeared */ + vlc_mutex_lock( & p_input_item->lock ); + int i_nbitems = p_input_item->i_epg; + for ( int i = 0; i < p_input_item->i_epg; ++i ) { - vlc_epg_t *p_epg = pp_epg[i]; + vlc_epg_t *p_epg = p_input_item->pp_epg[i]; /* Read current epg events from libvlc and try to insert them */ for ( int j = 0; j < p_epg->i_event; ++j ) @@ -115,6 +122,7 @@ void EPGWidget::updateEPG( vlc_epg_t **pp_epg, int i_epg, uint8_t i_input_type ) ( p_epg->p_current == p_event ) ); } } + vlc_mutex_unlock( & p_input_item->lock ); /* toggle our widget view */ rootWidget->setCurrentIndex( m_epgView->hasValidData() ? 0 : 1 ); @@ -123,3 +131,4 @@ void EPGWidget::updateEPG( vlc_epg_t **pp_epg, int i_epg, uint8_t i_input_type ) m_epgView->updateDuration(); m_epgView->updateStartTime(); } + diff --git a/modules/gui/qt4/components/epg/EPGWidget.hpp b/modules/gui/qt4/components/epg/EPGWidget.hpp index 73ae32f..f9b0596 100644 --- a/modules/gui/qt4/components/epg/EPGWidget.hpp +++ b/modules/gui/qt4/components/epg/EPGWidget.hpp @@ -46,7 +46,7 @@ public: public slots: void setZoom( int level ); - void updateEPG( vlc_epg_t **pp_epg, int i_epg, uint8_t i_input_type ); + void updateEPG( input_item_t * ); private: EPGRuler* m_rulerWidget; diff --git a/modules/gui/qt4/dialogs/epg.cpp b/modules/gui/qt4/dialogs/epg.cpp index 2fb3e9e..0a036ad 100644 --- a/modules/gui/qt4/dialogs/epg.cpp +++ b/modules/gui/qt4/dialogs/epg.cpp @@ -118,15 +118,8 @@ void EpgDialog::showEvent( EPGItem *epgItem ) void EpgDialog::updateInfos() { - if( !THEMIM->getInput() ) return; timer->stop(); - input_item_t *p_input_item = input_GetItem( THEMIM->getInput() ); - vlc_mutex_lock( & p_input_item->lock ); - int i_nbitems = p_input_item->i_epg; - if ( i_nbitems > 0 ) msg_Dbg( p_intf, "Found %i EPG items", i_nbitems ); - epg->updateEPG( p_input_item->pp_epg, - p_input_item->i_epg, - p_input_item->i_type); - vlc_mutex_unlock( & p_input_item->lock ); + if( !THEMIM->getInput() ) return; + epg->updateEPG( input_GetItem( THEMIM->getInput() ) ); if ( isVisible() ) timer->start(); } _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
