Commit b30e7e47491bd33b31ee2dc5b4a69981f1212f09

  • Tree SHA1: 59b3f98
  • Parent SHA1: f303706 (Merge branch '4.7' of scm.dev.nokia.troll.no:qt/qt-multimedia-staging into 4.7-integration)
  • raw diff | raw patch
Pause the direct show graph when the playback rate is 0.0.

Reviewed-by: Justin McPherson
  
8787 , m_muteVolume(-1)
8888 , m_position(0)
8989 , m_duration(0)
90 , m_playbackRate(0)
90 , m_playbackRate(1.0)
9191 , m_seekable(false)
9292{
9393}
  
274274 }
275275
276276 if (SUCCEEDED(hr)) {
277 m_executedTasks = SetSource;
277 m_executedTasks |= SetSource;
278278 m_pendingTasks |= Render;
279279
280280 if (m_audioOutput)
282282 if (m_videoOutput)
283283 m_pendingTasks |= SetVideoOutput;
284284
285 if (m_rate != 1.0)
285 if (m_rate != 1.0 && m_rate != 0.0)
286286 m_pendingTasks |= SetRate;
287287
288288 m_source = source;
319319 source->setDevice(m_stream);
320320
321321 if (SUCCEEDED(m_graph->AddFilter(source, L"Source"))) {
322 m_executedTasks = SetSource;
322 m_executedTasks |= SetSource;
323323 m_pendingTasks |= Render;
324324
325325 if (m_audioOutput)
327327 if (m_videoOutput)
328328 m_pendingTasks |= SetVideoOutput;
329329
330 if (m_rate != 1.0)
330 if (m_rate != 1.0 && m_rate != 0.0)
331331 m_pendingTasks |= SetRate;
332332
333333 m_source = source;
346346
347347void DirectShowPlayerService::doRender(QMutexLocker *locker)
348348{
349 m_pendingTasks |= m_executedTasks & (Play | Pause);
349 if (m_executedTasks & Pause)
350 m_pendingTasks |= Pause;
351 else if (m_executedTasks & Play && m_rate != 0.0)
352 m_pendingTasks |= Play;
350353
351354 if (IMediaControl *control = com_cast<IMediaControl>(m_graph, IID_IMediaControl)) {
352355 control->Stop();
627627{
628628 QMutexLocker locker(&m_mutex);
629629
630 m_pendingTasks &= ~Pause;
631 m_pendingTasks |= Play;
630 if (m_rate != 0.0) {
631 m_pendingTasks &= ~Pause;
632 m_pendingTasks |= Play;
633 } else {
634 m_pendingTasks |= Pause;
635 m_executedTasks |= Play;
636 }
632637
633638 if (m_executedTasks & Render) {
634639 if (m_executedTasks & Stop) {
658658
659659 if (SUCCEEDED(hr)) {
660660 m_executedTasks |= Play;
661 m_executedTasks &= ~Pause;
661662
662663 QCoreApplication::postEvent(this, new QEvent(QEvent::Type(StatusChange)));
663664 } else {
713713
714714 m_executedTasks |= Pause;
715715
716 if (m_rate != 0.0)
717 m_executedTasks &= ~Play;
718
716719 QCoreApplication::postEvent(this, new QEvent(QEvent::Type(StatusChange)));
717720 } else {
718721 m_error = QMediaPlayer::ResourceError;
776776{
777777 QMutexLocker locker(&m_mutex);
778778
779 m_rate = rate;
779 if (m_rate == rate)
780 return;
780781
781 m_pendingTasks |= SetRate;
782 if (rate == 0.0) {
783 if (m_pendingTasks & Play) {
784 m_executedTasks |= Play;
785 m_pendingTasks &= ~(Play | SetRate);
782786
787 if (!((m_executingTask | m_executedTasks) & Pause))
788 m_pendingTasks |= Pause;
789 } else if ((m_executingTask | m_executedTasks) & Play) {
790 m_pendingTasks |= Pause;
791 }
792 } else {
793 m_pendingTasks |= SetRate;
794
795 if (m_rate == 0.0 && (m_executedTasks & Play) && !(m_executingTask & Play))
796 m_pendingTasks |= Play;
797 }
798
799 m_rate = rate;
800
783801 if (m_executedTasks & FinalizeLoad)
784802 ::SetEvent(m_taskHandle);
785803}
830830
831831 seeking->Release();
832832 } else if (m_rate != 1.0) {
833 m_rate = 1.0;
833 m_rate = 1.0;
834834 }
835
835836 QCoreApplication::postEvent(this, new QEvent(QEvent::Type(RateChange)));
836837}
837838
13751375 m_executingTask = Stop;
13761376
13771377 doStop(&locker);
1378 } else if (m_pendingTasks & SetRate) {
1379 m_pendingTasks ^= SetRate;
1380 m_executingTask = SetRate;
1381
1382 doSetRate(&locker);
13831378 } else if (m_pendingTasks & Pause) {
13841379 m_pendingTasks ^= Pause;
13851380 m_executingTask = Pause;
13861381
13871382 doPause(&locker);
1383 } else if (m_pendingTasks & SetRate) {
1384 m_pendingTasks ^= SetRate;
1385 m_executingTask = SetRate;
1386
1387 doSetRate(&locker);
13881388 } else if (m_pendingTasks & Seek) {
13891389 m_pendingTasks ^= Seek;
13901390 m_executingTask = Seek;