blob: ddf2c2d2c81b8759d78f10d639bf7a3f6cedaadc [file] [log] [blame]
/*
* Copyright (C) 2019 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. AND ITS CONTRIBUTORS ``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 ITS 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.
*/
#include "config.h"
#if PLATFORM(COCOA)
#import <pal/cocoa/AVFoundationSoftLink.h>
namespace TestWebKitAPI {
TEST(AVFoundationSoftLink, Classes)
{
EXPECT_NE(PAL::getAVPlayerClass(), nullptr);
EXPECT_NE(PAL::getAVPlayerItemClass(), nullptr);
EXPECT_NE(PAL::getAVPlayerItemVideoOutputClass(), nullptr);
EXPECT_NE(PAL::getAVPlayerLayerClass(), nullptr);
EXPECT_NE(PAL::getAVURLAssetClass(), nullptr);
EXPECT_NE(PAL::getAVAssetImageGeneratorClass(), nullptr);
EXPECT_NE(PAL::getAVMetadataItemClass(), nullptr);
EXPECT_NE(PAL::getAVAssetCacheClass(), nullptr);
EXPECT_NE(PAL::getAVPlayerItemLegibleOutputClass(), nullptr);
EXPECT_NE(PAL::getAVMediaSelectionGroupClass(), nullptr);
EXPECT_NE(PAL::getAVMediaSelectionOptionClass(), nullptr);
EXPECT_NE(PAL::getAVOutputContextClass(), nullptr);
EXPECT_NE(PAL::getAVAssetReaderClass(), nullptr);
EXPECT_NE(PAL::getAVAssetWriterClass(), nullptr);
EXPECT_NE(PAL::getAVAssetWriterInputClass(), nullptr);
EXPECT_NE(PAL::getAVCaptureSessionClass(), nullptr);
EXPECT_NE(PAL::getAVCaptureConnectionClass(), nullptr);
EXPECT_NE(PAL::getAVCaptureDeviceClass(), nullptr);
EXPECT_NE(PAL::getAVCaptureDeviceFormatClass(), nullptr);
EXPECT_NE(PAL::getAVCaptureDeviceInputClass(), nullptr);
EXPECT_NE(PAL::getAVCaptureOutputClass(), nullptr);
EXPECT_NE(PAL::getAVCaptureVideoDataOutputClass(), nullptr);
EXPECT_NE(PAL::getAVFrameRateRangeClass(), nullptr);
EXPECT_NE(PAL::getAVMutableAudioMixClass(), nullptr);
EXPECT_NE(PAL::getAVMutableAudioMixInputParametersClass(), nullptr);
#if HAVE(AVSTREAMSESSION) && ENABLE(LEGACY_ENCRYPTED_MEDIA)
EXPECT_NE(PAL::getAVStreamSessionClass(), nullptr);
EXPECT_NE(PAL::getAVStreamDataParserClass(), nullptr);
#endif
#if PLATFORM(IOS_FAMILY)
EXPECT_NE(PAL::getAVPersistableContentKeyRequestClass(), nullptr);
EXPECT_NE(PAL::getAVAudioSessionClass(), nullptr);
EXPECT_NE(PAL::getAVSpeechSynthesizerClass(), nullptr);
EXPECT_NE(PAL::getAVSpeechUtteranceClass(), nullptr);
EXPECT_NE(PAL::getAVSpeechSynthesisVoiceClass(), nullptr);
#endif
#if HAVE(MEDIA_PLAYER) && !PLATFORM(WATCHOS)
EXPECT_NE(PAL::getAVRouteDetectorClass(), nullptr);
#endif
EXPECT_NE(PAL::getAVContentKeyResponseClass(), nullptr);
EXPECT_NE(PAL::getAVContentKeySessionClass(), nullptr);
EXPECT_NE(PAL::getAVAssetResourceLoadingRequestClass(), nullptr);
EXPECT_NE(PAL::getAVAssetReaderSampleReferenceOutputClass(), nullptr);
#if !PLATFORM(WATCHOS)
EXPECT_NE(PAL::getAVVideoPerformanceMetricsClass(), nullptr);
#endif
EXPECT_NE(PAL::getAVSampleBufferAudioRendererClass(), nullptr);
EXPECT_NE(PAL::getAVSampleBufferDisplayLayerClass(), nullptr);
EXPECT_NE(PAL::getAVSampleBufferRenderSynchronizerClass(), nullptr);
}
TEST(AVFoundationSoftLink, Constants)
{
EXPECT_TRUE([AVAudioTimePitchAlgorithmSpectral isEqualToString:@"Spectral"]);
EXPECT_TRUE([AVAudioTimePitchAlgorithmVarispeed isEqualToString:@"Varispeed"]);
EXPECT_TRUE([AVMediaTypeClosedCaption isEqualToString:@"clcp"]);
EXPECT_TRUE([AVMediaTypeVideo isEqualToString:@"vide"]);
EXPECT_TRUE([AVMediaTypeAudio isEqualToString:@"soun"]);
EXPECT_TRUE([AVMediaTypeMuxed isEqualToString:@"muxx"]);
EXPECT_TRUE([AVMediaTypeMetadata isEqualToString:@"meta"]);
EXPECT_TRUE([AVAssetImageGeneratorApertureModeCleanAperture isEqualToString:@"CleanAperture"]);
EXPECT_TRUE([AVStreamingKeyDeliveryContentKeyType isEqualToString:@"com.apple.streamingkeydelivery.contentkey"]);
EXPECT_TRUE([AVMediaCharacteristicContainsOnlyForcedSubtitles isEqualToString:@"public.subtitles.forced-only"]);
EXPECT_TRUE([AVMetadataCommonKeyTitle isEqualToString:@"title"]);
EXPECT_TRUE([AVMetadataKeySpaceCommon isEqualToString:@"comn"]);
EXPECT_TRUE([AVMediaTypeSubtitle isEqualToString:@"sbtl"]);
EXPECT_TRUE([AVMediaCharacteristicIsMainProgramContent isEqualToString:@"public.main-program-content"]);
EXPECT_TRUE([AVMediaCharacteristicEasyToRead isEqualToString:@"public.easy-to-read"]);
EXPECT_TRUE([AVFileTypeMPEG4 isEqualToString:@"public.mpeg-4"]);
EXPECT_TRUE([AVVideoCodecH264 isEqualToString:@"avc1"]);
EXPECT_TRUE([AVVideoExpectedSourceFrameRateKey isEqualToString:@"ExpectedFrameRate"]);
EXPECT_TRUE([AVVideoProfileLevelKey isEqualToString:@"ProfileLevel"]);
EXPECT_TRUE([AVVideoAverageBitRateKey isEqualToString:@"AverageBitRate"]);
EXPECT_TRUE([AVVideoMaxKeyFrameIntervalKey isEqualToString:@"MaxKeyFrameInterval"]);
EXPECT_TRUE([AVVideoProfileLevelH264MainAutoLevel isEqualToString:@"H264_Main_AutoLevel"]);
EXPECT_TRUE([AVOutOfBandAlternateTrackDisplayNameKey isEqualToString:@"MediaSelectionOptionsName"]);
EXPECT_TRUE([AVOutOfBandAlternateTrackExtendedLanguageTagKey isEqualToString:@"MediaSelectionOptionsExtendedLanguageTag"]);
EXPECT_TRUE([AVOutOfBandAlternateTrackIsDefaultKey isEqualToString:@"MediaSelectionOptionsIsDefault"]);
EXPECT_TRUE([AVOutOfBandAlternateTrackMediaCharactersticsKey isEqualToString:@"MediaSelectionOptionsTaggedMediaCharacteristics"]);
EXPECT_TRUE([AVOutOfBandAlternateTrackIdentifierKey isEqualToString:@"MediaSelectionOptionsClientIdentifier"]);
EXPECT_TRUE([AVOutOfBandAlternateTrackSourceKey isEqualToString:@"MediaSelectionOptionsURL"]);
EXPECT_TRUE([AVMediaCharacteristicDescribesMusicAndSoundForAccessibility isEqualToString:@"public.accessibility.describes-music-and-sound"]);
EXPECT_TRUE([AVMediaCharacteristicTranscribesSpokenDialogForAccessibility isEqualToString:@"public.accessibility.transcribes-spoken-dialog"]);
EXPECT_TRUE([AVMediaCharacteristicIsAuxiliaryContent isEqualToString:@"public.auxiliary-content"]);
EXPECT_TRUE([AVMediaCharacteristicDescribesVideoForAccessibility isEqualToString:@"public.accessibility.describes-video"]);
EXPECT_TRUE([AVMetadataKeySpaceQuickTimeUserData isEqualToString:@"udta"]);
EXPECT_TRUE([AVMetadataKeySpaceQuickTimeMetadata isEqualToString:@"mdta"]);
EXPECT_TRUE([AVMetadataKeySpaceiTunes isEqualToString:@"itsk"]);
EXPECT_TRUE([AVMetadataKeySpaceID3 isEqualToString:@"org.id3"]);
EXPECT_TRUE([AVMetadataKeySpaceISOUserData isEqualToString:@"uiso"]);
if (PAL::canLoad_AVFoundation_AVEncoderBitRateKey())
EXPECT_TRUE([AVEncoderBitRateKey isEqualToString:@"AVEncoderBitRateKey"]);
if (PAL::canLoad_AVFoundation_AVFormatIDKey())
EXPECT_TRUE([AVFormatIDKey isEqualToString:@"AVFormatIDKey"]);
if (PAL::canLoad_AVFoundation_AVNumberOfChannelsKey())
EXPECT_TRUE([AVNumberOfChannelsKey isEqualToString:@"AVNumberOfChannelsKey"]);
if (PAL::canLoad_AVFoundation_AVSampleRateKey())
EXPECT_TRUE([AVSampleRateKey isEqualToString:@"AVSampleRateKey"]);
#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101300) || (PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 110000) || (PLATFORM(WATCHOS) && __WATCH_OS_VERSION_MIN_REQUIRED >= 40000) || (PLATFORM(APPLETV) && __TV_OS_VERSION_MIN_REQUIRED >= 110000)
EXPECT_TRUE(PAL::canLoad_AVFoundation_AVURLAssetOutOfBandMIMETypeKey());
EXPECT_TRUE([AVURLAssetOutOfBandMIMETypeKey isEqualToString:@"AVURLAssetOutOfBandMIMETypeKey"]);
#endif
#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400) || (PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 120000) || (PLATFORM(WATCHOS) && __WATCH_OS_VERSION_MIN_REQUIRED >= 50000) || (PLATFORM(APPLETV) && __TV_OS_VERSION_MIN_REQUIRED >= 120000)
EXPECT_TRUE(PAL::canLoad_AVFoundation_AVURLAssetUseClientURLLoadingExclusively());
EXPECT_TRUE([AVURLAssetUseClientURLLoadingExclusively isEqualToString:@"AVURLAssetUseClientURLLoadingExclusively"]);
#endif
#if ENABLE(ENCRYPTED_MEDIA) && HAVE(AVCONTENTKEYSESSION)
EXPECT_TRUE(PAL::canLoad_AVFoundation_AVContentKeySystemFairPlayStreaming());
EXPECT_TRUE([AVContentKeySystemFairPlayStreaming isEqualToString:@"FairPlayStreaming"]);
#endif
#if ENABLE(LEGACY_ENCRYPTED_MEDIA) && ENABLE(MEDIA_SOURCE)
EXPECT_TRUE(PAL::canLoad_AVFoundation_AVContentKeyRequestProtocolVersionsKey());
EXPECT_TRUE([AVContentKeyRequestProtocolVersionsKey isEqualToString:@"ProtocolVersionsKey"]);
#endif
#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101500) || (PLATFORM(IOS) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 130000) || (PLATFORM(WATCHOS) && __WATCH_OS_VERSION_MIN_REQUIRED >= 60000) || (PLATFORM(APPLETV) && __TV_OS_VERSION_MIN_REQUIRED >= 130000)
EXPECT_TRUE(PAL::canLoad_AVFoundation_AVVideoCodecTypeHEVCWithAlpha());
EXPECT_TRUE([AVVideoCodecTypeHEVCWithAlpha isEqualToString:@"muxa"]);
#endif
#if PLATFORM(MAC)
EXPECT_TRUE([AVStreamDataParserContentKeyRequestProtocolVersionsKey isEqualToString:@"AVContentKeyRequestProtocolVersionsKey"]);
#endif
#if PLATFORM(IOS_FAMILY)
EXPECT_TRUE([AVURLAssetBoundNetworkInterfaceName isEqualToString:@"AVURLAssetBoundNetworkInterfaceName"]);
EXPECT_TRUE([AVURLAssetClientBundleIdentifierKey isEqualToString:@"AVURLAssetClientBundleIdentifierKey"]);
EXPECT_TRUE([AVCaptureSessionRuntimeErrorNotification isEqualToString:@"AVCaptureSessionRuntimeErrorNotification"]);
EXPECT_TRUE([AVCaptureSessionWasInterruptedNotification isEqualToString:@"AVCaptureSessionWasInterruptedNotification"]);
EXPECT_TRUE([AVCaptureSessionInterruptionEndedNotification isEqualToString:@"AVCaptureSessionInterruptionEndedNotification"]);
EXPECT_TRUE([AVCaptureSessionInterruptionReasonKey isEqualToString:@"AVCaptureSessionInterruptionReasonKey"]);
EXPECT_TRUE([AVCaptureSessionErrorKey isEqualToString:@"AVCaptureSessionErrorKey"]);
EXPECT_TRUE([AVAudioSessionCategoryAmbient isEqualToString:@"AVAudioSessionCategoryAmbient"]);
EXPECT_TRUE([AVAudioSessionCategorySoloAmbient isEqualToString:@"AVAudioSessionCategorySoloAmbient"]);
EXPECT_TRUE([AVAudioSessionCategoryPlayback isEqualToString:@"AVAudioSessionCategoryPlayback"]);
EXPECT_TRUE([AVAudioSessionCategoryRecord isEqualToString:@"AVAudioSessionCategoryRecord"]);
EXPECT_TRUE([AVAudioSessionCategoryPlayAndRecord isEqualToString:@"AVAudioSessionCategoryPlayAndRecord"]);
EXPECT_TRUE([AVAudioSessionCategoryAudioProcessing isEqualToString:@"AVAudioSessionCategoryAudioProcessing"]);
EXPECT_TRUE([AVAudioSessionModeDefault isEqualToString:@"AVAudioSessionModeDefault"]);
EXPECT_TRUE([AVAudioSessionModeVideoChat isEqualToString:@"AVAudioSessionModeVideoChat"]);
EXPECT_TRUE([AVAudioSessionInterruptionNotification isEqualToString:@"AVAudioSessionInterruptionNotification"]);
EXPECT_TRUE([AVAudioSessionInterruptionTypeKey isEqualToString:@"AVAudioSessionInterruptionTypeKey"]);
EXPECT_TRUE([AVAudioSessionInterruptionOptionKey isEqualToString:@"AVAudioSessionInterruptionOptionKey"]);
EXPECT_TRUE([AVRouteDetectorMultipleRoutesDetectedDidChangeNotification isEqualToString:@"AVRouteDetectorMultipleRoutesDetectedDidChangeNotification"]);
#endif
}
#endif // PLATFORM(COCOA)
} // namespace TestWebKitAPI