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; 792bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void playbackStateChanged(); 802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual WebMediaPlayer::Preload preload() const; 81643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 82643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // MediaPlayerPrivateInterface methods: 83dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch virtual void load(const WTF::String& url); 84643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void cancelLoad(); 85967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#if USE(ACCELERATED_COMPOSITING) 86967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch virtual WebCore::PlatformLayer* platformLayer() const; 87967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#endif 88967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch virtual WebCore::PlatformMedia platformMedia() const; 89643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void play(); 90643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void pause(); 912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual void prepareToPlay(); 92643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool supportsFullscreen() const; 93643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool supportsSave() const; 94643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual WebCore::IntSize naturalSize() const; 95643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool hasVideo() const; 96643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool hasAudio() const; 97643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void setVisible(bool); 98643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual float duration() const; 99643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual float currentTime() const; 100643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void seek(float time); 101643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool seeking() const; 102643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void setEndTime(float time); 103643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void setRate(float); 104643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool paused() const; 105643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void setVolume(float); 106643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual WebCore::MediaPlayer::NetworkState networkState() const; 107643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual WebCore::MediaPlayer::ReadyState readyState() const; 108643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual float maxTimeSeekable() const; 109643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual WTF::PassRefPtr<WebCore::TimeRanges> buffered() const; 110643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual int dataRate() const; 111643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool totalBytesKnown() const; 112643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual unsigned totalBytes() const; 113643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual unsigned bytesLoaded() const; 114643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void setSize(const WebCore::IntSize&); 115643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void paint(WebCore::GraphicsContext*, const WebCore::IntRect&); 1162fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual void paintCurrentFrameInContext(WebCore::GraphicsContext*, const WebCore::IntRect&); 1172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual void setPreload(WebCore::MediaPlayer::Preload); 118643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool hasSingleSecurityOrigin() const; 119e14391e94c850b8bd03680c23b38978db68687a8John Reck virtual WebCore::MediaPlayer::MovieLoadType movieLoadType() const; 12081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual unsigned decodedFrameCount() const; 12181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual unsigned droppedFrameCount() const; 12281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual unsigned audioDecodedByteCount() const; 12381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual unsigned videoDecodedByteCount() const; 124967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#if USE(ACCELERATED_COMPOSITING) 125967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch virtual bool supportsAcceleratedRendering() const; 126643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 127e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // VideoFrameProvider methods: 128e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block virtual WebCore::VideoFrameChromium* getCurrentFrame(); 129e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block virtual void putCurrentFrame(WebCore::VideoFrameChromium*); 130e14391e94c850b8bd03680c23b38978db68687a8John Reck#endif 131e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 132643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockprivate: 133643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebMediaPlayerClientImpl(); 1342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void startDelayedLoad(); 1352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void loadInternal(); 136643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 137643ca7872b450ea4efacab6188849e5aac2ba161Steve Block static WebCore::MediaPlayerPrivateInterface* create(WebCore::MediaPlayer*); 138dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch static void getSupportedTypes(WTF::HashSet<WTF::String>&); 139643ca7872b450ea4efacab6188849e5aac2ba161Steve Block static WebCore::MediaPlayer::SupportsType supportsType( 140dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch const WTF::String& type, const WTF::String& codecs); 1412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if USE(ACCELERATED_COMPOSITING) 1422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block bool acceleratedRenderingInUse(); 1432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif 144643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 145643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebCore::MediaPlayer* m_mediaPlayer; 146643ca7872b450ea4efacab6188849e5aac2ba161Steve Block OwnPtr<WebMediaPlayer> m_webMediaPlayer; 1472daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch String m_url; 1482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch bool m_delayingLoad; 1492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch WebCore::MediaPlayer::Preload m_preload; 150967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#if USE(ACCELERATED_COMPOSITING) 151a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch RefPtr<WebCore::VideoLayerChromium> m_videoLayer; 152967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch bool m_supportsAcceleratedCompositing; 153967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#endif 154643ca7872b450ea4efacab6188849e5aac2ba161Steve Block static bool m_isEnabled; 155643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}; 156643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 157643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} // namespace WebKit 158643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 159643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 160643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 161643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 162