WebMediaPlayerClientImpl.h revision 81bc750723a18f21cd17d1b173cd2a4dda9cea6e
1643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/* 2643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Copyright (C) 2009 Google Inc. All rights reserved. 3643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 4643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Redistribution and use in source and binary forms, with or without 5643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * modification, are permitted provided that the following conditions are 6643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * met: 7643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 8643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Redistributions of source code must retain the above copyright 9643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * notice, this list of conditions and the following disclaimer. 10643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Redistributions in binary form must reproduce the above 11643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * copyright notice, this list of conditions and the following disclaimer 12643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * in the documentation and/or other materials provided with the 13643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * distribution. 14643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * * Neither the name of Google Inc. nor the names of its 15643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * contributors may be used to endorse or promote products derived from 16643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * this software without specific prior written permission. 17643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 18643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29643ca7872b450ea4efacab6188849e5aac2ba161Steve Block */ 30643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 31643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#ifndef WebMediaPlayerClientImpl_h 32643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#define WebMediaPlayerClientImpl_h 33643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 34643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if ENABLE(VIDEO) 35643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 36643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "MediaPlayerPrivate.h" 37e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "VideoFrameChromium.h" 38e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "VideoFrameProvider.h" 39a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "VideoLayerChromium.h" 40643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebMediaPlayerClient.h" 41643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include <wtf/OwnPtr.h> 42643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 43643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebKit { 44643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 45967717af5423377c967781471ee106e2bb4e11c8Ben Murdochclass WebMediaElement; 46643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebMediaPlayer; 47643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 48643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// This class serves as a bridge between WebCore::MediaPlayer and 49643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// WebKit::WebMediaPlayer. 50e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockclass WebMediaPlayerClientImpl : public WebCore::MediaPlayerPrivateInterface 51e14391e94c850b8bd03680c23b38978db68687a8John Reck#if USE(ACCELERATED_COMPOSITING) 52e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block , public WebCore::VideoFrameProvider 53e14391e94c850b8bd03680c23b38978db68687a8John Reck#endif 54e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block , public WebMediaPlayerClient { 55e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 56643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockpublic: 57643ca7872b450ea4efacab6188849e5aac2ba161Steve Block static bool isEnabled(); 58643ca7872b450ea4efacab6188849e5aac2ba161Steve Block static void setIsEnabled(bool); 59643ca7872b450ea4efacab6188849e5aac2ba161Steve Block static void registerSelf(WebCore::MediaEngineRegistrar); 60643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 61967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch static WebMediaPlayerClientImpl* fromMediaElement(const WebMediaElement* element); 62967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 63967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch // Returns the encapsulated WebKit::WebMediaPlayer. 64967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch WebMediaPlayer* mediaPlayer() const; 65967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 66643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // WebMediaPlayerClient methods: 67a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch virtual ~WebMediaPlayerClientImpl(); 68643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void networkStateChanged(); 69643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void readyStateChanged(); 705e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block virtual void volumeChanged(float); 715e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block virtual void muteChanged(bool); 72643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void timeChanged(); 73643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void repaint(); 74643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void durationChanged(); 75643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void rateChanged(); 76643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void sizeChanged(); 77643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void sawUnsupportedTracks(); 786c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen virtual float volume() const; 79643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 80643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // MediaPlayerPrivateInterface methods: 81dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch virtual void load(const WTF::String& url); 82643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void cancelLoad(); 83967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#if USE(ACCELERATED_COMPOSITING) 84967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch virtual WebCore::PlatformLayer* platformLayer() const; 85967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#endif 86967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch virtual WebCore::PlatformMedia platformMedia() const; 87643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void play(); 88643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void pause(); 89643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool supportsFullscreen() const; 90643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool supportsSave() const; 91643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual WebCore::IntSize naturalSize() const; 92643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool hasVideo() const; 93643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool hasAudio() const; 94643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void setVisible(bool); 95643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual float duration() const; 96643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual float currentTime() const; 97643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void seek(float time); 98643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool seeking() const; 99643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void setEndTime(float time); 100643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void setRate(float); 101643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool paused() const; 102643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void setVolume(float); 103643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual WebCore::MediaPlayer::NetworkState networkState() const; 104643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual WebCore::MediaPlayer::ReadyState readyState() const; 105643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual float maxTimeSeekable() const; 106643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual WTF::PassRefPtr<WebCore::TimeRanges> buffered() const; 107643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual int dataRate() const; 108643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void setAutobuffer(bool); 109643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool totalBytesKnown() const; 110643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual unsigned totalBytes() const; 111643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual unsigned bytesLoaded() const; 112643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void setSize(const WebCore::IntSize&); 113643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void paint(WebCore::GraphicsContext*, const WebCore::IntRect&); 1142fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual void paintCurrentFrameInContext(WebCore::GraphicsContext*, const WebCore::IntRect&); 115643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool hasSingleSecurityOrigin() const; 116e14391e94c850b8bd03680c23b38978db68687a8John Reck virtual WebCore::MediaPlayer::MovieLoadType movieLoadType() const; 11781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual unsigned decodedFrameCount() const; 11881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual unsigned droppedFrameCount() const; 11981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual unsigned audioDecodedByteCount() const; 12081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual unsigned videoDecodedByteCount() const; 121967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#if USE(ACCELERATED_COMPOSITING) 122967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch virtual bool supportsAcceleratedRendering() const; 123643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 124e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // VideoFrameProvider methods: 125e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block virtual WebCore::VideoFrameChromium* getCurrentFrame(); 126e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block virtual void putCurrentFrame(WebCore::VideoFrameChromium*); 127e14391e94c850b8bd03680c23b38978db68687a8John Reck#endif 128e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 129643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockprivate: 130643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebMediaPlayerClientImpl(); 131643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 132643ca7872b450ea4efacab6188849e5aac2ba161Steve Block static WebCore::MediaPlayerPrivateInterface* create(WebCore::MediaPlayer*); 133dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch static void getSupportedTypes(WTF::HashSet<WTF::String>&); 134643ca7872b450ea4efacab6188849e5aac2ba161Steve Block static WebCore::MediaPlayer::SupportsType supportsType( 135dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch const WTF::String& type, const WTF::String& codecs); 1362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if USE(ACCELERATED_COMPOSITING) 1372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block bool acceleratedRenderingInUse(); 1382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif 139643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 140643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebCore::MediaPlayer* m_mediaPlayer; 141643ca7872b450ea4efacab6188849e5aac2ba161Steve Block OwnPtr<WebMediaPlayer> m_webMediaPlayer; 142967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#if USE(ACCELERATED_COMPOSITING) 143a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch RefPtr<WebCore::VideoLayerChromium> m_videoLayer; 144967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch bool m_supportsAcceleratedCompositing; 145967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#endif 146643ca7872b450ea4efacab6188849e5aac2ba161Steve Block static bool m_isEnabled; 147643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}; 148643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 149643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} // namespace WebKit 150643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 151643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 152643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 153643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 154