void tst_QMediaContent::testNull() { QMediaContent media; QCOMPARE(media.isNull(), true); QCOMPARE(media.canonicalUrl(), QUrl()); QCOMPARE(media.canonicalResource(), QMediaResource()); QCOMPARE(media.resources(), QMediaResourceList()); }
void QWinRTMediaPlayerControl::setMedia(const QMediaContent &media, QIODevice *stream) { Q_D(QWinRTMediaPlayerControl); if (d->media == media) return; d->media = media; d->stream.reset(stream); if (d->hasAudio != false) { d->hasAudio = false; emit audioAvailableChanged(d->hasAudio); } if (d->hasVideo != false) { d->hasVideo = false; emit videoAvailableChanged(d->hasVideo); } if (d->seekable != false) { d->seekable = false; emit seekableChanged(d->seekable); } if (d->bufferStatus != 0) { d->bufferStatus = 0; emit bufferStatusChanged(d->bufferStatus); } if (d->position != 0) { d->position = 0; emit positionChanged(d->position); } if (d->duration != 0) { d->duration = 0; emit durationChanged(d->duration); } QMediaPlayer::MediaStatus mediaStatus = media.isNull() ? QMediaPlayer::NoMedia : QMediaPlayer::LoadingMedia; if (d->mediaStatus != mediaStatus) { d->mediaStatus = mediaStatus; emit mediaStatusChanged(d->mediaStatus); } emit mediaChanged(media); QString urlString; if (!d->stream) { // If we can read the file via Qt, use the byte stream approach foreach (const QMediaResource &resource, media.resources()) { const QUrl url = resource.url(); if (url.isLocalFile()) { urlString = url.toLocalFile(); QScopedPointer<QFile> file(new QFile(urlString)); if (file->open(QFile::ReadOnly)) { file->setProperty(QT_WINRT_MEDIAPLAYER_STREAM_ID, true); d->stream.reset(file.take()); break; } } } }
void DirectShowPlayerService::load(const QMediaContent &media, QIODevice *stream) { QMutexLocker locker(&m_mutex); m_pendingTasks = 0; if (m_graph) releaseGraph(); m_resources = media.resources(); m_stream = stream; m_error = QMediaPlayer::NoError; m_errorString = QString(); m_position = 0; m_duration = 0; m_streamTypes = 0; m_executedTasks = 0; m_buffering = false; m_seekable = false; m_atEnd = false; m_metaDataControl->updateGraph(0, 0); if (m_resources.isEmpty() && !stream) { m_pendingTasks = 0; m_graphStatus = NoMedia; m_url.clear(); } else if (stream && (!stream->isReadable() || stream->isSequential())) { m_pendingTasks = 0; m_graphStatus = InvalidMedia; m_error = QMediaPlayer::ResourceError; } else { // {36b73882-c2c8-11cf-8b46-00805f6cef60} static const GUID iid_IFilterGraph2 = { 0x36b73882, 0xc2c8, 0x11cf, {0x8b, 0x46, 0x00, 0x80, 0x5f, 0x6c, 0xef, 0x60} }; m_graphStatus = Loading; m_graph = com_new<IFilterGraph2>(CLSID_FilterGraph, iid_IFilterGraph2); if (stream) m_pendingTasks = SetStreamSource; else m_pendingTasks = SetUrlSource; ::SetEvent(m_taskHandle); } m_playerControl->updateError(m_error, m_errorString); m_playerControl->updateMediaInfo(m_duration, m_streamTypes, m_seekable); m_playerControl->updateState(QMediaPlayer::StoppedState); m_playerControl->updatePosition(m_position); updateStatus(); }