Changeset 769 for trunk/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp
- Timestamp:
- Aug 2, 2010, 9:27:30 PM (15 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/vendor/nokia/qt/4.6.3 (added) merged: 768 /branches/vendor/nokia/qt/current merged: 767 /branches/vendor/nokia/qt/4.6.2 removed
- Property svn:mergeinfo changed
-
trunk/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp
r561 r769 49 49 : AbstractPlayer(player) 50 50 , m_parent(parent) 51 , m_p layPending(false)51 , m_pending(NothingPending) 52 52 , m_positionTimer(new QTimer(this)) 53 53 , m_bufferStatusTimer(new QTimer(this)) … … 75 75 76 76 case LoadingState: 77 m_playPending = true;77 setPending(PlayPending); 78 78 break; 79 79 80 80 case StoppedState: 81 81 case PausedState: 82 doPlay(); 83 startPositionTimer(); 84 changeState(PlayingState); 82 startPlayback(); 85 83 break; 86 84 … … 104 102 TRACE_ENTRY("state %d", privateState()); 105 103 106 m_playPending = false;107 104 stopTimers(); 108 105 … … 110 107 case GroundState: 111 108 case LoadingState: 109 case StoppedState: 110 setPending(PausePending); 111 break; 112 112 113 case PausedState: 113 case StoppedState:114 114 // Do nothing 115 115 break; … … 136 136 TRACE_ENTRY("state %d", privateState()); 137 137 138 m_playPending = false;138 setPending(NothingPending); 139 139 stopTimers(); 140 140 … … 366 366 } 367 367 368 void MMF::AbstractMediaPlayer::loadingComplete(int error) 369 { 370 Q_ASSERT(Phonon::LoadingState == state()); 371 372 if (KErrNone == error) { 373 updateMetaData(); 374 changeState(StoppedState); 375 } else { 376 setError(tr("Loading clip failed"), error); 377 } 378 } 379 368 380 void MMF::AbstractMediaPlayer::playbackComplete(int error) 369 381 { 370 382 stopTimers(); 371 383 384 if (KErrNone == error && !m_aboutToFinishSent) { 385 const qint64 total = totalTime(); 386 emit MMF::AbstractPlayer::tick(total); 387 m_aboutToFinishSent = true; 388 emit aboutToFinish(); 389 } 390 372 391 if (KErrNone == error) { 373 changeState( StoppedState);392 changeState(PausedState); 374 393 375 394 // MediaObject::switchToNextSource deletes the current player, so we … … 380 399 else { 381 400 setError(tr("Playback complete"), error); 401 emit finished(); 382 402 } 383 403 } … … 394 414 void MMF::AbstractMediaPlayer::positionTick() 395 415 { 396 emitMarksIfReached();397 398 416 const qint64 current = currentTime(); 417 emitMarksIfReached(current); 399 418 emit MMF::AbstractPlayer::tick(current); 400 419 } 401 420 402 void MMF::AbstractMediaPlayer::emitMarksIfReached() 403 { 404 const qint64 current = currentTime(); 421 void MMF::AbstractMediaPlayer::emitMarksIfReached(qint64 current) 422 { 405 423 const qint64 total = totalTime(); 406 424 const qint64 remaining = total - current; … … 436 454 } 437 455 456 void MMF::AbstractMediaPlayer::setPending(Pending pending) 457 { 458 const Phonon::State oldState = state(); 459 m_pending = pending; 460 const Phonon::State newState = state(); 461 if (newState != oldState) 462 emit stateChanged(newState, oldState); 463 } 464 465 void MMF::AbstractMediaPlayer::startPlayback() 466 { 467 doPlay(); 468 startPositionTimer(); 469 changeState(PlayingState); 470 } 471 438 472 void MMF::AbstractMediaPlayer::bufferStatusTick() 439 473 { 440 474 emit MMF::AbstractPlayer::bufferStatus(bufferStatus()); 475 } 476 477 Phonon::State MMF::AbstractMediaPlayer::phononState(PrivateState state) const 478 { 479 Phonon::State result = AbstractPlayer::phononState(state); 480 481 if (PausePending == m_pending) { 482 Q_ASSERT(Phonon::StoppedState == result || Phonon::LoadingState == result); 483 result = Phonon::PausedState; 484 } 485 486 return result; 441 487 } 442 488 … … 448 494 const Phonon::State newPhononState = phononState(newState); 449 495 450 // TODO: add some invariants to check that the transition is valid451 AbstractPlayer::changeState(newState);452 453 496 if (LoadingState == oldPhononState && StoppedState == newPhononState) { 454 // Ensure initial volume is set on MMF API before starting playback 455 doVolumeChanged(); 456 457 // Check whether play() was called while clip was being loaded. If so, 458 // playback should be started now 459 if (m_playPending) { 460 TRACE_0("play was called while loading; starting playback now"); 461 m_playPending = false; 462 play(); 463 } 497 switch (m_pending) { 498 case NothingPending: 499 AbstractPlayer::changeState(newState); 500 break; 501 502 case PlayPending: 503 changeState(PlayingState); // necessary in order to apply initial volume 504 doVolumeChanged(); 505 startPlayback(); 506 break; 507 508 case PausePending: 509 AbstractPlayer::changeState(PausedState); 510 break; 511 } 512 513 setPending(NothingPending); 514 } else { 515 AbstractPlayer::changeState(newState); 464 516 } 465 517 }
Note:
See TracChangeset
for help on using the changeset viewer.