BbMediaPlayerControl::BbMediaPlayerControl(QObject *parent) : QMediaPlayerControl(parent), m_connection(0), m_context(0), m_audioId(-1), m_state(QMediaPlayer::StoppedState), m_volume(100), m_muted(false), m_rate(1), m_id(-1), m_eventMonitor(0), m_position(0), m_mediaStatus(QMediaPlayer::NoMedia), m_playAfterMediaLoaded(false), m_inputAttached(false), m_stopEventsToIgnore(0), m_bufferStatus(0) { m_loadingTimer.setSingleShot(true); m_loadingTimer.setInterval(0); connect(&m_loadingTimer, SIGNAL(timeout()), this, SLOT(continueLoadMedia())); if (!s_eventFilterInstalled) { s_eventFilterInstalled = true; s_previousEventFilter = QAbstractEventDispatcher::instance()->setEventFilter(s_eventFilter); } openConnection(); }
MmRendererMediaPlayerControl::MmRendererMediaPlayerControl(QObject *parent) : QMediaPlayerControl(parent), m_connection(0), m_context(0), m_audioId(-1), m_state(QMediaPlayer::StoppedState), m_volume(100), m_muted(false), m_rate(1), m_id(-1), m_position(0), m_mediaStatus(QMediaPlayer::NoMedia), m_playAfterMediaLoaded(false), m_inputAttached(false), m_stopEventsToIgnore(0), m_bufferLevel(0) { m_loadingTimer.setSingleShot(true); m_loadingTimer.setInterval(0); connect(&m_loadingTimer, SIGNAL(timeout()), this, SLOT(continueLoadMedia())); QCoreApplication::eventDispatcher()->installNativeEventFilter(this); }
void BbMediaPlayerControl::setMedia(const QMediaContent &media, QIODevice *stream) { Q_UNUSED(stream); // not supported stop(); detach(); m_media = media; emit mediaChanged(m_media); // Slight hack: With MediaPlayer QtQuick elements that have autoPlay set to true, playback // would start before the QtQuick canvas is propagated to all elements, and therefore our // video output would not work. Therefore, delay actually playing the media a bit so that the // canvas is ready. // The mmrenderer doesn't allow to attach video outputs after playing has started, otherwise // this would be unnecessary. if (!m_media.isNull()) { setMediaStatus(QMediaPlayer::LoadingMedia); m_loadingTimer.start(); // singleshot timer to continueLoadMedia() } else { continueLoadMedia(); // still needed, as it will update the media status and clear metadata } }