| |   |
| 274 | 274 | } |
| 275 | 275 | |
| 276 | 276 | if (SUCCEEDED(hr)) { |
| m_executedTasks = SetSource; |
| m_executedTasks |= SetSource; |
| 278 | 278 | m_pendingTasks |= Render; |
| 279 | 279 | |
| 280 | 280 | if (m_audioOutput) |
| … | … | |
| 282 | 282 | if (m_videoOutput) |
| 283 | 283 | m_pendingTasks |= SetVideoOutput; |
| 284 | 284 | |
| if (m_rate != 1.0) |
| if (m_rate != 1.0 && m_rate != 0.0) |
| 286 | 286 | m_pendingTasks |= SetRate; |
| 287 | 287 | |
| 288 | 288 | m_source = source; |
| … | … | |
| 319 | 319 | source->setDevice(m_stream); |
| 320 | 320 | |
| 321 | 321 | if (SUCCEEDED(m_graph->AddFilter(source, L"Source"))) { |
| m_executedTasks = SetSource; |
| m_executedTasks |= SetSource; |
| 323 | 323 | m_pendingTasks |= Render; |
| 324 | 324 | |
| 325 | 325 | if (m_audioOutput) |
| … | … | |
| 327 | 327 | if (m_videoOutput) |
| 328 | 328 | m_pendingTasks |= SetVideoOutput; |
| 329 | 329 | |
| if (m_rate != 1.0) |
| if (m_rate != 1.0 && m_rate != 0.0) |
| 331 | 331 | m_pendingTasks |= SetRate; |
| 332 | 332 | |
| 333 | 333 | m_source = source; |
| … | … | |
| 346 | 346 | |
| 347 | 347 | void DirectShowPlayerService::doRender(QMutexLocker *locker) |
| 348 | 348 | { |
| m_pendingTasks |= m_executedTasks & (Play | Pause); |
| if (m_executedTasks & Pause) |
| m_pendingTasks |= Pause; |
| else if (m_executedTasks & Play && m_rate != 0.0) |
| m_pendingTasks |= Play; |
| 350 | 353 | |
| 351 | 354 | if (IMediaControl *control = com_cast<IMediaControl>(m_graph, IID_IMediaControl)) { |
| 352 | 355 | control->Stop(); |
| … | … | |
| 627 | 627 | { |
| 628 | 628 | QMutexLocker locker(&m_mutex); |
| 629 | 629 | |
| m_pendingTasks &= ~Pause; |
| m_pendingTasks |= Play; |
| if (m_rate != 0.0) { |
| m_pendingTasks &= ~Pause; |
| m_pendingTasks |= Play; |
| } else { |
| m_pendingTasks |= Pause; |
| m_executedTasks |= Play; |
| } |
| 632 | 637 | |
| 633 | 638 | if (m_executedTasks & Render) { |
| 634 | 639 | if (m_executedTasks & Stop) { |
| … | … | |
| 658 | 658 | |
| 659 | 659 | if (SUCCEEDED(hr)) { |
| 660 | 660 | m_executedTasks |= Play; |
| m_executedTasks &= ~Pause; |
| 661 | 662 | |
| 662 | 663 | QCoreApplication::postEvent(this, new QEvent(QEvent::Type(StatusChange))); |
| 663 | 664 | } else { |
| … | … | |
| 713 | 713 | |
| 714 | 714 | m_executedTasks |= Pause; |
| 715 | 715 | |
| if (m_rate != 0.0) |
| m_executedTasks &= ~Play; |
|
| 716 | 719 | QCoreApplication::postEvent(this, new QEvent(QEvent::Type(StatusChange))); |
| 717 | 720 | } else { |
| 718 | 721 | m_error = QMediaPlayer::ResourceError; |
| … | … | |
| 776 | 776 | { |
| 777 | 777 | QMutexLocker locker(&m_mutex); |
| 778 | 778 | |
| m_rate = rate; |
| if (m_rate == rate) |
| return; |
| 780 | 781 | |
| m_pendingTasks |= SetRate; |
| if (rate == 0.0) { |
| if (m_pendingTasks & Play) { |
| m_executedTasks |= Play; |
| m_pendingTasks &= ~(Play | SetRate); |
| 782 | 786 | |
| if (!((m_executingTask | m_executedTasks) & Pause)) |
| m_pendingTasks |= Pause; |
| } else if ((m_executingTask | m_executedTasks) & Play) { |
| m_pendingTasks |= Pause; |
| } |
| } else { |
| m_pendingTasks |= SetRate; |
|
| if (m_rate == 0.0 && (m_executedTasks & Play) && !(m_executingTask & Play)) |
| m_pendingTasks |= Play; |
| } |
|
| m_rate = rate; |
|
| 783 | 801 | if (m_executedTasks & FinalizeLoad) |
| 784 | 802 | ::SetEvent(m_taskHandle); |
| 785 | 803 | } |
| … | … | |
| 830 | 830 | |
| 831 | 831 | seeking->Release(); |
| 832 | 832 | } else if (m_rate != 1.0) { |
| m_rate = 1.0; |
| m_rate = 1.0; |
| 834 | 834 | } |
|
| 835 | 836 | QCoreApplication::postEvent(this, new QEvent(QEvent::Type(RateChange))); |
| 836 | 837 | } |
| 837 | 838 | |
| … | … | |
| 1375 | 1375 | m_executingTask = Stop; |
| 1376 | 1376 | |
| 1377 | 1377 | doStop(&locker); |
| } else if (m_pendingTasks & SetRate) { |
| m_pendingTasks ^= SetRate; |
| m_executingTask = SetRate; |
|
| doSetRate(&locker); |
| 1383 | 1378 | } else if (m_pendingTasks & Pause) { |
| 1384 | 1379 | m_pendingTasks ^= Pause; |
| 1385 | 1380 | m_executingTask = Pause; |
| 1386 | 1381 | |
| 1387 | 1382 | doPause(&locker); |
| } else if (m_pendingTasks & SetRate) { |
| m_pendingTasks ^= SetRate; |
| m_executingTask = SetRate; |
|
| doSetRate(&locker); |
| 1388 | 1388 | } else if (m_pendingTasks & Seek) { |
| 1389 | 1389 | m_pendingTasks ^= Seek; |
| 1390 | 1390 | m_executingTask = Seek; |