MediaPlayerPrivateAVFoundationCF.h [plain text]
#ifndef MediaPlayerPrivateAVFoundationCF_h
#define MediaPlayerPrivateAVFoundationCF_h
#if PLATFORM(WIN) && ENABLE(VIDEO) && USE(AVFOUNDATION)
#include "MediaPlayerPrivateAVFoundation.h"
#if HAVE(AVFOUNDATION_LOADER_DELEGATE) || HAVE(LEGACY_ENCRYPTED_MEDIA)
typedef struct OpaqueAVCFAssetResourceLoadingRequest* AVCFAssetResourceLoadingRequestRef;
#endif
namespace WebCore {
class AVFWrapper;
class WebCoreAVCFResourceLoader;
class MediaPlayerPrivateAVFoundationCF : public MediaPlayerPrivateAVFoundation {
public:
explicit MediaPlayerPrivateAVFoundationCF(MediaPlayer*);
virtual ~MediaPlayerPrivateAVFoundationCF();
void tracksChanged() override;
void resolvedURLChanged() override;
#if HAVE(AVFOUNDATION_LOADER_DELEGATE)
bool shouldWaitForLoadingOfResource(AVCFAssetResourceLoadingRequestRef);
void didCancelLoadingRequest(AVCFAssetResourceLoadingRequestRef);
void didStopLoadingRequest(AVCFAssetResourceLoadingRequestRef);
#if ENABLE(LEGACY_ENCRYPTED_MEDIA)
RetainPtr<AVCFAssetResourceLoadingRequestRef> takeRequestForKeyURI(const String&);
#endif
#endif
static void registerMediaEngine(MediaEngineRegistrar);
private:
friend class MediaPlayerFactoryAVFoundationCF;
static void getSupportedTypes(HashSet<String, ASCIICaseInsensitiveHash>& types);
static MediaPlayer::SupportsType supportsType(const MediaEngineSupportParameters&);
static bool supportsKeySystem(const String& keySystem, const String& mimeType);
static bool isAvailable();
virtual void cancelLoad();
virtual void platformSetVisible(bool);
virtual void platformPlay();
virtual void platformPause();
MediaTime currentMediaTime() const override;
virtual void setVolume(float);
void setClosedCaptionsVisible(bool) override;
virtual void paint(GraphicsContext&, const FloatRect&);
virtual void paintCurrentFrameInContext(GraphicsContext&, const FloatRect&);
virtual PlatformLayer* platformLayer() const;
virtual bool supportsAcceleratedRendering() const { return true; }
virtual MediaTime mediaTimeForTimeValue(const MediaTime&) const;
virtual void createAVPlayer();
virtual void createAVPlayerItem();
virtual void createAVAssetForURL(const URL&);
virtual MediaPlayerPrivateAVFoundation::ItemStatus playerItemStatus() const;
virtual MediaPlayerPrivateAVFoundation::AssetStatus assetStatus() const;
virtual void checkPlayability();
void setRate(float) override;
double rate() const override;
virtual void seekToTime(const MediaTime&, const MediaTime& negativeTolerance, const MediaTime& positiveTolerance);
virtual unsigned long long totalBytes() const;
virtual std::unique_ptr<PlatformTimeRanges> platformBufferedTimeRanges() const;
virtual MediaTime platformMinTimeSeekable() const;
virtual MediaTime platformMaxTimeSeekable() const;
virtual MediaTime platformDuration() const;
virtual MediaTime platformMaxTimeLoaded() const;
virtual void beginLoadingMetadata();
virtual void sizeChanged();
bool requiresImmediateCompositing() const override;
virtual bool hasAvailableVideoFrame() const;
virtual void createContextVideoRenderer();
virtual void destroyContextVideoRenderer();
virtual void createVideoLayer();
virtual void destroyVideoLayer();
virtual bool hasContextRenderer() const;
virtual bool hasLayerRenderer() const;
void updateVideoLayerGravity() override;
virtual void contentsNeedsDisplay();
#if ENABLE(LEGACY_ENCRYPTED_MEDIA)
std::unique_ptr<LegacyCDMSession> createSession(const String&, LegacyCDMSessionClient*) override;
#endif
String languageOfPrimaryAudioTrack() const override;
#if HAVE(AVFOUNDATION_MEDIA_SELECTION_GROUP)
void processMediaSelectionOptions();
#endif
void setCurrentTextTrack(InbandTextTrackPrivateAVF*) override;
InbandTextTrackPrivateAVF* currentTextTrack() const override;
long assetErrorCode() const final;
#if !HAVE(AVFOUNDATION_LEGIBLE_OUTPUT_SUPPORT)
void processLegacyClosedCaptionsTracks();
#endif
friend class AVFWrapper;
AVFWrapper* m_avfWrapper;
mutable String m_languageOfPrimaryAudioTrack;
#if HAVE(AVFOUNDATION_LOADER_DELEGATE)
friend class WebCoreAVCFResourceLoader;
HashMap<RetainPtr<AVCFAssetResourceLoadingRequestRef>, RefPtr<WebCoreAVCFResourceLoader>> m_resourceLoaderMap;
#endif
bool m_videoFrameHasDrawn;
};
}
#endif // PLATFORM(WIN) && ENABLE(VIDEO) && USE(AVFOUNDATION)
#endif // MediaPlayerPrivateAVFoundationCF_h