author | simon <simon> | 2002-12-11 11:40:20 (UTC) |
---|---|---|
committer | simon <simon> | 2002-12-11 11:40:20 (UTC) |
commit | 03ac4af4d6014bbd46b12d5fe89ee2cc73941080 (patch) (side-by-side diff) | |
tree | f88296c20f73e7e46d03daff3000ef34acd31bb0 | |
parent | 9431b69a1efab055c28c77e780df012b0a476a57 (diff) | |
download | opie-03ac4af4d6014bbd46b12d5fe89ee2cc73941080.zip opie-03ac4af4d6014bbd46b12d5fe89ee2cc73941080.tar.gz opie-03ac4af4d6014bbd46b12d5fe89ee2cc73941080.tar.bz2 |
- slight simplification of XineControl constructor
- fixed a race between the video resizing and the xine initialization
-rw-r--r-- | noncore/multimedia/opieplayer2/mediaplayer.cpp | 2 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/xinecontrol.cpp | 16 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/xinecontrol.h | 6 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/xinevideowidget.cpp | 27 | ||||
-rw-r--r-- | noncore/multimedia/opieplayer2/xinevideowidget.h | 4 |
5 files changed, 37 insertions, 18 deletions
diff --git a/noncore/multimedia/opieplayer2/mediaplayer.cpp b/noncore/multimedia/opieplayer2/mediaplayer.cpp index 0d9a5b8..c230d6f 100644 --- a/noncore/multimedia/opieplayer2/mediaplayer.cpp +++ b/noncore/multimedia/opieplayer2/mediaplayer.cpp @@ -361,13 +361,13 @@ void MediaPlayer::recreateAudioAndVideoWidgets() connect( videoUI, SIGNAL( moreClicked() ), this, SLOT( startIncreasingVolume() ) ); connect( videoUI, SIGNAL( lessClicked() ), this, SLOT( startDecreasingVolume() ) ); connect( videoUI, SIGNAL( moreReleased() ), this, SLOT( stopChangingVolume() ) ); connect( videoUI, SIGNAL( lessReleased() ), this, SLOT( stopChangingVolume() ) ); - xineControl = new XineControl( videoUI, videoUI->vidWidget(), mediaPlayerState ); + xineControl = new XineControl( videoUI->vidWidget(), mediaPlayerState ); connect( xineControl, SIGNAL( initialized() ), &mediaPlayerState, SLOT( setBackendInitialized() ) ); } void MediaPlayer::reloadSkins() { diff --git a/noncore/multimedia/opieplayer2/xinecontrol.cpp b/noncore/multimedia/opieplayer2/xinecontrol.cpp index 14e71d9..e791c3b 100644 --- a/noncore/multimedia/opieplayer2/xinecontrol.cpp +++ b/noncore/multimedia/opieplayer2/xinecontrol.cpp @@ -35,30 +35,30 @@ #include <qtimer.h> #include <qmessagebox.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/qpeapplication.h> #include "xinecontrol.h" #include "mediaplayerstate.h" +#include "xinevideowidget.h" -XineControl::XineControl( QWidget *videoContainerWidget, XineVideoWidget *xineWidget, +XineControl::XineControl( XineVideoWidget *xineWidget, MediaPlayerState &_mediaPlayerState, QObject *parent, const char *name ) - : QObject( parent, name ), mediaPlayerState( _mediaPlayerState ) + : QObject( parent, name ), mediaPlayerState( _mediaPlayerState ), xineVideoWidget( xineWidget ) { libXine = new XINE::Lib( xineWidget ); - connect ( videoContainerWidget, SIGNAL( videoResized( const QSize & )), this, SLOT( videoResized ( const QSize & ) ) ); connect( &mediaPlayerState, SIGNAL( pausedToggled( bool ) ), this, SLOT( pause( bool ) ) ); connect( this, SIGNAL( positionChanged( long ) ), &mediaPlayerState, SLOT( updatePosition( long ) ) ); connect( &mediaPlayerState, SIGNAL( playingToggled( bool ) ), this, SLOT( stop( bool ) ) ); connect( &mediaPlayerState, SIGNAL( fullscreenToggled( bool ) ), this, SLOT( setFullscreen( bool ) ) ); connect( &mediaPlayerState, SIGNAL( positionChanged( long ) ), this, SLOT( seekTo( long ) ) ); connect( &mediaPlayerState, SIGNAL( videoGammaChanged( int ) ), this, SLOT( setGamma( int ) ) ); connect( libXine, SIGNAL( stopped() ), this, SLOT( nextMedia() ) ); - connect( libXine, SIGNAL( initialized() ), this, SIGNAL( initialized() ) ); + connect( libXine, SIGNAL( initialized() ), this, SLOT( xineInitialized() ) ); disabledSuspendScreenSaver = FALSE; } XineControl::~XineControl() { #if defined(Q_WS_QWS) && !defined(QT_NO_COP) @@ -123,12 +123,20 @@ void XineControl::nextMedia() { } void XineControl::setGamma( int value ) { libXine->setGamma( value ); } +void XineControl::xineInitialized() +{ + connect( xineVideoWidget, SIGNAL( videoResized( const QSize & ) ), this, SLOT( videoResized ( const QSize & ) ) ); + libXine->resize( xineVideoWidget->videoSize() ); + + emit initialized(); +} + void XineControl::stop( bool isSet ) { if ( !isSet ) { libXine->stop(); #if defined(Q_WS_QWS) && !defined(QT_NO_COP) if ( disabledSuspendScreenSaver ) { diff --git a/noncore/multimedia/opieplayer2/xinecontrol.h b/noncore/multimedia/opieplayer2/xinecontrol.h index 000529c..085de3f 100644 --- a/noncore/multimedia/opieplayer2/xinecontrol.h +++ b/noncore/multimedia/opieplayer2/xinecontrol.h @@ -39,13 +39,13 @@ #include "mediaplayerstate.h" class XineControl : public QObject { Q_OBJECT public: - XineControl( QWidget *videoContainerWidget, XineVideoWidget *xineWidget, + XineControl( XineVideoWidget *xineWidget, MediaPlayerState &_mediaPlayerState, QObject *parent = 0, const char *name =0 ); ~XineControl(); bool hasVideo() const { return hasVideoChannel; } bool hasAudio() const { return hasAudioChannel; } @@ -98,22 +98,26 @@ public slots: * Set the gamma value of the video output * @param int value between -100 and 100, 0 is original */ void setGamma( int ); +private slots: + void xineInitialized(); + private: XINE::Lib *libXine; long m_currentTime; long m_position; int m_length; QString m_fileName; bool disabledSuspendScreenSaver : 1; bool hasVideoChannel : 1; bool hasAudioChannel : 1; MediaPlayerState &mediaPlayerState; + XineVideoWidget *xineVideoWidget; signals: void positionChanged( long ); void initialized(); }; diff --git a/noncore/multimedia/opieplayer2/xinevideowidget.cpp b/noncore/multimedia/opieplayer2/xinevideowidget.cpp index 1d88cea..791818e 100644 --- a/noncore/multimedia/opieplayer2/xinevideowidget.cpp +++ b/noncore/multimedia/opieplayer2/xinevideowidget.cpp @@ -105,12 +105,27 @@ XineVideoWidget::~XineVideoWidget ( ) void XineVideoWidget::clear ( ) { m_buff = 0; repaint ( false ); } +QSize XineVideoWidget::videoSize() const +{ + QSize s = size(); + bool fs = ( s == qApp->desktop()->size() ); + + // if we are in fullscreen mode, do not rotate the video + // (!! the paint routine uses m_rotation + qt_screen-> transformOrientation() !!) + m_rotation = fs ? - qt_screen->transformOrientation() : 0; + + if ( fs && qt_screen->isTransformed() ) + s = qt_screen->mapToDevice( s ); + + return s; +} + void XineVideoWidget::paintEvent ( QPaintEvent * ) { if ( m_buff == 0 ) { QPainter p ( this ); p. fillRect ( rect ( ), black ); if ( m_logo ) @@ -248,23 +263,13 @@ void XineVideoWidget::setVideoFrame ( uchar* img, int w, int h, int bpl ) repaint ((( m_thisframe & m_lastframe ) != m_lastframe ) ? m_lastframe : m_thisframe, false ); } void XineVideoWidget::resizeEvent ( QResizeEvent * ) { - QSize s = size ( ); - bool fs = ( s == qApp-> desktop ( )-> size ( )); - - // if we are in fullscreen mode, do not rotate the video - // (!! the paint routine uses m_rotation + qt_screen-> transformOrientation() !!) - m_rotation = fs ? -qt_screen-> transformOrientation ( ) : 0; - - if ( fs && qt_screen-> isTransformed ( )) - s = qt_screen-> mapToDevice ( s ); - - emit videoResized ( s ); + emit videoResized( videoSize() ); } void XineVideoWidget::mouseReleaseEvent ( QMouseEvent * /*me*/ ) { emit clicked(); diff --git a/noncore/multimedia/opieplayer2/xinevideowidget.h b/noncore/multimedia/opieplayer2/xinevideowidget.h index 33f1470..8b3a3ea 100644 --- a/noncore/multimedia/opieplayer2/xinevideowidget.h +++ b/noncore/multimedia/opieplayer2/xinevideowidget.h @@ -47,12 +47,14 @@ public: ~XineVideoWidget ( ); QImage *logo ( ) const; void setLogo ( QImage *image ); void setVideoFrame ( uchar *image, int width, int height, int linestep ); void clear ( ); + QSize videoSize() const; + protected: void paintEvent( QPaintEvent *p ); void resizeEvent ( QResizeEvent *r ); void mouseReleaseEvent ( QMouseEvent *e ); @@ -66,9 +68,9 @@ private: uchar *m_buff; int m_bytes_per_line_fb; int m_bytes_per_line_frame; int m_bytes_per_pixel; QImage *m_logo; - int m_rotation; + mutable int m_rotation; }; |