Ref<MediaSource> MediaSource::create(ScriptExecutionContext& context) { Ref<MediaSource> mediaSource(adoptRef(*new MediaSource(context))); mediaSource->suspendIfNeeded(); return mediaSource; }
MediaSource* MediaSource::create(ExecutionContext* context) { MediaSource* mediaSource(adoptRefCountedGarbageCollected(new MediaSource(context))); mediaSource->suspendIfNeeded(); return mediaSource; }
PassRefPtr<MediaSource> MediaSource::create(ScriptExecutionContext* context) { RefPtr<MediaSource> mediaSource(adoptRef(new MediaSource(context))); mediaSource->suspendIfNeeded(); return mediaSource.release(); }
void MediaObjectPrivate::_k_stateChanged(Phonon::State newstate, Phonon::State oldstate) { Q_Q(MediaObject); if (mediaSource.type() != MediaSource::Url) { // special handling only necessary for URLs because of the fallback emit q->stateChanged(newstate, oldstate); return; } if (errorOverride) { errorOverride = false; if (newstate == ErrorState) { return; } oldstate = ErrorState; } // backend MediaObject reached ErrorState, try a KioMediaSource if (newstate == Phonon::ErrorState && !kiofallback) { kiofallback = Platform::createMediaStream(mediaSource.url(), q); if (!kiofallback) { pDebug() << "backend MediaObject reached ErrorState, no KIO fallback available"; emit q->stateChanged(newstate, oldstate); return; } pDebug() << "backend MediaObject reached ErrorState, trying Platform::createMediaStream now"; ignoreLoadingToBufferingStateChange = false; ignoreErrorToLoadingStateChange = false; switch (oldstate) { case Phonon::BufferingState: // play() has already been called, we need to make sure it is called // on the backend with the KioMediaStream MediaSource now, too ignoreLoadingToBufferingStateChange = true; break; case Phonon::LoadingState: ignoreErrorToLoadingStateChange = true; // no extras break; default: pError() << "backend MediaObject reached ErrorState after " << oldstate << ". It seems a KioMediaStream will not help here, trying anyway."; emit q->stateChanged(Phonon::LoadingState, oldstate); break; } kiofallback->d_func()->setMediaObjectPrivate(this); MediaSource mediaSource(kiofallback); mediaSource.setAutoDelete(true); pINTERFACE_CALL(setSource(mediaSource)); if (oldstate == Phonon::BufferingState) { q->play(); } return; } else if (ignoreLoadingToBufferingStateChange && kiofallback && oldstate == Phonon::LoadingState) { if (newstate != Phonon::BufferingState) { emit q->stateChanged(newstate, Phonon::BufferingState); } return; } else if (ignoreErrorToLoadingStateChange && kiofallback && oldstate == ErrorState) { if (newstate != LoadingState) { emit q->stateChanged(newstate, Phonon::LoadingState); } return; } emit q->stateChanged(newstate, oldstate); }