-rw-r--r-- | core/multimedia/opieplayer/loopcontrol.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/core/multimedia/opieplayer/loopcontrol.cpp b/core/multimedia/opieplayer/loopcontrol.cpp index 310d512..6f86b4a 100644 --- a/core/multimedia/opieplayer/loopcontrol.cpp +++ b/core/multimedia/opieplayer/loopcontrol.cpp | |||
@@ -319,130 +319,134 @@ void LoopControl::setPaused( bool pause ) { | |||
319 | } | 319 | } |
320 | 320 | ||
321 | 321 | ||
322 | void LoopControl::stop( bool willPlayAgainShortly ) { | 322 | void LoopControl::stop( bool willPlayAgainShortly ) { |
323 | 323 | ||
324 | #if defined(Q_WS_QWS) && !defined(QT_NO_COP) | 324 | #if defined(Q_WS_QWS) && !defined(QT_NO_COP) |
325 | if ( !willPlayAgainShortly && disabledSuspendScreenSaver ) { | 325 | if ( !willPlayAgainShortly && disabledSuspendScreenSaver ) { |
326 | disabledSuspendScreenSaver = FALSE; | 326 | disabledSuspendScreenSaver = FALSE; |
327 | // Re-enable the suspend mode | 327 | // Re-enable the suspend mode |
328 | QCopEnvelope("QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; | 328 | QCopEnvelope("QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; |
329 | } | 329 | } |
330 | #endif | 330 | #endif |
331 | 331 | ||
332 | if ( mediaPlayerState->curDecoder() && mediaPlayerState->curDecoder()->isOpen() ) { | 332 | if ( mediaPlayerState->curDecoder() && mediaPlayerState->curDecoder()->isOpen() ) { |
333 | 333 | ||
334 | killTimers(); | 334 | killTimers(); |
335 | 335 | ||
336 | audioMutex->lock(); | 336 | audioMutex->lock(); |
337 | 337 | ||
338 | mediaPlayerState->curDecoder()->close(); | 338 | mediaPlayerState->curDecoder()->close(); |
339 | 339 | ||
340 | if ( audioDevice ) { | 340 | if ( audioDevice ) { |
341 | delete audioDevice; | 341 | delete audioDevice; |
342 | delete audioBuffer; | 342 | delete audioBuffer; |
343 | audioDevice = 0; | 343 | audioDevice = 0; |
344 | audioBuffer = 0; | 344 | audioBuffer = 0; |
345 | } | 345 | } |
346 | 346 | ||
347 | audioMutex->unlock(); | 347 | audioMutex->unlock(); |
348 | 348 | ||
349 | } | 349 | } |
350 | } | 350 | } |
351 | 351 | ||
352 | 352 | ||
353 | bool LoopControl::init( const QString& filename ) { | 353 | bool LoopControl::init( const QString& filename ) { |
354 | stop(); | 354 | stop(); |
355 | 355 | ||
356 | audioMutex->lock(); | 356 | audioMutex->lock(); |
357 | 357 | ||
358 | fileName = filename; | 358 | fileName = filename; |
359 | stream = 0; // only play stream 0 for now | 359 | stream = 0; // only play stream 0 for now |
360 | current_frame = total_video_frames = total_audio_samples = 0; | 360 | current_frame = total_video_frames = total_audio_samples = 0; |
361 | 361 | ||
362 | qDebug( "Using the %s decoder", mediaPlayerState->curDecoder()->pluginName() ); | 362 | qDebug( "Using the %s decoder", mediaPlayerState->curDecoder()->pluginName() ); |
363 | 363 | ||
364 | // ### Hack to use libmpeg3plugin to get the number of audio samples if we are using the libmad plugin | 364 | // ### Hack to use libmpeg3plugin to get the number of audio samples if we are using the libmad plugin |
365 | if ( mediaPlayerState->curDecoder()->pluginName() == QString("LibMadPlugin") ) { | 365 | if ( mediaPlayerState->curDecoder()->pluginName() == QString("LibMadPlugin") ) { |
366 | if ( mediaPlayerState->libMpeg3Decoder() && mediaPlayerState->libMpeg3Decoder()->open( filename )) { | 366 | if ( mediaPlayerState->libMpeg3Decoder() && mediaPlayerState->libMpeg3Decoder()->open( filename )) { |
367 | total_audio_samples = mediaPlayerState->libMpeg3Decoder()->audioSamples( 0 ); | 367 | total_audio_samples = mediaPlayerState->libMpeg3Decoder()->audioSamples( 0 ); |
368 | mediaPlayerState->libMpeg3Decoder()->close(); | 368 | mediaPlayerState->libMpeg3Decoder()->close(); |
369 | } | 369 | } |
370 | } | 370 | } |
371 | 371 | ||
372 | if ( !mediaPlayerState->curDecoder()|| !mediaPlayerState->curDecoder()->open( filename ) ) { | 372 | if ( !mediaPlayerState->curDecoder()|| !mediaPlayerState->curDecoder()->open( filename ) ) { |
373 | audioMutex->unlock(); | 373 | audioMutex->unlock(); |
374 | return FALSE; | 374 | return FALSE; |
375 | } | 375 | } |
376 | 376 | ||
377 | hasAudioChannel = mediaPlayerState->curDecoder()->audioStreams() > 0; | 377 | hasAudioChannel = mediaPlayerState->curDecoder()->audioStreams() > 0; |
378 | hasVideoChannel = mediaPlayerState->curDecoder()->videoStreams() > 0; | 378 | hasVideoChannel = mediaPlayerState->curDecoder()->videoStreams() > 0; |
379 | 379 | ||
380 | if ( hasAudioChannel ) { | 380 | if ( hasAudioChannel ) { |
381 | int astream = 0; | 381 | int astream = 0; |
382 | 382 | ||
383 | channels = mediaPlayerState->curDecoder()->audioChannels( astream ); | 383 | if ( mediaPlayerState->curDecoder()->pluginName() == QString("LibMpeg3Plugin") ) |
384 | qDebug( "LC- channels = %d", channels ); | 384 | channels = 2; //dont akx me why, but it needs this hack |
385 | else | ||
386 | channels = mediaPlayerState->curDecoder()->audioChannels( astream ); | ||
387 | |||
388 | qDebug( "LC- channels = %d", channels ); | ||
385 | 389 | ||
386 | if ( !total_audio_samples ) | 390 | if ( !total_audio_samples ) |
387 | total_audio_samples = mediaPlayerState->curDecoder()->audioSamples( astream ); | 391 | total_audio_samples = mediaPlayerState->curDecoder()->audioSamples( astream ); |
388 | 392 | ||
389 | total_audio_samples += 1000; | 393 | total_audio_samples += 1000; |
390 | 394 | ||
391 | mediaPlayerState->setLength( total_audio_samples ); | 395 | mediaPlayerState->setLength( total_audio_samples ); |
392 | 396 | ||
393 | freq = mediaPlayerState->curDecoder()->audioFrequency( astream ); | 397 | freq = mediaPlayerState->curDecoder()->audioFrequency( astream ); |
394 | qDebug( "LC- frequency = %d", freq ); | 398 | qDebug( "LC- frequency = %d", freq ); |
395 | 399 | ||
396 | audioSampleCounter = 0; | 400 | audioSampleCounter = 0; |
397 | int bits_per_sample; | 401 | int bits_per_sample; |
398 | if ( mediaPlayerState->curDecoder()->pluginName() == QString("LibWavPlugin") ) { | 402 | if ( mediaPlayerState->curDecoder()->pluginName() == QString("LibWavPlugin") ) { |
399 | bits_per_sample =(int) mediaPlayerState->curDecoder()->getTime(); | 403 | bits_per_sample =(int) mediaPlayerState->curDecoder()->getTime(); |
400 | qDebug("using stupid hack"); | 404 | qDebug("using stupid hack"); |
401 | } else { | 405 | } else { |
402 | bits_per_sample=0; | 406 | bits_per_sample=0; |
403 | } | 407 | } |
404 | 408 | ||
405 | audioDevice = new AudioDevice( freq, channels, bits_per_sample); | 409 | audioDevice = new AudioDevice( freq, channels, bits_per_sample); |
406 | audioBuffer = new char[ audioDevice->bufferSize() ]; | 410 | audioBuffer = new char[ audioDevice->bufferSize() ]; |
407 | channels = audioDevice->channels(); | 411 | channels = audioDevice->channels(); |
408 | 412 | ||
409 | //### must check which frequency is actually used. | 413 | //### must check which frequency is actually used. |
410 | static const int size = 1; | 414 | static const int size = 1; |
411 | short int buf[size]; | 415 | short int buf[size]; |
412 | long samplesRead = 0; | 416 | long samplesRead = 0; |
413 | mediaPlayerState->curDecoder()->audioReadSamples( buf, channels, size, samplesRead, stream ); | 417 | mediaPlayerState->curDecoder()->audioReadSamples( buf, channels, size, samplesRead, stream ); |
414 | } | 418 | } |
415 | 419 | ||
416 | if ( hasVideoChannel ) { | 420 | if ( hasVideoChannel ) { |
417 | total_video_frames = mediaPlayerState->curDecoder()->videoFrames( stream ); | 421 | total_video_frames = mediaPlayerState->curDecoder()->videoFrames( stream ); |
418 | 422 | ||
419 | mediaPlayerState->setLength( total_video_frames ); | 423 | mediaPlayerState->setLength( total_video_frames ); |
420 | 424 | ||
421 | framerate = mediaPlayerState->curDecoder()->videoFrameRate( stream ); | 425 | framerate = mediaPlayerState->curDecoder()->videoFrameRate( stream ); |
422 | DecodeLoopDebug(( "Frame rate %g total %ld", framerate, total_video_frames )); | 426 | DecodeLoopDebug(( "Frame rate %g total %ld", framerate, total_video_frames )); |
423 | 427 | ||
424 | if ( framerate <= 1.0 ) { | 428 | if ( framerate <= 1.0 ) { |
425 | DecodeLoopDebug(( "Crazy frame rate, resetting to sensible" )); | 429 | DecodeLoopDebug(( "Crazy frame rate, resetting to sensible" )); |
426 | framerate = 25; | 430 | framerate = 25; |
427 | } | 431 | } |
428 | 432 | ||
429 | if ( total_video_frames == 1 ) { | 433 | if ( total_video_frames == 1 ) { |
430 | DecodeLoopDebug(( "Cannot seek to frame" )); | 434 | DecodeLoopDebug(( "Cannot seek to frame" )); |
431 | } | 435 | } |
432 | 436 | ||
433 | } | 437 | } |
434 | 438 | ||
435 | current_frame = 0; | 439 | current_frame = 0; |
436 | prev_frame = -1; | 440 | prev_frame = -1; |
437 | 441 | ||
438 | connect( mediaPlayerState, SIGNAL( positionChanged( long ) ), this, SLOT( setPosition( long ) ) ); | 442 | connect( mediaPlayerState, SIGNAL( positionChanged( long ) ), this, SLOT( setPosition( long ) ) ); |
439 | connect( mediaPlayerState, SIGNAL( pausedToggled( bool ) ), this, SLOT( setPaused( bool ) ) ); | 443 | connect( mediaPlayerState, SIGNAL( pausedToggled( bool ) ), this, SLOT( setPaused( bool ) ) ); |
440 | 444 | ||
441 | audioMutex->unlock(); | 445 | audioMutex->unlock(); |
442 | 446 | ||
443 | return TRUE; | 447 | return TRUE; |
444 | } | 448 | } |
445 | 449 | ||
446 | 450 | ||
447 | void LoopControl::play() { | 451 | void LoopControl::play() { |
448 | qDebug("LC- play"); | 452 | qDebug("LC- play"); |