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 WebMediaPlayer_h 32643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#define WebMediaPlayer_h 33643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 34643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebCanvas.h" 35643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "WebVector.h" 36e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "WebVideoFrame.h" 37643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 38643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebKit { 39643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 40643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebMediaPlayerClient; 41643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebURL; 42643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockstruct WebRect; 43643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockstruct WebSize; 44643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 45643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockstruct WebTimeRange { 46643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebTimeRange() : start(0), end(0) {} 47643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WebTimeRange(float s, float e) : start(s), end(e) {} 48643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 49643ca7872b450ea4efacab6188849e5aac2ba161Steve Block float start; 50643ca7872b450ea4efacab6188849e5aac2ba161Steve Block float end; 51643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}; 52643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 53643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocktypedef WebVector<WebTimeRange> WebTimeRanges; 54643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 55643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass WebMediaPlayer { 56643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockpublic: 57643ca7872b450ea4efacab6188849e5aac2ba161Steve Block enum NetworkState { 58643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Empty, 59643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Idle, 60643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Loading, 61643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Loaded, 62643ca7872b450ea4efacab6188849e5aac2ba161Steve Block FormatError, 63643ca7872b450ea4efacab6188849e5aac2ba161Steve Block NetworkError, 64643ca7872b450ea4efacab6188849e5aac2ba161Steve Block DecodeError, 65643ca7872b450ea4efacab6188849e5aac2ba161Steve Block }; 66643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 67643ca7872b450ea4efacab6188849e5aac2ba161Steve Block enum ReadyState { 68643ca7872b450ea4efacab6188849e5aac2ba161Steve Block HaveNothing, 69643ca7872b450ea4efacab6188849e5aac2ba161Steve Block HaveMetadata, 70643ca7872b450ea4efacab6188849e5aac2ba161Steve Block HaveCurrentData, 71643ca7872b450ea4efacab6188849e5aac2ba161Steve Block HaveFutureData, 72643ca7872b450ea4efacab6188849e5aac2ba161Steve Block HaveEnoughData, 73643ca7872b450ea4efacab6188849e5aac2ba161Steve Block }; 74643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 75643ca7872b450ea4efacab6188849e5aac2ba161Steve Block enum MovieLoadType { 76643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Unknown, 77643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Download, 78643ca7872b450ea4efacab6188849e5aac2ba161Steve Block StoredStream, 79643ca7872b450ea4efacab6188849e5aac2ba161Steve Block LiveStream, 80643ca7872b450ea4efacab6188849e5aac2ba161Steve Block }; 81643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch enum Preload { 832daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch None, 842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch MetaData, 852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Auto, 862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch }; 872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 88643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual ~WebMediaPlayer() {} 89643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 90643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void load(const WebURL&) = 0; 91643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void cancelLoad() = 0; 92643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 93643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Playback controls. 94643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void play() = 0; 95643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void pause() = 0; 96643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool supportsFullscreen() const = 0; 97643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool supportsSave() const = 0; 98643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void seek(float seconds) = 0; 99643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void setEndTime(float seconds) = 0; 100643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void setRate(float) = 0; 101643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void setVolume(float) = 0; 102643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void setVisible(bool) = 0; 1032daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual void setPreload(Preload) { }; 104643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool totalBytesKnown() = 0; 10506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen virtual const WebTimeRanges& buffered() = 0; 106643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual float maxTimeSeekable() const = 0; 107643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 108643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void setSize(const WebSize&) = 0; 109643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 110643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void paint(WebCanvas*, const WebRect&) = 0; 111643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 112643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // True if the loaded media has a playable video/audio track. 113643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool hasVideo() const = 0; 114643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool hasAudio() const = 0; 115643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 116643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Dimension of the video. 117643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual WebSize naturalSize() const = 0; 118643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 119643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Getters of playback state. 120643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool paused() const = 0; 121643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool seeking() const = 0; 122643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual float duration() const = 0; 123643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual float currentTime() const = 0; 124643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 125643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Get rate of loading the resource. 126643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual int dataRate() const = 0; 127643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 128643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Internal states of loading and network. 129643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual NetworkState networkState() const = 0; 130643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual ReadyState readyState() const = 0; 131643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 132643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual unsigned long long bytesLoaded() const = 0; 133643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual unsigned long long totalBytes() const = 0; 134643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 135643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool hasSingleSecurityOrigin() const = 0; 136643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual MovieLoadType movieLoadType() const = 0; 137e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 13881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual unsigned decodedFrameCount() const = 0; 13981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual unsigned droppedFrameCount() const = 0; 14081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual unsigned audioDecodedByteCount() const = 0; 14181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual unsigned videoDecodedByteCount() const = 0; 14281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 143e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // This function returns a pointer to a WebVideoFrame, which is 144e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // a WebKit wrapper for a video frame in chromium. This places a lock 145e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // on the frame in chromium, and calls to this method should always be 146e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // followed with a call to putCurrentFrame(). The ownership of this object 147e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // is not transferred to the caller, and the caller should not free the 148e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // returned object. 149e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block virtual WebVideoFrame* getCurrentFrame() { return 0; } 150e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // This function releases the lock on the current video frame in Chromium. 151e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // It should always be called after getCurrentFrame(). Frame passed to this 152e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // method should no longer be referenced after the call is made. 153e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block virtual void putCurrentFrame(WebVideoFrame*) { } 154643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}; 155643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 156643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} // namespace WebKit 157643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 158643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 159