Home | History | Annotate | Download | only in avfoundation
      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