Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1021)

Unified Diff: Source/core/html/HTMLMediaElement.h

Issue 1055503002: Eliminate MediaPlayer & MediaPlayerClient abstractions (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Move createMediaPlayer() to FrameLoaderClient to avoid deps rule violation Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | Source/core/html/HTMLMediaElement.cpp » ('j') | Source/core/html/HTMLMediaElement.cpp » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/html/HTMLMediaElement.h
diff --git a/Source/core/html/HTMLMediaElement.h b/Source/core/html/HTMLMediaElement.h
index 6749d07d3465b3053d65296d1043b9749a3befe8..2c3e3016d88f06c2192c122a6258c80320203432 100644
--- a/Source/core/html/HTMLMediaElement.h
+++ b/Source/core/html/HTMLMediaElement.h
@@ -32,7 +32,8 @@
#include "core/html/HTMLElement.h"
#include "core/html/track/TextTrack.h"
#include "platform/Supplementable.h"
-#include "platform/graphics/media/MediaPlayer.h"
+#include "platform/audio/AudioSourceProvider.h"
+#include "public/platform/WebAudioSourceProviderClient.h"
#include "public/platform/WebMediaPlayerClient.h"
#include "public/platform/WebMimeRegistry.h"
@@ -69,7 +70,7 @@ class VideoTrackList;
// But it can't be until the Chromium WebMediaPlayerClientImpl class is fixed so it
// no longer depends on typecasting a MediaPlayerClient to an HTMLMediaElement.
-class CORE_EXPORT HTMLMediaElement : public HTMLElement, public WillBeHeapSupplementable<HTMLMediaElement>, public MediaPlayerClient, public ActiveDOMObject {
+class CORE_EXPORT HTMLMediaElement : public HTMLElement, public WillBeHeapSupplementable<HTMLMediaElement>, public WebMediaPlayerClient, public ActiveDOMObject {
ddorwin 2015/05/01 17:09:28 The problem is that WebMediaPlayerClient includes
DEFINE_WRAPPERTYPEINFO();
WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(HTMLMediaElement);
public:
@@ -82,7 +83,10 @@ public:
#if ENABLE(WEB_AUDIO)
void clearWeakMembers(Visitor*);
#endif
- blink::WebMediaPlayer* webMediaPlayer() const { return m_player ? m_player->webMediaPlayer() : 0; }
+ blink::WebMediaPlayer* webMediaPlayer() const
+ {
+ return m_webMediaPlayer.get();
+ }
virtual bool hasVideo() const { return false; }
bool hasAudio() const;
@@ -112,7 +116,7 @@ public:
NetworkState networkState() const;
String preload() const;
- MediaPlayer::Preload preloadType() const { return m_preload; }
+ WebMediaPlayer::Preload preloadType() const { return m_preload; }
void setPreload(const AtomicString&);
PassRefPtrWillBeRawPtr<TimeRanges> buffered() const;
@@ -151,7 +155,7 @@ public:
// media source extensions
void closeMediaSource();
- void durationChanged(double duration, bool requestSeek);
+ void mediaPlayerDurationChanged(double duration, bool requestSeek);
// controls
bool shouldShowControls() const;
@@ -176,8 +180,8 @@ public:
TextTrackList* textTracks();
CueTimeline& cueTimeline();
- void addTextTrack(TextTrack*);
- void removeTextTrack(TextTrack*);
+ void mediaPlayerAddTextTrack(TextTrack*);
+ void mediaPlayerRemoveTextTrack(TextTrack*);
void textTracksChanged();
void notifyMediaPlayerOfTextTrackChanges();
@@ -187,15 +191,8 @@ public:
void didAddTrackElement(HTMLTrackElement*);
void didRemoveTrackElement(HTMLTrackElement*);
- blink::WebMediaPlayer::TrackId addAudioTrack(const String& id, blink::WebMediaPlayerClient::AudioTrackKind, const AtomicString& label, const AtomicString& language, bool enabled);
- void removeAudioTrack(blink::WebMediaPlayer::TrackId);
- blink::WebMediaPlayer::TrackId addVideoTrack(const String& id, blink::WebMediaPlayerClient::VideoTrackKind, const AtomicString& label, const AtomicString& language, bool selected);
- void removeVideoTrack(blink::WebMediaPlayer::TrackId);
-
- virtual void mediaPlayerDidAddTextTrack(blink::WebInbandTextTrack*) override final;
- virtual void mediaPlayerDidRemoveTextTrack(blink::WebInbandTextTrack*) override final;
// FIXME: Remove this when WebMediaPlayerClientImpl::loadInternal does not depend on it.
- virtual KURL mediaPlayerPosterURL() override { return KURL(); }
+ virtual KURL mediaPlayerPosterURL() { return KURL(); }
void honorUserPreferencesForAutomaticTextTrackSelection();
@@ -218,7 +215,7 @@ public:
// of one of them here.
using HTMLElement::executionContext;
- bool hasSingleSecurityOrigin() const { return !m_player || (webMediaPlayer() && webMediaPlayer()->hasSingleSecurityOrigin()); }
+ bool hasSingleSecurityOrigin() const { return webMediaPlayer() && webMediaPlayer()->hasSingleSecurityOrigin(); }
bool isFullscreen() const;
void enterFullscreen();
@@ -228,10 +225,6 @@ public:
bool closedCaptionsVisible() const;
void setClosedCaptionsVisible(bool);
- void remoteRouteAvailabilityChanged(bool);
- void connectedToRemoteDevice();
- void disconnectedFromRemoteDevice();
-
// Returns the MediaControls, or null if they have not been added yet.
// Note that this can be non-null even if there is no controls attribute.
MediaControls* mediaControls() const;
@@ -330,17 +323,33 @@ private:
void setReadyState(ReadyState);
void setNetworkState(blink::WebMediaPlayer::NetworkState);
- virtual void mediaPlayerNetworkStateChanged() override final;
- virtual void mediaPlayerReadyStateChanged() override final;
- virtual void mediaPlayerTimeChanged() override final;
- virtual void mediaPlayerDurationChanged() override final;
- virtual void mediaPlayerPlaybackStateChanged() override final;
- virtual void mediaPlayerRequestFullscreen() override final;
- virtual void mediaPlayerRequestSeek(double) override final;
- virtual void mediaPlayerRepaint() override final;
- virtual void mediaPlayerSizeChanged() override final;
- virtual void mediaPlayerSetWebLayer(blink::WebLayer*) override final;
- virtual void mediaPlayerMediaSourceOpened(blink::WebMediaSource*) override final;
+ virtual void networkStateChanged() override final;
+ virtual void readyStateChanged() override final;
+ virtual void timeChanged() override final;
+ virtual void repaint() override final;
+ virtual void durationChanged() override final;
+ virtual void sizeChanged() override final;
+ virtual void playbackStateChanged() override final;
+
+ virtual void keyAdded(const WebString& keySystem, const WebString& sessionId) override final;
+ virtual void keyError(const WebString& keySystem, const WebString& sessionId, MediaKeyErrorCode, unsigned short systemCode) override final;
+ virtual void keyMessage(const WebString& keySystem, const WebString& sessionId, const unsigned char* message, unsigned messageLength, const WebURL& defaultURL) override final;
+ virtual void encrypted(WebEncryptedMediaInitDataType, const unsigned char* initData, unsigned initDataLength) override final;
+ virtual void didBlockPlaybackWaitingForKey() override final;
+ virtual void didResumePlaybackBlockedForKey() override final;
+ virtual void setWebLayer(blink::WebLayer*) override final;
+ virtual blink::WebMediaPlayer::TrackId addAudioTrack(const WebString&, blink::WebMediaPlayerClient::AudioTrackKind, const WebString&, const WebString&, bool) override final;
+ virtual void removeAudioTrack(blink::WebMediaPlayer::TrackId) override final;
+ virtual blink::WebMediaPlayer::TrackId addVideoTrack(const WebString&, blink::WebMediaPlayerClient::VideoTrackKind, const WebString&, const WebString&, bool) override final;
+ virtual void removeVideoTrack(blink::WebMediaPlayer::TrackId) override final;
+ virtual void addTextTrack(blink::WebInbandTextTrack*) override final;
+ virtual void removeTextTrack(blink::WebInbandTextTrack*) override final;
+ virtual void mediaSourceOpened(blink::WebMediaSource*) override final;
+ virtual void requestFullscreen() override final;
+ virtual void requestSeek(double) override final;
+ virtual void remoteRouteAvailabilityChanged(bool) override final;
+ virtual void connectedToRemoteDevice() override final;
+ virtual void disconnectedFromRemoteDevice() override final;
void loadTimerFired(Timer<HTMLMediaElement>*);
void progressEventTimerFired(Timer<HTMLMediaElement>*);
@@ -452,6 +461,8 @@ private:
void audioTracksTimerFired(Timer<HTMLMediaElement>*);
+ void loadMediaPlayer(const WTF::String& url);
+
Timer<HTMLMediaElement> m_loadTimer;
Timer<HTMLMediaElement> m_progressEventTimer;
Timer<HTMLMediaElement> m_playbackProgressTimer;
@@ -507,10 +518,9 @@ private:
DeferredLoadState m_deferredLoadState;
Timer<HTMLMediaElement> m_deferredLoadTimer;
- OwnPtr<MediaPlayer> m_player;
blink::WebLayer* m_webLayer;
- MediaPlayer::Preload m_preload;
+ WebMediaPlayer::Preload m_preload;
DisplayMode m_displayMode;
@@ -571,10 +581,59 @@ private:
// FIXME: Oilpan: Consider making this a strongly traced pointer with oilpan where strong cycles are not a problem.
GC_PLUGIN_IGNORE("http://crbug.com/404577")
RawPtrWillBeWeakMember<AudioSourceProviderClient> m_audioSourceNode;
+
+ // AudioClientImpl wraps an AudioSourceProviderClient.
+ // When the audio format is known, Chromium calls setFormat().
+
+ class AudioClientImpl final : public GarbageCollectedFinalized<AudioClientImpl>, public WebAudioSourceProviderClient {
+ public:
+ explicit AudioClientImpl(AudioSourceProviderClient* client)
+ : m_client(client)
+ {
+ }
+
+ virtual ~AudioClientImpl() { }
+
+ // WebAudioSourceProviderClient
+ virtual void setFormat(size_t numberOfChannels, float sampleRate) override;
+
+ DECLARE_TRACE();
+
+ private:
+ Member<AudioSourceProviderClient> m_client;
+ };
+
+ // AudioSourceProviderImpl wraps a WebAudioSourceProvider.
+ // provideInput() calls into Chromium to get a rendered audio stream.
+
+ class AudioSourceProviderImpl final : public AudioSourceProvider {
+ public:
+ AudioSourceProviderImpl()
+ : m_webAudioSourceProvider(0)
+ {
+ }
+
+ virtual ~AudioSourceProviderImpl() { }
+
+ // Wraps the given WebAudioSourceProvider.
+ void wrap(WebAudioSourceProvider*);
+
+ // AudioSourceProvider
+ virtual void setClient(AudioSourceProviderClient*) override;
+ virtual void provideInput(AudioBus*, size_t framesToProcess) override;
+
+ private:
+ WebAudioSourceProvider* m_webAudioSourceProvider;
+ Persistent<AudioClientImpl> m_client;
+ Mutex provideInputLock;
+ };
+
+ AudioSourceProviderImpl m_audioSourceProvider;
#endif
friend class MediaController;
RefPtrWillBeMember<MediaController> m_mediaController;
+ OwnPtr<WebMediaPlayer> m_webMediaPlayer;
friend class Internals;
friend class TrackDisplayUpdateScope;
« no previous file with comments | « no previous file | Source/core/html/HTMLMediaElement.cpp » ('j') | Source/core/html/HTMLMediaElement.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698