void MediaPlayer::loadWithNextMediaEngine(MediaPlayerFactory* current) { MediaPlayerFactory* engine; // If no MIME type is specified, just use the next engine. if (m_contentMIMEType.isEmpty()) engine = nextMediaEngine(current); else engine = bestMediaEngineForTypeAndCodecs(m_contentMIMEType, m_contentTypeCodecs, current); // Don't delete and recreate the player unless it comes from a different engine. if (!engine) { m_currentMediaEngine = engine; m_private.clear(); } else if (m_currentMediaEngine != engine) { m_currentMediaEngine = engine; m_private.clear(); m_private.set(engine->constructor(this)); if (m_mediaPlayerClient) m_mediaPlayerClient->mediaPlayerEngineUpdated(this); #if ENABLE(PLUGIN_PROXY_FOR_VIDEO) m_private->setMediaPlayerProxy(m_playerProxy); #endif m_private->setPrivateBrowsingMode(m_privateBrowsing); m_private->setPreload(m_preload); m_private->setPreservesPitch(preservesPitch()); if (m_shouldPrepareToRender) m_private->prepareForRendering(); } if (m_private) m_private->load(m_url); else { m_private.set(createNullMediaPlayer(this)); if (m_mediaPlayerClient) m_mediaPlayerClient->mediaPlayerEngineUpdated(this); } }
MediaPlayer::MediaPlayer(MediaPlayerClient* client) : m_mediaPlayerClient(client) , m_private(createNullMediaPlayer(this)) , m_currentMediaEngine(0) , m_frameView(0) , m_visible(false) , m_rate(1.0f) , m_volume(1.0f) , m_preservesPitch(true) , m_autobuffer(false) #if ENABLE(PLUGIN_PROXY_FOR_VIDEO) , m_playerProxy(0) #endif { #if ENABLE(PLUGIN_PROXY_FOR_VIDEO) Vector<MediaPlayerFactory*>& engines = installedMediaEngines(); if (!engines.isEmpty()) { m_currentMediaEngine = engines[0]; m_private.clear(); m_private.set(engines[0]->constructor(this)); } #endif }