c0808289d50a752b819827225d2a1bf72b7e017c
[WebKit-https.git] / Source / WebCore / platform / ios / WebAVPlayerController.h
1 /*
2  * Copyright (C) 2016 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 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 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 #if PLATFORM(IOS_FAMILY) && HAVE(AVKIT)
27
28 #import <pal/spi/cocoa/AVKitSPI.h>
29
30 namespace WebCore {
31 class PlaybackSessionModel;
32 class PlaybackSessionInterfaceAVKit;
33 }
34
35 @interface WebAVMediaSelectionOption : NSObject
36 @property (retain) NSString *localizedDisplayName;
37 @end
38
39 @interface WebAVPlayerController : NSObject {
40     WebAVMediaSelectionOption *_currentAudioMediaSelectionOption;
41     WebAVMediaSelectionOption *_currentLegibleMediaSelectionOption;
42     BOOL _pictureInPictureInterrupted;
43     BOOL _muted;
44 }
45
46 @property (retain) AVPlayerController* playerControllerProxy;
47 @property (assign) WebCore::PlaybackSessionModel* delegate;
48 @property (assign) WebCore::PlaybackSessionInterfaceAVKit* playbackSessionInterface;
49
50 @property (readonly) BOOL canScanForward;
51 @property BOOL canScanBackward;
52 @property (readonly) BOOL canSeekToBeginning;
53 @property (readonly) BOOL canSeekToEnd;
54
55 @property BOOL canPlay;
56 @property (getter=isPlaying) BOOL playing;
57 @property BOOL canPause;
58 @property BOOL canTogglePlayback;
59 @property double rate;
60 @property BOOL canSeek;
61 @property NSTimeInterval contentDuration;
62 @property CGSize contentDimensions;
63 @property BOOL hasEnabledAudio;
64 @property BOOL hasEnabledVideo;
65 @property BOOL hasVideo;
66 @property (readonly) NSTimeInterval minTime;
67 @property (readonly) NSTimeInterval maxTime;
68 @property NSTimeInterval contentDurationWithinEndTimes;
69 @property (retain) NSArray *loadedTimeRanges;
70 @property AVPlayerControllerStatus status;
71 @property (retain) AVValueTiming *timing;
72 @property (retain) NSArray *seekableTimeRanges;
73 @property (getter=isMuted) BOOL muted;
74 @property double volume;
75 - (void)volumeChanged:(double)volume;
76
77 @property (readonly) BOOL hasMediaSelectionOptions;
78 @property (readonly) BOOL hasAudioMediaSelectionOptions;
79 @property (retain) NSArray *audioMediaSelectionOptions;
80 @property (retain) WebAVMediaSelectionOption *currentAudioMediaSelectionOption;
81 @property (readonly) BOOL hasLegibleMediaSelectionOptions;
82 @property (retain) NSArray *legibleMediaSelectionOptions;
83 @property (retain) WebAVMediaSelectionOption *currentLegibleMediaSelectionOption;
84
85 @property (readonly, getter=isPlayingOnExternalScreen) BOOL playingOnExternalScreen;
86 @property (nonatomic, getter=isPlayingOnSecondScreen) BOOL playingOnSecondScreen;
87 @property (getter=isExternalPlaybackActive) BOOL externalPlaybackActive;
88 @property AVPlayerControllerExternalPlaybackType externalPlaybackType;
89 @property (retain) NSString *externalPlaybackAirPlayDeviceLocalizedName;
90 @property BOOL allowsExternalPlayback;
91 @property (getter=isPictureInPicturePossible) BOOL pictureInPicturePossible;
92 @property (getter=isPictureInPictureInterrupted) BOOL pictureInPictureInterrupted;
93
94 @property NSTimeInterval seekableTimeRangesLastModifiedTime;
95 @property NSTimeInterval liveUpdateInterval;
96
97 @property (NS_NONATOMIC_IOSONLY, retain, readwrite) AVValueTiming *minTiming;
98 @property (NS_NONATOMIC_IOSONLY, retain, readwrite) AVValueTiming *maxTiming;
99 @end
100
101 #endif
102