summaryrefslogtreecommitdiff
path: root/noncore/multimedia/opieplayer2/xinecontrol.cpp
Unidiff
Diffstat (limited to 'noncore/multimedia/opieplayer2/xinecontrol.cpp') (more/less context) (show whitespace changes)
-rw-r--r--noncore/multimedia/opieplayer2/xinecontrol.cpp48
1 files changed, 28 insertions, 20 deletions
diff --git a/noncore/multimedia/opieplayer2/xinecontrol.cpp b/noncore/multimedia/opieplayer2/xinecontrol.cpp
index e1816c8..c47a773 100644
--- a/noncore/multimedia/opieplayer2/xinecontrol.cpp
+++ b/noncore/multimedia/opieplayer2/xinecontrol.cpp
@@ -23,108 +23,103 @@
23++=   -.     .`     .: details. 23++=   -.     .`     .: details.
24 :     =  ...= . :.=- 24 :     =  ...= . :.=-
25 -.   .:....=;==+<; You should have received a copy of the GNU 25 -.   .:....=;==+<; You should have received a copy of the GNU
26  -_. . .   )=.  = General Public License along with 26  -_. . .   )=.  = General Public License along with
27    --        :-=` this library; see the file COPYING.LIB. 27    --        :-=` this library; see the file COPYING.LIB.
28 If not, write to the Free Software Foundation, 28 If not, write to the Free Software Foundation,
29 Inc., 59 Temple Place - Suite 330, 29 Inc., 59 Temple Place - Suite 330,
30 Boston, MA 02111-1307, USA. 30 Boston, MA 02111-1307, USA.
31 31
32*/ 32*/
33 33
34#include "xinecontrol.h" 34#include "xinecontrol.h"
35#include "xinevideowidget.h" 35#include "xinevideowidget.h"
36 36
37/* OPIE */ 37/* OPIE */
38#include <opie2/odebug.h> 38#include <opie2/odebug.h>
39#include <qpe/qcopenvelope_qws.h> 39#include <qpe/qcopenvelope_qws.h>
40#include <qpe/qpeapplication.h> 40#include <qpe/qpeapplication.h>
41using namespace Opie::Core; 41using namespace Opie::Core;
42 42
43/* QT */ 43/* QT */
44#include <qtimer.h> 44#include <qtimer.h>
45#include <qmessagebox.h> 45#include <qmessagebox.h>
46 46
47XineControl::XineControl( XineVideoWidget *xineWidget,
48 MediaPlayerState &_mediaPlayerState,
49 QObject *parent, const char *name )
50 : QObject( parent, name ), mediaPlayerState( _mediaPlayerState ), xineVideoWidget( xineWidget )
51{
52 libXine = new XINE::Lib( XINE::Lib::InitializeImmediately, xineWidget );
53
54 init();
55}
56
57XineControl::XineControl( XINE::Lib *xine, XineVideoWidget *xineWidget, 47XineControl::XineControl( XINE::Lib *xine, XineVideoWidget *xineWidget,
58 MediaPlayerState &_mediaPlayerState, 48 MediaPlayerState &_mediaPlayerState,
59 QObject *parent, const char *name ) 49 QObject *parent, const char *name )
60 : QObject( parent, name ), libXine( xine ), mediaPlayerState( _mediaPlayerState ), xineVideoWidget( xineWidget ) 50 : QObject( parent, name ), libXine( xine ), mediaPlayerState( _mediaPlayerState ), xineVideoWidget( xineWidget )
61{ 51{
52 m_wasError = false;
53
62 xine->ensureInitialized(); 54 xine->ensureInitialized();
63 55
64 xine->setWidget( xineWidget ); 56 xine->setWidget( xineWidget );
65 57
66 init(); 58 init();
67} 59}
68 60
69void XineControl::init() 61void XineControl::init()
70{ 62{
71 connect( &mediaPlayerState, SIGNAL( pausedToggled(bool) ), this, SLOT( pause(bool) ) ); 63 connect( &mediaPlayerState, SIGNAL( pausedToggled(bool) ), this, SLOT( pause(bool) ) );
72 connect( this, SIGNAL( positionChanged(long) ), &mediaPlayerState, SLOT( updatePosition(long) ) ); 64 connect( this, SIGNAL( positionChanged(long) ), &mediaPlayerState, SLOT( updatePosition(long) ) );
73 connect( &mediaPlayerState, SIGNAL( playingToggled(bool) ), this, SLOT( stop(bool) ) ); 65 connect( &mediaPlayerState, SIGNAL( playingToggled(bool) ), this, SLOT( stop(bool) ) );
74 connect( &mediaPlayerState, SIGNAL( fullscreenToggled(bool) ), this, SLOT( setFullscreen(bool) ) ); 66 connect( &mediaPlayerState, SIGNAL( fullscreenToggled(bool) ), this, SLOT( setFullscreen(bool) ) );
75 connect( &mediaPlayerState, SIGNAL( positionChanged(long) ), this, SLOT( seekTo(long) ) ); 67 connect( &mediaPlayerState, SIGNAL( positionChanged(long) ), this, SLOT( seekTo(long) ) );
76 connect( &mediaPlayerState, SIGNAL( videoGammaChanged(int) ), this, SLOT( setGamma(int) ) ); 68 connect( &mediaPlayerState, SIGNAL( videoGammaChanged(int) ), this, SLOT( setGamma(int) ) );
77 connect( libXine, SIGNAL( stopped() ), this, SLOT( nextMedia() ) ); 69 connect( libXine, SIGNAL( stopped() ), this, SLOT( nextMedia() ) );
78 connect( xineVideoWidget, SIGNAL( videoResized(const QSize&) ), this, SLOT( videoResized(const QSize&) ) ); 70 connect( xineVideoWidget, SIGNAL( videoResized(const QSize&) ), this, SLOT( videoResized(const QSize&) ) );
79 71
80 disabledSuspendScreenSaver = FALSE; 72 disabledSuspendScreenSaver = FALSE;
81} 73}
82 74
83XineControl::~XineControl() { 75XineControl::~XineControl() {
84#if !defined(QT_NO_COP) 76#if !defined(QT_NO_COP)
85 if ( disabledSuspendScreenSaver ) { 77 if ( disabledSuspendScreenSaver ) {
86 disabledSuspendScreenSaver = FALSE; 78 disabledSuspendScreenSaver = FALSE;
87 // Re-enable the suspend mode 79 // Re-enable the suspend mode
88 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; 80 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable;
89 } 81 }
90#endif 82#endif
91 delete libXine; 83 delete libXine;
92} 84}
93 85
94void XineControl::play( const QString& fileName ) { 86void XineControl::play( const QString& fileName ) {
95 87
96 hasVideoChannel = FALSE; 88 hasVideoChannel = FALSE;
97 hasAudioChannel = FALSE; 89 hasAudioChannel = FALSE;
98 m_fileName = fileName; 90 m_fileName = fileName;
91 m_wasError = false;
99 92
100 odebug << "<<FILENAME: " + fileName + ">>>>" << oendl;
101 93
94 /*
95 * If Playing Fails we will fire up an MessgaeBox
96 * but present the AudioWidget so the User can
97 * either Quit and change the Playlist or Continue
98 */
102 if ( !libXine->play( fileName, 0, 0 ) ) { 99 if ( !libXine->play( fileName, 0, 0 ) ) {
103 QMessageBox::warning( 0l , tr( "Failure" ), getErrorCode() ); 100 QMessageBox::warning( 0l , tr( "Failure" ), getErrorCode() );
104 // toggle stop so the the play button is reset 101 m_wasError = true;
105 mediaPlayerState.setPlaying( false );
106 return;
107 } 102 }
108 mediaPlayerState.setPlaying( true ); 103 mediaPlayerState.setPlaying( true );
109 104
110 MediaPlayerState::DisplayType displayType; 105 MediaPlayerState::DisplayType displayType;
111 if ( !libXine->hasVideo() ) { 106 if ( !libXine->hasVideo() ) {
112 displayType = MediaPlayerState::Audio; 107 displayType = MediaPlayerState::Audio;
113 libXine->setShowVideo( false ); 108 libXine->setShowVideo( false );
114 hasAudioChannel = TRUE; 109 hasAudioChannel = TRUE;
115 } else { 110 } else {
116 displayType = MediaPlayerState::Video; 111 displayType = MediaPlayerState::Video;
117 libXine->setShowVideo( true ); 112 libXine->setShowVideo( true );
118 hasVideoChannel = TRUE; 113 hasVideoChannel = TRUE;
119 } 114 }
120 // determine if slider is shown 115 // determine if slider is shown
121 mediaPlayerState.setIsSeekable( libXine->isSeekable() ); 116 mediaPlayerState.setIsSeekable( libXine->isSeekable() );
122 117
123 // which gui (video / audio) 118 // which gui (video / audio)
124 mediaPlayerState.setDisplayType( displayType ); 119 mediaPlayerState.setDisplayType( displayType );
125 120
126#if defined(Q_WS_QWS) && !defined(QT_NO_COP) 121#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
127 if ( !disabledSuspendScreenSaver ) { 122 if ( !disabledSuspendScreenSaver ) {
128 disabledSuspendScreenSaver = TRUE; 123 disabledSuspendScreenSaver = TRUE;
129 // Stop the screen from blanking and power saving state 124 // Stop the screen from blanking and power saving state
130 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) 125 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" )
@@ -193,82 +188,95 @@ long XineControl::position() {
193 m_position = ( currentTime() ); 188 m_position = ( currentTime() );
194 mediaPlayerState.updatePosition( m_position ); 189 mediaPlayerState.updatePosition( m_position );
195 long emitPos = (long)m_position; 190 long emitPos = (long)m_position;
196 emit positionChanged( emitPos ); 191 emit positionChanged( emitPos );
197 if( mediaPlayerState.isPlaying() ) { 192 if( mediaPlayerState.isPlaying() ) {
198 // needs to be stopped the media is stopped 193 // needs to be stopped the media is stopped
199 QTimer::singleShot( 1000, this, SLOT( position() ) ); 194 QTimer::singleShot( 1000, this, SLOT( position() ) );
200 } 195 }
201 return m_position; 196 return m_position;
202} 197}
203 198
204/** 199/**
205 * Set videoplayback to fullscreen 200 * Set videoplayback to fullscreen
206 * @param isSet 201 * @param isSet
207 */ 202 */
208void XineControl::setFullscreen( bool isSet ) { 203void XineControl::setFullscreen( bool isSet ) {
209 libXine->showVideoFullScreen( isSet ); 204 libXine->showVideoFullScreen( isSet );
210} 205}
211 206
212 207
213QString XineControl::getMetaInfo() { 208QString XineControl::getMetaInfo() {
214 209
215 QString returnString; 210 QString returnString;
216 211
212 /*
213 * If there was an error let us
214 * change the Meta Info to contain the Error Message
215 */
216 if ( m_wasError ) {
217 returnString = tr("Error on file '%1' with reason: ",
218 "Error when playing a file" ).arg( m_fileName );
219 returnString += getErrorCode();
220 returnString.replace( QRegExp("<qt>", false), "" );
221 returnString.replace( QRegExp("</qt>", false), "" );
222 return returnString;
223 }
224
217 if ( !libXine->metaInfo( 0 ).isEmpty() ) { 225 if ( !libXine->metaInfo( 0 ).isEmpty() ) {
218 returnString += tr( " Title: " + libXine->metaInfo( 0 ) ); 226 returnString += tr( " Title: " + libXine->metaInfo( 0 ) );
219 } 227 }
220 228
221 if ( !libXine->metaInfo( 1 ).isEmpty() ) { 229 if ( !libXine->metaInfo( 1 ).isEmpty() ) {
222 returnString += tr( " Comment: " + libXine->metaInfo( 1 ) ); 230 returnString += tr( " Comment: " + libXine->metaInfo( 1 ) );
223 } 231 }
224 232
225 if ( !libXine->metaInfo( 2 ).isEmpty() ) { 233 if ( !libXine->metaInfo( 2 ).isEmpty() ) {
226 returnString += tr( " Artist: " + libXine->metaInfo( 2 ) ); 234 returnString += tr( " Artist: " + libXine->metaInfo( 2 ) );
227 } 235 }
228 236
229 if ( !libXine->metaInfo( 3 ).isEmpty() ) { 237 if ( !libXine->metaInfo( 3 ).isEmpty() ) {
230 returnString += tr( " Genre: " + libXine->metaInfo( 3 ) ); 238 returnString += tr( " Genre: " + libXine->metaInfo( 3 ) );
231 } 239 }
232 240
233 if ( !libXine->metaInfo( 4 ).isEmpty() ) { 241 if ( !libXine->metaInfo( 4 ).isEmpty() ) {
234 returnString += tr( " Album: " + libXine->metaInfo( 4 ) ); 242 returnString += tr( " Album: " + libXine->metaInfo( 4 ) );
235 } 243 }
236 244
237 if ( !libXine->metaInfo( 5 ).isEmpty() ) { 245 if ( !libXine->metaInfo( 5 ).isEmpty() ) {
238 returnString += tr( " Year: " + libXine->metaInfo( 5 ) ); 246 returnString += tr( " Year: " + libXine->metaInfo( 5 ) );
239 } 247 }
240 return returnString; 248 return returnString;
241} 249}
242 250
243QString XineControl::getErrorCode() { 251QString XineControl::getErrorCode() {
244 252
245 int errorCode = libXine->error(); 253 int errorCode = libXine->error();
246 254
247 odebug << QString("ERRORCODE: %1 ").arg(errorCode) << oendl; 255 odebug << QString("ERRORCODE: %1 ").arg(errorCode) << oendl;
248 256
249 if ( errorCode == 1 ) { 257 if ( errorCode == 1 ) {
250 return tr( "No input plugin found for this media type" ); 258 return tr( "<qt>No input plugin found for this media type</qt>" );
251 } else if ( errorCode == 2 ) { 259 } else if ( errorCode == 2 ) {
252 return tr( "No demux plugin found for this media type" ); 260 return tr( "<qt>No demux plugin found for this media type</qt>" );
253 } else if ( errorCode == 3 ) { 261 } else if ( errorCode == 3 ) {
254 return tr( "Demuxing failed for this media type" ); 262 return tr( "<qt>Demuxing failed for this media type</qt>" );
255 } else if ( errorCode == 4 ) { 263 } else if ( errorCode == 4 ) {
256 return tr( "Malformed MRL" ); 264 return tr( "<qt>Malformed MRL</qt>" );
257 } else if ( errorCode == 5 ) { 265 } else if ( errorCode == 5 ) {
258 return tr( "Input failed" ); 266 return tr( "<qt>Input failed</qt>" );
259 } else { 267 } else {
260 return tr( "Some other error" ); 268 return tr( "<qt>Some other error</qt>" );
261 } 269 }
262} 270}
263 271
264/** 272/**
265 * Seek to a position in the track 273 * Seek to a position in the track
266 * @param second the second to jump to 274 * @param second the second to jump to
267 */ 275 */
268void XineControl::seekTo( long second ) { 276void XineControl::seekTo( long second ) {
269 libXine->seekTo( (int)second ); 277 libXine->seekTo( (int)second );
270} 278}
271 279
272void XineControl::videoResized ( const QSize &s ) { 280void XineControl::videoResized ( const QSize &s ) {
273 libXine->resize( s ); 281 libXine->resize( s );
274} 282}