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