blob: 128c1834ec59d1650870469bf61da7d0aed9f12f [file] [log] [blame]
/*
* Copyright (C) 2011, 2013-2014 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#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:
// Engine support
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&);
DestinationColorSpace colorSpace() override;
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;
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