1 /* 2 * Copyright (C) 2011 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 #ifndef MediaPlayerPrivateAVFoundationObjC_h 27 #define MediaPlayerPrivateAVFoundationObjC_h 28 29 #if ENABLE(VIDEO) && USE(AVFOUNDATION) 30 31 #include "MediaPlayerPrivateAVFoundation.h" 32 33 #ifdef __OBJC__ 34 @class AVAsset; 35 @class AVPlayer; 36 @class AVPlayerItem; 37 @class AVPlayerLayer; 38 @class AVAssetImageGenerator; 39 @class WebCoreAVFMovieObserver; 40 #else 41 class AVAsset; 42 class AVPlayer; 43 class AVPlayerItem; 44 class AVPlayerLayer; 45 class AVAssetImageGenerator; 46 class WebCoreAVFMovieObserver; 47 typedef struct objc_object *id; 48 #endif 49 50 namespace WebCore { 51 52 class ApplicationCacheResource; 53 54 class MediaPlayerPrivateAVFoundationObjC : public MediaPlayerPrivateAVFoundation { 55 public: 56 57 static void registerMediaEngine(MediaEngineRegistrar); 58 59 void setAsset(id); 60 virtual void tracksChanged(); 61 62 private: 63 MediaPlayerPrivateAVFoundationObjC(MediaPlayer*); 64 ~MediaPlayerPrivateAVFoundationObjC(); 65 66 // engine support 67 static MediaPlayerPrivateInterface* create(MediaPlayer* player); 68 static void getSupportedTypes(HashSet<String>& types); 69 static MediaPlayer::SupportsType supportsType(const String& type, const String& codecs); 70 static bool isAvailable(); 71 72 virtual void cancelLoad(); 73 74 virtual PlatformMedia platformMedia() const; 75 76 virtual void platformPlay(); 77 virtual void platformPause(); 78 virtual float currentTime() const; 79 virtual void setVolume(float); 80 virtual void setClosedCaptionsVisible(bool); 81 virtual void paint(GraphicsContext*, const IntRect&); 82 virtual void paintCurrentFrameInContext(GraphicsContext*, const IntRect&); 83 virtual PlatformLayer* platformLayer() const; 84 virtual bool supportsAcceleratedRendering() const { return true; } 85 virtual float mediaTimeForTimeValue(float) const; 86 87 virtual void createAVPlayer(); 88 virtual void createAVPlayerForURL(const String& url); 89 #if ENABLE(OFFLINE_WEB_APPLICATIONS) 90 virtual void createAVPlayerForCacheResource(ApplicationCacheResource*); 91 #endif 92 virtual MediaPlayerPrivateAVFoundation::ItemStatus playerItemStatus() const; 93 virtual MediaPlayerPrivateAVFoundation::AVAssetStatus assetStatus() const; 94 95 virtual void checkPlayability(); 96 virtual void updateRate(); 97 virtual float rate() const; 98 virtual void seekToTime(float time); 99 virtual unsigned totalBytes() const; 100 virtual PassRefPtr<TimeRanges> platformBufferedTimeRanges() const; 101 virtual float platformMaxTimeSeekable() const; 102 virtual float platformDuration() const; 103 virtual float platformMaxTimeLoaded() const; 104 virtual void beginLoadingMetadata(); 105 virtual void sizeChanged(); 106 107 virtual void createContextVideoRenderer(); 108 virtual void destroyContextVideoRenderer(); 109 110 virtual void createVideoLayer(); 111 virtual void destroyVideoLayer(); 112 virtual bool videoLayerIsReadyToDisplay() const; 113 114 virtual bool hasContextRenderer() const; 115 virtual bool hasLayerRenderer() const; 116 117 RetainPtr<CGImageRef> createImageForTimeInRect(float, const IntRect&); 118 119 MediaPlayer* m_player; 120 RetainPtr<AVAsset> m_avAsset; 121 RetainPtr<AVPlayer> m_avPlayer; 122 RetainPtr<AVPlayerItem> m_avPlayerItem; 123 RetainPtr<AVPlayerLayer> m_videoLayer; 124 RetainPtr<WebCoreAVFMovieObserver> m_objcObserver; 125 RetainPtr<AVAssetImageGenerator> m_imageGenerator; 126 id m_timeObserver; 127 }; 128 129 } 130 131 #endif 132 #endif 133