12bde8e466a4451c7319e3a072d118917957d6554Steve Block/* 22bde8e466a4451c7319e3a072d118917957d6554Steve Block * Copyright (C) 2011 Apple Inc. All rights reserved. 32bde8e466a4451c7319e3a072d118917957d6554Steve Block * 42bde8e466a4451c7319e3a072d118917957d6554Steve Block * Redistribution and use in source and binary forms, with or without 52bde8e466a4451c7319e3a072d118917957d6554Steve Block * modification, are permitted provided that the following conditions 62bde8e466a4451c7319e3a072d118917957d6554Steve Block * are met: 72bde8e466a4451c7319e3a072d118917957d6554Steve Block * 1. Redistributions of source code must retain the above copyright 82bde8e466a4451c7319e3a072d118917957d6554Steve Block * notice, this list of conditions and the following disclaimer. 92bde8e466a4451c7319e3a072d118917957d6554Steve Block * 2. Redistributions in binary form must reproduce the above copyright 102bde8e466a4451c7319e3a072d118917957d6554Steve Block * notice, this list of conditions and the following disclaimer in the 112bde8e466a4451c7319e3a072d118917957d6554Steve Block * documentation and/or other materials provided with the distribution. 122bde8e466a4451c7319e3a072d118917957d6554Steve Block * 132bde8e466a4451c7319e3a072d118917957d6554Steve Block * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 142bde8e466a4451c7319e3a072d118917957d6554Steve Block * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 152bde8e466a4451c7319e3a072d118917957d6554Steve Block * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 162bde8e466a4451c7319e3a072d118917957d6554Steve Block * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 172bde8e466a4451c7319e3a072d118917957d6554Steve Block * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 182bde8e466a4451c7319e3a072d118917957d6554Steve Block * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 192bde8e466a4451c7319e3a072d118917957d6554Steve Block * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 202bde8e466a4451c7319e3a072d118917957d6554Steve Block * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 212bde8e466a4451c7319e3a072d118917957d6554Steve Block * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 222bde8e466a4451c7319e3a072d118917957d6554Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 232bde8e466a4451c7319e3a072d118917957d6554Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 242bde8e466a4451c7319e3a072d118917957d6554Steve Block */ 252bde8e466a4451c7319e3a072d118917957d6554Steve Block 262bde8e466a4451c7319e3a072d118917957d6554Steve Block#ifndef MediaPlayerPrivateAVFoundation_h 272bde8e466a4451c7319e3a072d118917957d6554Steve Block#define MediaPlayerPrivateAVFoundation_h 282bde8e466a4451c7319e3a072d118917957d6554Steve Block 292bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(VIDEO) && USE(AVFOUNDATION) 302bde8e466a4451c7319e3a072d118917957d6554Steve Block 312bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "FloatSize.h" 322bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "MediaPlayerPrivate.h" 332bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "Timer.h" 342bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <wtf/RetainPtr.h> 352bde8e466a4451c7319e3a072d118917957d6554Steve Block 362bde8e466a4451c7319e3a072d118917957d6554Steve Blocknamespace WebCore { 372bde8e466a4451c7319e3a072d118917957d6554Steve Block 382bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass ApplicationCacheResource; 392bde8e466a4451c7319e3a072d118917957d6554Steve Block 402bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass MediaPlayerPrivateAVFoundation : public MediaPlayerPrivateInterface { 412bde8e466a4451c7319e3a072d118917957d6554Steve Blockpublic: 422bde8e466a4451c7319e3a072d118917957d6554Steve Block 432bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void repaint(); 442bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void metadataLoaded(); 452bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void loadStateChanged(); 462bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void playabilityKnown(); 472bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void rateChanged(); 482bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void loadedTimeRangesChanged(); 492bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void seekableTimeRangesChanged(); 502bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void timeChanged(double); 512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual void seekCompleted(bool); 522bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void didEnd(); 532bde8e466a4451c7319e3a072d118917957d6554Steve Block 542bde8e466a4451c7319e3a072d118917957d6554Steve Block class Notification { 552bde8e466a4451c7319e3a072d118917957d6554Steve Block public: 562bde8e466a4451c7319e3a072d118917957d6554Steve Block enum Type { 572bde8e466a4451c7319e3a072d118917957d6554Steve Block None, 582bde8e466a4451c7319e3a072d118917957d6554Steve Block ItemDidPlayToEndTime, 592bde8e466a4451c7319e3a072d118917957d6554Steve Block ItemTracksChanged, 602bde8e466a4451c7319e3a072d118917957d6554Steve Block ItemStatusChanged, 612bde8e466a4451c7319e3a072d118917957d6554Steve Block ItemSeekableTimeRangesChanged, 622bde8e466a4451c7319e3a072d118917957d6554Steve Block ItemLoadedTimeRangesChanged, 632bde8e466a4451c7319e3a072d118917957d6554Steve Block ItemPresentationSizeChanged, 642bde8e466a4451c7319e3a072d118917957d6554Steve Block ItemIsPlaybackLikelyToKeepUpChanged, 652bde8e466a4451c7319e3a072d118917957d6554Steve Block ItemIsPlaybackBufferEmptyChanged, 662bde8e466a4451c7319e3a072d118917957d6554Steve Block ItemIsPlaybackBufferFullChanged, 672bde8e466a4451c7319e3a072d118917957d6554Steve Block AssetMetadataLoaded, 682bde8e466a4451c7319e3a072d118917957d6554Steve Block AssetPlayabilityKnown, 692bde8e466a4451c7319e3a072d118917957d6554Steve Block PlayerRateChanged, 702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch PlayerTimeChanged, 712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch SeekCompleted, 722bde8e466a4451c7319e3a072d118917957d6554Steve Block }; 732bde8e466a4451c7319e3a072d118917957d6554Steve Block 742bde8e466a4451c7319e3a072d118917957d6554Steve Block Notification() 752bde8e466a4451c7319e3a072d118917957d6554Steve Block : m_type(None) 762bde8e466a4451c7319e3a072d118917957d6554Steve Block , m_time(0) 772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch , m_finished(false) 782bde8e466a4451c7319e3a072d118917957d6554Steve Block { 792bde8e466a4451c7319e3a072d118917957d6554Steve Block } 802bde8e466a4451c7319e3a072d118917957d6554Steve Block 812bde8e466a4451c7319e3a072d118917957d6554Steve Block Notification(Type type, double time) 822bde8e466a4451c7319e3a072d118917957d6554Steve Block : m_type(type) 832bde8e466a4451c7319e3a072d118917957d6554Steve Block , m_time(time) 842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch , m_finished(false) 852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch { 862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Notification(Type type, bool finished) 892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch : m_type(type) 902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch , m_time(0) 912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch , m_finished(finished) 922bde8e466a4451c7319e3a072d118917957d6554Steve Block { 932bde8e466a4451c7319e3a072d118917957d6554Steve Block } 942bde8e466a4451c7319e3a072d118917957d6554Steve Block 952bde8e466a4451c7319e3a072d118917957d6554Steve Block Type type() { return m_type; } 962bde8e466a4451c7319e3a072d118917957d6554Steve Block bool isValid() { return m_type != None; } 972bde8e466a4451c7319e3a072d118917957d6554Steve Block double time() { return m_time; } 982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch bool finished() { return m_finished; } 992bde8e466a4451c7319e3a072d118917957d6554Steve Block 1002bde8e466a4451c7319e3a072d118917957d6554Steve Block private: 1012bde8e466a4451c7319e3a072d118917957d6554Steve Block Type m_type; 1022bde8e466a4451c7319e3a072d118917957d6554Steve Block double m_time; 1032daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch bool m_finished; 1042bde8e466a4451c7319e3a072d118917957d6554Steve Block }; 1052bde8e466a4451c7319e3a072d118917957d6554Steve Block 1062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void scheduleMainThreadNotification(Notification); 1072bde8e466a4451c7319e3a072d118917957d6554Steve Block void scheduleMainThreadNotification(Notification::Type, double time = 0); 1082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void scheduleMainThreadNotification(Notification::Type, bool completed); 1092bde8e466a4451c7319e3a072d118917957d6554Steve Block void dispatchNotification(); 1102bde8e466a4451c7319e3a072d118917957d6554Steve Block void clearMainThreadPendingFlag(); 1112bde8e466a4451c7319e3a072d118917957d6554Steve Block 1122bde8e466a4451c7319e3a072d118917957d6554Steve Blockprotected: 1132bde8e466a4451c7319e3a072d118917957d6554Steve Block MediaPlayerPrivateAVFoundation(MediaPlayer*); 1142bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual ~MediaPlayerPrivateAVFoundation(); 1152bde8e466a4451c7319e3a072d118917957d6554Steve Block 1162bde8e466a4451c7319e3a072d118917957d6554Steve Block // MediaPlayerPrivatePrivateInterface overrides. 1172bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void load(const String& url); 1182bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void cancelLoad() = 0; 1192bde8e466a4451c7319e3a072d118917957d6554Steve Block 1202bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void prepareToPlay(); 1212bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual PlatformMedia platformMedia() const = 0; 1222bde8e466a4451c7319e3a072d118917957d6554Steve Block 1232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual void play(); 1242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual void pause(); 1252bde8e466a4451c7319e3a072d118917957d6554Steve Block 1262bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual IntSize naturalSize() const; 1272bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual bool hasVideo() const { return m_cachedHasVideo; } 1282bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual bool hasAudio() const { return m_cachedHasAudio; } 1292bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void setVisible(bool); 1302bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual float duration() const; 1312bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual float currentTime() const = 0; 1322bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void seek(float); 1332bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual bool seeking() const; 1342bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void setRate(float); 1352bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual bool paused() const; 1362bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void setVolume(float) = 0; 1372bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual bool hasClosedCaptions() const { return m_cachedHasCaptions; } 1382bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void setClosedCaptionsVisible(bool) = 0; 1392bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual MediaPlayer::NetworkState networkState() const { return m_networkState; } 1402bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual MediaPlayer::ReadyState readyState() const { return m_readyState; } 1412bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual float maxTimeSeekable() const; 1422bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual PassRefPtr<TimeRanges> buffered() const; 1432bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual unsigned bytesLoaded() const; 1442bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void setSize(const IntSize&); 1452bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void paint(GraphicsContext*, const IntRect&); 1462bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void paintCurrentFrameInContext(GraphicsContext*, const IntRect&) = 0; 1472bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void setPreload(MediaPlayer::Preload); 1482bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual bool hasAvailableVideoFrame() const; 1492bde8e466a4451c7319e3a072d118917957d6554Steve Block#if USE(ACCELERATED_COMPOSITING) 1502bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual PlatformLayer* platformLayer() const { return 0; } 1512bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual bool supportsAcceleratedRendering() const = 0; 1522bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void acceleratedRenderingStateChanged(); 1532bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 1542bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual bool hasSingleSecurityOrigin() const { return true; } 1552bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual MediaPlayer::MovieLoadType movieLoadType() const; 1562bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void prepareForRendering(); 1572bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual float mediaTimeForTimeValue(float) const = 0; 1582bde8e466a4451c7319e3a072d118917957d6554Steve Block 1592bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual bool supportsFullscreen() const; 1602bde8e466a4451c7319e3a072d118917957d6554Steve Block 1612bde8e466a4451c7319e3a072d118917957d6554Steve Block // Required interfaces for concrete derived classes. 1622bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void createAVPlayerForURL(const String& url) = 0; 1632bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(OFFLINE_WEB_APPLICATIONS) 1642bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void createAVPlayerForCacheResource(ApplicationCacheResource*) = 0; 1652bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 1662bde8e466a4451c7319e3a072d118917957d6554Steve Block 1672bde8e466a4451c7319e3a072d118917957d6554Steve Block enum ItemStatus { 1682bde8e466a4451c7319e3a072d118917957d6554Steve Block MediaPlayerAVPlayerItemStatusUnknown, 1692bde8e466a4451c7319e3a072d118917957d6554Steve Block MediaPlayerAVPlayerItemStatusFailed, 1702bde8e466a4451c7319e3a072d118917957d6554Steve Block MediaPlayerAVPlayerItemStatusReadyToPlay, 1712bde8e466a4451c7319e3a072d118917957d6554Steve Block MediaPlayerAVPlayerItemStatusPlaybackBufferEmpty, 1722bde8e466a4451c7319e3a072d118917957d6554Steve Block MediaPlayerAVPlayerItemStatusPlaybackBufferFull, 1732bde8e466a4451c7319e3a072d118917957d6554Steve Block MediaPlayerAVPlayerItemStatusPlaybackLikelyToKeepUp, 1742bde8e466a4451c7319e3a072d118917957d6554Steve Block }; 1752bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual ItemStatus playerItemStatus() const = 0; 1762bde8e466a4451c7319e3a072d118917957d6554Steve Block 1772bde8e466a4451c7319e3a072d118917957d6554Steve Block enum AVAssetStatus { 1782bde8e466a4451c7319e3a072d118917957d6554Steve Block MediaPlayerAVAssetStatusUnknown, 1792bde8e466a4451c7319e3a072d118917957d6554Steve Block MediaPlayerAVAssetStatusLoading, 1802bde8e466a4451c7319e3a072d118917957d6554Steve Block MediaPlayerAVAssetStatusFailed, 1812bde8e466a4451c7319e3a072d118917957d6554Steve Block MediaPlayerAVAssetStatusCancelled, 1822bde8e466a4451c7319e3a072d118917957d6554Steve Block MediaPlayerAVAssetStatusLoaded, 1832bde8e466a4451c7319e3a072d118917957d6554Steve Block MediaPlayerAVAssetStatusPlayable, 1842bde8e466a4451c7319e3a072d118917957d6554Steve Block }; 1852bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual AVAssetStatus assetStatus() const = 0; 1862bde8e466a4451c7319e3a072d118917957d6554Steve Block 1872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual void platformPlay() = 0; 1882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual void platformPause() = 0; 1892bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void checkPlayability() = 0; 1902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual void updateRate() = 0; 1912bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual float rate() const = 0; 1922bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void seekToTime(float time) = 0; 1932bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual unsigned totalBytes() const = 0; 1942bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual PassRefPtr<TimeRanges> platformBufferedTimeRanges() const = 0; 1952bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual float platformMaxTimeSeekable() const = 0; 1962bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual float platformMaxTimeLoaded() const = 0; 1972bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual float platformDuration() const = 0; 1982bde8e466a4451c7319e3a072d118917957d6554Steve Block 1992bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void beginLoadingMetadata() = 0; 2002bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void tracksChanged() = 0; 2012bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void sizeChanged() = 0; 2022bde8e466a4451c7319e3a072d118917957d6554Steve Block 2032bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void createContextVideoRenderer() = 0; 2042bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void destroyContextVideoRenderer() = 0; 2052bde8e466a4451c7319e3a072d118917957d6554Steve Block 2062bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void createVideoLayer() = 0; 2072bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void destroyVideoLayer() = 0; 2082bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual bool videoLayerIsReadyToDisplay() const = 0; 2092bde8e466a4451c7319e3a072d118917957d6554Steve Block 2102bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual bool hasContextRenderer() const = 0; 2112bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual bool hasLayerRenderer() const = 0; 2122bde8e466a4451c7319e3a072d118917957d6554Steve Block 2132bde8e466a4451c7319e3a072d118917957d6554Steve Blockprotected: 2142bde8e466a4451c7319e3a072d118917957d6554Steve Block void resumeLoad(); 2152bde8e466a4451c7319e3a072d118917957d6554Steve Block void updateStates(); 2162bde8e466a4451c7319e3a072d118917957d6554Steve Block 2172bde8e466a4451c7319e3a072d118917957d6554Steve Block void setHasVideo(bool b) { m_cachedHasVideo = b; }; 2182bde8e466a4451c7319e3a072d118917957d6554Steve Block void setHasAudio(bool b) { m_cachedHasAudio = b; } 2192bde8e466a4451c7319e3a072d118917957d6554Steve Block void setHasClosedCaptions(bool b) { m_cachedHasCaptions = b; } 2202bde8e466a4451c7319e3a072d118917957d6554Steve Block void setDelayCallbacks(bool); 2212bde8e466a4451c7319e3a072d118917957d6554Steve Block void setIgnoreLoadStateChanges(bool delay) { m_ignoreLoadStateChanges = delay; } 2222bde8e466a4451c7319e3a072d118917957d6554Steve Block void setNaturalSize(IntSize); 2232bde8e466a4451c7319e3a072d118917957d6554Steve Block 2242bde8e466a4451c7319e3a072d118917957d6554Steve Block enum MediaRenderingMode { MediaRenderingNone, MediaRenderingToContext, MediaRenderingToLayer }; 2252bde8e466a4451c7319e3a072d118917957d6554Steve Block MediaRenderingMode currentRenderingMode() const; 2262bde8e466a4451c7319e3a072d118917957d6554Steve Block MediaRenderingMode preferredRenderingMode() const; 2272bde8e466a4451c7319e3a072d118917957d6554Steve Block 2282bde8e466a4451c7319e3a072d118917957d6554Steve Block bool metaDataAvailable() const { return m_readyState >= MediaPlayer::HaveMetadata; } 2292bde8e466a4451c7319e3a072d118917957d6554Steve Block float requestedRate() const { return m_requestedRate; } 2302bde8e466a4451c7319e3a072d118917957d6554Steve Block float maxTimeLoaded() const; 2312bde8e466a4451c7319e3a072d118917957d6554Steve Block bool isReadyForVideoSetup() const; 2322bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void setUpVideoRendering(); 2332bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void tearDownVideoRendering(); 2342bde8e466a4451c7319e3a072d118917957d6554Steve Block bool hasSetUpVideoRendering() const; 2352bde8e466a4451c7319e3a072d118917957d6554Steve Block 2362bde8e466a4451c7319e3a072d118917957d6554Steve Block static void mainThreadCallback(void*); 2372bde8e466a4451c7319e3a072d118917957d6554Steve Block 2382bde8e466a4451c7319e3a072d118917957d6554Steve Blockprivate: 2392bde8e466a4451c7319e3a072d118917957d6554Steve Block 2402bde8e466a4451c7319e3a072d118917957d6554Steve Block MediaPlayer* m_player; 2412bde8e466a4451c7319e3a072d118917957d6554Steve Block 2422bde8e466a4451c7319e3a072d118917957d6554Steve Block Vector<Notification> m_queuedNotifications; 2432bde8e466a4451c7319e3a072d118917957d6554Steve Block Mutex m_queueMutex; 2442bde8e466a4451c7319e3a072d118917957d6554Steve Block bool m_mainThreadCallPending; 2452bde8e466a4451c7319e3a072d118917957d6554Steve Block 2462bde8e466a4451c7319e3a072d118917957d6554Steve Block mutable RefPtr<TimeRanges> m_cachedLoadedTimeRanges; 2472bde8e466a4451c7319e3a072d118917957d6554Steve Block 2482bde8e466a4451c7319e3a072d118917957d6554Steve Block MediaPlayer::NetworkState m_networkState; 2492bde8e466a4451c7319e3a072d118917957d6554Steve Block MediaPlayer::ReadyState m_readyState; 2502bde8e466a4451c7319e3a072d118917957d6554Steve Block 2512bde8e466a4451c7319e3a072d118917957d6554Steve Block String m_assetURL; 2522bde8e466a4451c7319e3a072d118917957d6554Steve Block MediaPlayer::Preload m_preload; 2532bde8e466a4451c7319e3a072d118917957d6554Steve Block FloatSize m_scaleFactor; 2542bde8e466a4451c7319e3a072d118917957d6554Steve Block 2552bde8e466a4451c7319e3a072d118917957d6554Steve Block IntSize m_cachedNaturalSize; 2562bde8e466a4451c7319e3a072d118917957d6554Steve Block mutable float m_cachedMaxTimeLoaded; 2572bde8e466a4451c7319e3a072d118917957d6554Steve Block mutable float m_cachedMaxTimeSeekable; 2582bde8e466a4451c7319e3a072d118917957d6554Steve Block mutable float m_cachedDuration; 2592bde8e466a4451c7319e3a072d118917957d6554Steve Block float m_reportedDuration; 2602bde8e466a4451c7319e3a072d118917957d6554Steve Block 2612bde8e466a4451c7319e3a072d118917957d6554Steve Block float m_seekTo; 2622bde8e466a4451c7319e3a072d118917957d6554Steve Block float m_requestedRate; 2632bde8e466a4451c7319e3a072d118917957d6554Steve Block int m_delayCallbacks; 2642bde8e466a4451c7319e3a072d118917957d6554Steve Block bool m_havePreparedToPlay; 2652bde8e466a4451c7319e3a072d118917957d6554Steve Block bool m_assetIsPlayable; 2662bde8e466a4451c7319e3a072d118917957d6554Steve Block bool m_visible; 2672bde8e466a4451c7319e3a072d118917957d6554Steve Block bool m_videoFrameHasDrawn; 2682bde8e466a4451c7319e3a072d118917957d6554Steve Block bool m_loadingMetadata; 2692bde8e466a4451c7319e3a072d118917957d6554Steve Block bool m_delayingLoad; 2702bde8e466a4451c7319e3a072d118917957d6554Steve Block bool m_isAllowedToRender; 2712bde8e466a4451c7319e3a072d118917957d6554Steve Block bool m_cachedHasAudio; 2722bde8e466a4451c7319e3a072d118917957d6554Steve Block bool m_cachedHasVideo; 2732bde8e466a4451c7319e3a072d118917957d6554Steve Block bool m_cachedHasCaptions; 2742bde8e466a4451c7319e3a072d118917957d6554Steve Block bool m_ignoreLoadStateChanges; 2752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch bool m_haveReportedFirstVideoFrame; 2762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch bool m_playWhenFramesAvailable; 2772bde8e466a4451c7319e3a072d118917957d6554Steve Block}; 2782bde8e466a4451c7319e3a072d118917957d6554Steve Block 2792bde8e466a4451c7319e3a072d118917957d6554Steve Block} 2802bde8e466a4451c7319e3a072d118917957d6554Steve Block 2812bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 2822bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 283