summaryrefslogtreecommitdiff
path: root/chromium/third_party/WebKit/Source/web/WebMediaPlayerClientImpl.h
diff options
context:
space:
mode:
authorZeno Albisser <zeno.albisser@digia.com>2013-08-15 21:46:11 +0200
committerZeno Albisser <zeno.albisser@digia.com>2013-08-15 21:46:11 +0200
commit679147eead574d186ebf3069647b4c23e8ccace6 (patch)
treefc247a0ac8ff119f7c8550879ebb6d3dd8d1ff69 /chromium/third_party/WebKit/Source/web/WebMediaPlayerClientImpl.h
downloadqtwebengine-chromium-679147eead574d186ebf3069647b4c23e8ccace6.tar.gz
Initial import.
Diffstat (limited to 'chromium/third_party/WebKit/Source/web/WebMediaPlayerClientImpl.h')
-rw-r--r--chromium/third_party/WebKit/Source/web/WebMediaPlayerClientImpl.h232
1 files changed, 232 insertions, 0 deletions
diff --git a/chromium/third_party/WebKit/Source/web/WebMediaPlayerClientImpl.h b/chromium/third_party/WebKit/Source/web/WebMediaPlayerClientImpl.h
new file mode 100644
index 00000000000..3d9cfc20807
--- /dev/null
+++ b/chromium/third_party/WebKit/Source/web/WebMediaPlayerClientImpl.h
@@ -0,0 +1,232 @@
+/*
+ * Copyright (C) 2009 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WebMediaPlayerClientImpl_h
+#define WebMediaPlayerClientImpl_h
+
+#include "WebAudioSourceProviderClient.h"
+#include "WebMediaPlayerClient.h"
+#include "core/platform/audio/AudioSourceProvider.h"
+#include "core/platform/graphics/InbandTextTrackPrivate.h"
+#include "core/platform/graphics/MediaPlayer.h"
+#if OS(ANDROID)
+#include "third_party/skia/include/core/SkBitmap.h"
+#include "third_party/skia/include/core/SkRefCnt.h"
+#include "third_party/skia/include/gpu/GrTexture.h"
+#endif
+#include "weborigin/KURL.h"
+#include "wtf/OwnPtr.h"
+#include "wtf/PassOwnPtr.h"
+#include "wtf/Threading.h"
+
+namespace WebCore {
+class AudioSourceProviderClient;
+class HTMLMediaSource;
+}
+
+namespace WebKit {
+
+class WebHelperPluginImpl;
+class WebAudioSourceProvider;
+class WebMediaPlayer;
+
+// This class serves as a bridge between WebCore::MediaPlayer and
+// WebKit::WebMediaPlayer.
+class WebMediaPlayerClientImpl : public WebCore::MediaPlayer, public WebMediaPlayerClient {
+
+public:
+ static PassOwnPtr<WebCore::MediaPlayer> create(WebCore::MediaPlayerClient*);
+
+ // Returns the encapsulated WebKit::WebMediaPlayer.
+ WebMediaPlayer* mediaPlayer() const;
+
+ // WebMediaPlayerClient methods:
+ virtual ~WebMediaPlayerClientImpl();
+ virtual void networkStateChanged();
+ virtual void readyStateChanged();
+ virtual void timeChanged();
+ virtual void repaint();
+ virtual void durationChanged();
+ virtual void sizeChanged();
+ virtual void setOpaque(bool);
+ virtual double volume() const;
+ virtual void playbackStateChanged();
+ virtual WebMediaPlayer::Preload preload() const;
+ virtual void keyAdded(const WebString& keySystem, const WebString& sessionId);
+ virtual void keyError(const WebString& keySystem, const WebString& sessionId, MediaKeyErrorCode, unsigned short systemCode);
+ virtual void keyMessage(const WebString& keySystem, const WebString& sessionId, const unsigned char* message, unsigned messageLength, const WebURL& defaultURL);
+ virtual void keyNeeded(const WebString& keySystem, const WebString& sessionId, const unsigned char* initData, unsigned initDataLength);
+ virtual WebPlugin* createHelperPlugin(const WebString& pluginType, WebFrame*);
+ virtual void closeHelperPlugin();
+ virtual bool needsWebLayerForVideo() const;
+ virtual void setWebLayer(WebLayer*);
+ virtual void addTextTrack(WebInbandTextTrack*);
+ virtual void removeTextTrack(WebInbandTextTrack*);
+
+ // MediaPlayer methods:
+ virtual void load(const WTF::String& url) OVERRIDE;
+ virtual void load(const WTF::String& url, PassRefPtr<WebCore::HTMLMediaSource>) OVERRIDE;
+
+ virtual WebKit::WebLayer* platformLayer() const OVERRIDE;
+ virtual void play() OVERRIDE;
+ virtual void pause() OVERRIDE;
+ virtual void prepareToPlay() OVERRIDE;
+ virtual bool supportsFullscreen() const OVERRIDE;
+ virtual bool supportsSave() const OVERRIDE;
+ virtual WebCore::IntSize naturalSize() const OVERRIDE;
+ virtual bool hasVideo() const OVERRIDE;
+ virtual bool hasAudio() const OVERRIDE;
+ virtual double duration() const OVERRIDE;
+ virtual double currentTime() const OVERRIDE;
+ virtual void seek(double time) OVERRIDE;
+ virtual bool seeking() const OVERRIDE;
+ virtual double rate() const OVERRIDE;
+ virtual void setRate(double) OVERRIDE;
+ virtual bool paused() const OVERRIDE;
+ virtual void setVolume(double) OVERRIDE;
+ virtual void setMuted(bool) OVERRIDE;
+ virtual WebCore::MediaPlayer::NetworkState networkState() const OVERRIDE;
+ virtual WebCore::MediaPlayer::ReadyState readyState() const OVERRIDE;
+ virtual double maxTimeSeekable() const OVERRIDE;
+ virtual WTF::PassRefPtr<WebCore::TimeRanges> buffered() const OVERRIDE;
+ virtual bool didLoadingProgress() const OVERRIDE;
+ virtual void paint(WebCore::GraphicsContext*, const WebCore::IntRect&) OVERRIDE;
+ virtual void paintCurrentFrameInContext(WebCore::GraphicsContext*, const WebCore::IntRect&) OVERRIDE;
+ virtual bool copyVideoTextureToPlatformTexture(WebCore::GraphicsContext3D*, Platform3DObject texture, GC3Dint level, GC3Denum type, GC3Denum internalFormat, bool premultiplyAlpha, bool flipY) OVERRIDE;
+ virtual void setPreload(WebCore::MediaPlayer::Preload) OVERRIDE;
+ virtual bool hasSingleSecurityOrigin() const OVERRIDE;
+ virtual bool didPassCORSAccessCheck() const OVERRIDE;
+ virtual double mediaTimeForTimeValue(double timeValue) const OVERRIDE;
+ virtual unsigned decodedFrameCount() const OVERRIDE;
+ virtual unsigned droppedFrameCount() const OVERRIDE;
+ virtual unsigned audioDecodedByteCount() const OVERRIDE;
+ virtual unsigned videoDecodedByteCount() const OVERRIDE;
+#if USE(NATIVE_FULLSCREEN_VIDEO)
+ virtual void enterFullscreen() OVERRIDE;
+ virtual void exitFullscreen() OVERRIDE;
+ virtual bool canEnterFullscreen() const OVERRIDE;
+#endif
+
+#if ENABLE(WEB_AUDIO)
+ virtual WebCore::AudioSourceProvider* audioSourceProvider() OVERRIDE;
+#endif
+
+ virtual bool supportsAcceleratedRendering() const OVERRIDE;
+
+ virtual WebCore::MediaPlayer::MediaKeyException generateKeyRequest(const String& keySystem, const unsigned char* initData, unsigned initDataLength) OVERRIDE;
+ virtual WebCore::MediaPlayer::MediaKeyException addKey(const String& keySystem, const unsigned char* key, unsigned keyLength, const unsigned char* initData, unsigned initDataLength, const String& sessionId) OVERRIDE;
+ virtual WebCore::MediaPlayer::MediaKeyException cancelKeyRequest(const String& keySystem, const String& sessionId) OVERRIDE;
+
+private:
+ explicit WebMediaPlayerClientImpl(WebCore::MediaPlayerClient*);
+
+ void startDelayedLoad();
+ void loadRequested();
+ void loadInternal();
+
+ bool acceleratedRenderingInUse();
+
+#if OS(ANDROID)
+ // FIXME: This path "only works" on Android. It is a workaround for the problem that Skia could not handle Android's GL_TEXTURE_EXTERNAL_OES
+ // texture internally. It should be removed and replaced by the normal paint path.
+ // https://code.google.com/p/skia/issues/detail?id=1189
+ void paintOnAndroid(WebCore::GraphicsContext* context, WebCore::GraphicsContext3D* context3D, const WebCore::IntRect& rect, uint8_t alpha);
+ SkAutoTUnref<GrTexture> m_texture;
+ SkBitmap m_bitmap;
+#endif
+
+ WebCore::MediaPlayerClient* m_client;
+ OwnPtr<WebMediaPlayer> m_webMediaPlayer;
+ WebCore::KURL m_url;
+ bool m_isMediaStream;
+ bool m_delayingLoad;
+ WebCore::MediaPlayer::Preload m_preload;
+ RefPtr<WebHelperPluginImpl> m_helperPlugin;
+ WebLayer* m_videoLayer;
+ bool m_opaque;
+ bool m_needsWebLayerForVideo;
+ double m_volume;
+ bool m_muted;
+ double m_rate;
+
+#if ENABLE(WEB_AUDIO)
+ // AudioClientImpl wraps an AudioSourceProviderClient.
+ // When the audio format is known, Chromium calls setFormat() which then dispatches into WebCore.
+
+ class AudioClientImpl : public WebKit::WebAudioSourceProviderClient {
+ public:
+ AudioClientImpl(WebCore::AudioSourceProviderClient* client)
+ : m_client(client)
+ {
+ }
+
+ virtual ~AudioClientImpl() { }
+
+ // WebAudioSourceProviderClient
+ virtual void setFormat(size_t numberOfChannels, float sampleRate);
+
+ private:
+ WebCore::AudioSourceProviderClient* m_client;
+ };
+
+ // AudioSourceProviderImpl wraps a WebAudioSourceProvider.
+ // provideInput() calls into Chromium to get a rendered audio stream.
+
+ class AudioSourceProviderImpl : public WebCore::AudioSourceProvider {
+ public:
+ AudioSourceProviderImpl()
+ : m_webAudioSourceProvider(0)
+ {
+ }
+
+ virtual ~AudioSourceProviderImpl() { }
+
+ // Wraps the given WebAudioSourceProvider.
+ void wrap(WebAudioSourceProvider*);
+
+ // WebCore::AudioSourceProvider
+ virtual void setClient(WebCore::AudioSourceProviderClient*);
+ virtual void provideInput(WebCore::AudioBus*, size_t framesToProcess);
+
+ private:
+ WebAudioSourceProvider* m_webAudioSourceProvider;
+ OwnPtr<AudioClientImpl> m_client;
+ Mutex provideInputLock;
+ };
+
+ AudioSourceProviderImpl m_audioSourceProvider;
+#endif
+
+ RefPtr<WebCore::HTMLMediaSource> m_mediaSource;
+};
+
+} // namespace WebKit
+
+#endif