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
41class AVAsset;
42class AVPlayer;
43class AVPlayerItem;
44class AVPlayerLayer;
45class AVAssetImageGenerator;
46class WebCoreAVFMovieObserver;
47typedef struct objc_object *id;
48#endif
49
50namespace WebCore {
51
52class ApplicationCacheResource;
53
54class MediaPlayerPrivateAVFoundationObjC : public MediaPlayerPrivateAVFoundation {
55public:
56
57    static void registerMediaEngine(MediaEngineRegistrar);
58
59    void setAsset(id);
60    virtual void tracksChanged();
61
62private:
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