Changeset 245039 in webkit
- Timestamp:
- May 7, 2019 3:00:32 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WTF/ChangeLog
r245030 r245039 1 2019-05-07 Eric Carlson <eric.carlson@apple.com> 2 3 Define media buffering policy 4 https://bugs.webkit.org/show_bug.cgi?id=196979 5 <rdar://problem/28383861> 6 7 Reviewed by Jer Noble. 8 9 * wtf/Platform.h: 10 1 11 2019-05-07 Robin Morisset <rmorisset@apple.com> 2 12 -
trunk/Source/WTF/wtf/Platform.h
r244994 r245039 1528 1528 #define HAVE_ROUTE_SHARING_POLICY_LONG_FORM_VIDEO 1 1529 1529 #endif 1530 1531 #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) 1532 #define HAVE_AVPLAYER_RESOURCE_CONSERVATION_LEVEL 1 1533 #endif 1534 -
trunk/Source/WebCore/ChangeLog
r245038 r245039 1 2019-05-07 Eric Carlson <eric.carlson@apple.com> 2 3 Define media buffering policy 4 https://bugs.webkit.org/show_bug.cgi?id=196979 5 <rdar://problem/28383861> 6 7 Reviewed by Jer Noble. 8 9 Test: MediaBufferingPolicy API test. 10 11 * html/HTMLMediaElement.cpp: 12 (WebCore::HTMLMediaElement::HTMLMediaElement): 13 (WebCore::HTMLMediaElement::suspend): 14 (WebCore::HTMLMediaElement::resume): 15 (WebCore::HTMLMediaElement::createMediaPlayer): 16 (WebCore::HTMLMediaElement::setBufferingPolicy): 17 (WebCore::HTMLMediaElement::purgeBufferedDataIfPossible): 18 (WebCore::HTMLMediaElement::bufferingPolicy const): 19 (WebCore::HTMLMediaElement::setShouldBufferData): Deleted. 20 * html/HTMLMediaElement.h: 21 (WebCore::HTMLMediaElement::shouldBufferData const): Deleted. 22 * html/MediaElementSession.cpp: 23 (WebCore::MediaElementSession::updateClientDataBuffering): 24 (WebCore::MediaElementSession::preferredBufferingPolicy const): 25 (WebCore::MediaElementSession::dataBufferingPermitted const): Deleted. 26 * html/MediaElementSession.h: 27 * platform/graphics/MediaPlayer.cpp: 28 (WebCore::MediaPlayer::setBufferingPolicy): 29 (WebCore::convertEnumerationToString): 30 (WebCore::MediaPlayer::setShouldBufferData): Deleted. 31 * platform/graphics/MediaPlayer.h: 32 * platform/graphics/MediaPlayerEnums.h: 33 (WTF::LogArgument<WebCore::MediaPlayerEnums::BufferingPolicy>::toString): 34 * platform/graphics/MediaPlayerPrivate.h: 35 (WebCore::MediaPlayerPrivateInterface::setBufferingPolicy): 36 (WebCore::MediaPlayerPrivateInterface::setShouldBufferData): Deleted. 37 * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: 38 * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: 39 (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC): 40 (WebCore::MediaPlayerPrivateAVFoundationObjC::setBufferingPolicy): 41 (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldBufferData): Deleted. 42 * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h: 43 * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm: 44 (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setBufferingPolicy): 45 (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::flushAndRemoveVideoSampleBuffers): Deleted. 46 (WebCore::MediaPlayerPrivateMediaStreamAVFObjC::setShouldBufferData): Deleted. 47 * testing/Internals.cpp: 48 (WebCore::Internals::elementShouldBufferData): 49 (WebCore::Internals::elementBufferingPolicy): 50 * testing/Internals.h: 51 * testing/Internals.idl: 52 1 53 2019-05-07 Alex Christensen <achristensen@webkit.org> 2 54 -
trunk/Source/WebCore/PAL/ChangeLog
r244955 r245039 1 2019-05-07 Eric Carlson <eric.carlson@apple.com> 2 3 Define media buffering policy 4 https://bugs.webkit.org/show_bug.cgi?id=196979 5 <rdar://problem/28383861> 6 7 Reviewed by Jer Noble. 8 9 * pal/spi/mac/AVFoundationSPI.h: 10 1 11 2019-05-04 Alex Christensen <achristensen@webkit.org> 2 12 -
trunk/Source/WebCore/PAL/pal/spi/mac/AVFoundationSPI.h
r240592 r245039 325 325 #endif 326 326 327 #if !USE(APPLE_INTERNAL_SDK) && HAVE(AVPLAYER_RESOURCE_CONSERVATION_LEVEL) 328 @interface AVPlayer (AVPlayerPrivate) 329 330 @property (nonatomic) AVPlayerResourceConservationLevel resourceConservationLevelWhilePaused; 331 332 typedef NS_ENUM(NSInteger, AVPlayerResourceConservationLevel) { 333 AVPlayerResourceConservationLevelNone = 0, 334 AVPlayerResourceConservationLevelReduceReadAhead = 1, 335 AVPlayerResourceConservationLevelReuseActivePlayerResources = 2, 336 AVPlayerResourceConservationLevelRecycleBuffer = 3, 337 }; 338 @end 339 #endif -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r244815 r245039 450 450 , m_havePreparedToPlay(false) 451 451 , m_parsingInProgress(createdByParser) 452 , m_shouldBufferData(true)453 452 , m_elementIsHidden(document.hidden()) 454 453 , m_creatingControls(false) … … 5780 5779 stopWithoutDestroyingMediaPlayer(); 5781 5780 m_asyncEventQueue.suspend(); 5782 set ShouldBufferData(false);5781 setBufferingPolicy(BufferingPolicy::MakeResourcesPurgeable); 5783 5782 m_mediaSession->addBehaviorRestriction(MediaElementSession::RequirePageConsentToResumeMedia); 5784 5783 break; … … 5799 5798 m_asyncEventQueue.resume(); 5800 5799 5801 setShouldBufferData(true);5802 5803 5800 if (!m_mediaSession->pageAllowsPlaybackAfterResuming()) 5804 5801 document().addMediaCanStartListener(*this); … … 5807 5804 5808 5805 m_mediaSession->removeBehaviorRestriction(MediaElementSession::RequirePageConsentToResumeMedia); 5806 m_mediaSession->updateBufferingPolicy(); 5809 5807 5810 5808 if (m_error && m_error->code() == MediaError::MEDIA_ERR_ABORTED && !m_resumeTaskQueue.hasPendingTask()) { … … 6706 6704 6707 6705 m_player = MediaPlayer::create(*this); 6708 m_player->set ShouldBufferData(m_shouldBufferData);6706 m_player->setBufferingPolicy(m_bufferingPolicy); 6709 6707 schedulePlaybackControlsManagerUpdate(); 6710 6708 … … 7883 7881 } 7884 7882 7885 void HTMLMediaElement::setShouldBufferData(bool shouldBuffer) 7886 { 7887 if (shouldBuffer == m_shouldBufferData) 7888 return; 7889 7890 m_shouldBufferData = shouldBuffer; 7883 void HTMLMediaElement::setBufferingPolicy(BufferingPolicy policy) 7884 { 7885 if (policy == m_bufferingPolicy) 7886 return; 7887 7888 INFO_LOG(LOGIDENTIFIER, policy); 7889 7890 m_bufferingPolicy = policy; 7891 7891 if (m_player) 7892 m_player->set ShouldBufferData(shouldBuffer);7892 m_player->setBufferingPolicy(policy); 7893 7893 } 7894 7894 7895 7895 void HTMLMediaElement::purgeBufferedDataIfPossible() 7896 7896 { 7897 #if PLATFORM(IOS_FAMILY) 7898 if (!MemoryPressureHandler::singleton().isUnderMemoryPressure() && m_mediaSession->dataBufferingPermitted()) 7897 INFO_LOG(LOGIDENTIFIER); 7898 7899 if (!MemoryPressureHandler::singleton().isUnderMemoryPressure() && m_mediaSession->preferredBufferingPolicy() == BufferingPolicy::Default) 7899 7900 return; 7900 7901 … … 7904 7905 } 7905 7906 7906 // This is called to relieve memory pressure. Turning off buffering causes the media playback 7907 // daemon to release memory associated with queued-up video frames. 7908 // We turn it back on right away, but new frames won't get loaded unless playback is resumed. 7909 INFO_LOG(LOGIDENTIFIER, "toggling data buffering"); 7910 setShouldBufferData(false); 7911 setShouldBufferData(true); 7912 #endif 7907 setBufferingPolicy(BufferingPolicy::PurgeResources); 7913 7908 } 7914 7909 … … 8132 8127 } 8133 8128 8134 } 8135 8136 #endif 8129 HTMLMediaElementEnums::BufferingPolicy HTMLMediaElement::bufferingPolicy() const 8130 { 8131 return m_bufferingPolicy; 8132 } 8133 8134 } 8135 8136 #endif -
trunk/Source/WebCore/html/HTMLMediaElement.h
r244815 r245039 269 269 WEBCORE_EXPORT void play() override; 270 270 WEBCORE_EXPORT void pause() override; 271 void setShouldBufferData(bool);272 WEBCORE_EXPORT bool shouldBufferData() const { return m_shouldBufferData; }273 271 WEBCORE_EXPORT void fastSeek(double); 274 272 double minFastReverseRate() const; 275 273 double maxFastForwardRate() const; 276 274 277 void purgeBufferedDataIfPossible(); 275 using HTMLMediaElementEnums::BufferingPolicy; 276 void setBufferingPolicy(BufferingPolicy); 277 WEBCORE_EXPORT BufferingPolicy bufferingPolicy() const; 278 WEBCORE_EXPORT void purgeBufferedDataIfPossible(); 278 279 279 280 // captions … … 1073 1074 ScanDirection m_scanDirection { Forward }; 1074 1075 1076 BufferingPolicy m_bufferingPolicy { BufferingPolicy::Default }; 1077 1075 1078 bool m_firstTimePlaying : 1; 1076 1079 bool m_playing : 1; … … 1100 1103 bool m_havePreparedToPlay : 1; 1101 1104 bool m_parsingInProgress : 1; 1102 bool m_shouldBufferData : 1;1103 1105 bool m_elementIsHidden : 1; 1104 1106 bool m_elementWasRemovedFromDOM : 1; -
trunk/Source/WebCore/html/MediaElementSession.cpp
r244440 r245039 217 217 m_clientDataBufferingTimer.stop(); 218 218 219 m_element.set ShouldBufferData(dataBufferingPermitted());219 m_element.setBufferingPolicy(preferredBufferingPolicy()); 220 220 } 221 221 … … 357 357 } 358 358 359 bool MediaElementSession::dataBufferingPermitted() const359 MediaPlayer::BufferingPolicy MediaElementSession::preferredBufferingPolicy() const 360 360 { 361 361 if (isSuspended()) 362 return false;362 return MediaPlayer::BufferingPolicy::MakeResourcesPurgeable; 363 363 364 364 if (bufferingSuspended()) 365 return false;365 return MediaPlayer::BufferingPolicy::LimitReadAhead; 366 366 367 367 if (state() == PlatformMediaSession::Playing) 368 return true;368 return MediaPlayer::BufferingPolicy::Default; 369 369 370 370 if (shouldOverrideBackgroundLoadingRestriction()) 371 return true;371 return MediaPlayer::BufferingPolicy::Default; 372 372 373 373 #if ENABLE(WIRELESS_PLAYBACK_TARGET) 374 374 if (m_shouldPlayToPlaybackTarget) 375 return true;375 return MediaPlayer::BufferingPolicy::Default; 376 376 #endif 377 377 378 378 if (m_elementIsHiddenUntilVisibleInViewport || m_elementIsHiddenBecauseItWasRemovedFromDOM || m_element.elementIsHidden()) 379 return false;380 381 return true;379 return MediaPlayer::BufferingPolicy::MakeResourcesPurgeable; 380 381 return MediaPlayer::BufferingPolicy::Default; 382 382 } 383 383 -
trunk/Source/WebCore/html/MediaElementSession.h
r243451 r245039 74 74 bool autoplayPermitted() const; 75 75 bool dataLoadingPermitted() const; 76 bool dataBufferingPermitted() const;76 MediaPlayer::BufferingPolicy preferredBufferingPolicy() const; 77 77 bool fullscreenPermitted() const; 78 78 bool pageAllowsDataLoading() const; … … 105 105 void resumeBuffering() override; 106 106 bool bufferingSuspended() const; 107 void updateBufferingPolicy() { scheduleClientDataBufferingCheck(); } 107 108 108 109 // Restrictions to modify default behaviors. -
trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp
r242033 r245039 564 564 } 565 565 566 void MediaPlayer::set ShouldBufferData(bool shouldBuffer)567 { 568 m_private->set ShouldBufferData(shouldBuffer);566 void MediaPlayer::setBufferingPolicy(BufferingPolicy policy) 567 { 568 m_private->setBufferingPolicy(policy); 569 569 } 570 570 … … 1641 1641 } 1642 1642 1643 } 1644 1645 #endif 1643 String convertEnumerationToString(MediaPlayerEnums::BufferingPolicy enumerationValue) 1644 { 1645 static const NeverDestroyed<String> values[] = { 1646 MAKE_STATIC_STRING_IMPL("Default"), 1647 MAKE_STATIC_STRING_IMPL("LimitReadAhead"), 1648 MAKE_STATIC_STRING_IMPL("MakeResourcesPurgeable"), 1649 MAKE_STATIC_STRING_IMPL("PurgeResources"), 1650 }; 1651 static_assert(!static_cast<size_t>(MediaPlayerEnums::BufferingPolicy::Default), "MediaPlayerEnums::Default is not 0 as expected"); 1652 static_assert(static_cast<size_t>(MediaPlayerEnums::BufferingPolicy::LimitReadAhead) == 1, "MediaPlayerEnums::LimitReadAhead is not 1 as expected"); 1653 static_assert(static_cast<size_t>(MediaPlayerEnums::BufferingPolicy::MakeResourcesPurgeable) == 2, "MediaPlayerEnums::MakeResourcesPurgeable is not 2 as expected"); 1654 static_assert(static_cast<size_t>(MediaPlayerEnums::BufferingPolicy::PurgeResources) == 3, "MediaPlayerEnums::PurgeResources is not 3 as expected"); 1655 ASSERT(static_cast<size_t>(enumerationValue) < WTF_ARRAY_LENGTH(values)); 1656 return values[static_cast<size_t>(enumerationValue)]; 1657 } 1658 1659 } 1660 1661 #endif -
trunk/Source/WebCore/platform/graphics/MediaPlayer.h
r241585 r245039 313 313 void play(); 314 314 void pause(); 315 void setShouldBufferData(bool); 315 316 using MediaPlayerEnums::BufferingPolicy; 317 void setBufferingPolicy(BufferingPolicy); 316 318 317 319 #if ENABLE(LEGACY_ENCRYPTED_MEDIA) -
trunk/Source/WebCore/platform/graphics/MediaPlayerEnums.h
r241585 r245039 44 44 }; 45 45 typedef uint32_t VideoFullscreenMode; 46 47 enum class BufferingPolicy { 48 Default, 49 LimitReadAhead, 50 MakeResourcesPurgeable, 51 PurgeResources, 52 }; 46 53 }; 47 54 … … 50 57 WTF::String convertEnumerationToString(MediaPlayerEnums::Preload); 51 58 WTF::String convertEnumerationToString(MediaPlayerEnums::SupportsType); 59 WTF::String convertEnumerationToString(MediaPlayerEnums::BufferingPolicy); 52 60 53 61 } // namespace WebCore … … 75 83 }; 76 84 85 template <> 86 struct LogArgument<WebCore::MediaPlayerEnums::BufferingPolicy> { 87 static WTF::String toString(const WebCore::MediaPlayerEnums::BufferingPolicy policy) 88 { 89 return convertEnumerationToString(policy); 90 } 91 }; 92 77 93 }; // namespace WTF -
trunk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h
r241120 r245039 69 69 virtual void play() = 0; 70 70 virtual void pause() = 0; 71 virtual void set ShouldBufferData(bool) { }71 virtual void setBufferingPolicy(MediaPlayer::BufferingPolicy) { } 72 72 73 73 virtual bool supportsPictureInPicture() const { return false; } -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h
r240401 r245039 122 122 void canPlayFastForwardDidChange(bool); 123 123 124 void set ShouldBufferData(bool) override;124 void setBufferingPolicy(MediaPlayerEnums::BufferingPolicy) override; 125 125 126 126 #if HAVE(AVFOUNDATION_VIDEO_OUTPUT) … … 425 425 unsigned m_pendingStatusChanges; 426 426 int m_cachedItemStatus; 427 MediaPlayer::BufferingPolicy m_bufferingPolicy { MediaPlayer::BufferingPolicy::Default }; 427 428 bool m_cachedLikelyToKeepUp; 428 429 bool m_cachedBufferEmpty; 429 430 bool m_cachedBufferFull; 430 431 bool m_cachedHasEnabledAudio; 431 bool m_shouldBufferData;432 432 bool m_cachedIsReadyForDisplay; 433 433 bool m_haveBeenAskedToCreateLayer; -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm
r244980 r245039 349 349 , m_cachedBufferFull(false) 350 350 , m_cachedHasEnabledAudio(false) 351 , m_shouldBufferData(true)352 351 , m_cachedIsReadyForDisplay(false) 353 352 , m_haveBeenAskedToCreateLayer(false) … … 380 379 void MediaPlayerPrivateAVFoundationObjC::cancelLoad() 381 380 { 382 INFO_LOG(LOGIDENTIFIER);381 ALWAYS_LOG(LOGIDENTIFIER); 383 382 tearDownVideoRendering(); 384 383 … … 544 543 [m_videoLayer setContentsScale:player()->client().mediaPlayerContentsScale()]; 545 544 IntSize defaultSize = snappedIntRect(player()->client().mediaPlayerContentBoxRect()).size(); 546 INFO_LOG(LOGIDENTIFIER);545 ALWAYS_LOG(LOGIDENTIFIER); 547 546 548 547 m_videoFullscreenLayerManager->setVideoLayer(m_videoLayer.get(), defaultSize); … … 559 558 return; 560 559 561 INFO_LOG(LOGIDENTIFIER);560 ALWAYS_LOG(LOGIDENTIFIER); 562 561 563 562 [m_videoLayer removeObserver:m_objcObserver.get() forKeyPath:@"readyForDisplay"]; … … 699 698 return; 700 699 701 INFO_LOG(LOGIDENTIFIER);700 ALWAYS_LOG(LOGIDENTIFIER); 702 701 703 702 setDelayCallbacks(true); … … 836 835 return; 837 836 838 INFO_LOG(LOGIDENTIFIER);837 ALWAYS_LOG(LOGIDENTIFIER); 839 838 840 839 setDelayCallbacks(true); … … 885 884 return; 886 885 887 INFO_LOG(LOGIDENTIFIER);886 ALWAYS_LOG(LOGIDENTIFIER); 888 887 889 888 setDelayCallbacks(true); … … 1113 1112 void MediaPlayerPrivateAVFoundationObjC::platformPlay() 1114 1113 { 1115 INFO_LOG(LOGIDENTIFIER);1116 1114 if (!metaDataAvailable()) 1117 1115 return; 1116 1117 ALWAYS_LOG(LOGIDENTIFIER); 1118 1118 1119 1119 m_requestedPlaying = true; … … 1123 1123 void MediaPlayerPrivateAVFoundationObjC::platformPause() 1124 1124 { 1125 INFO_LOG(LOGIDENTIFIER);1126 1125 if (!metaDataAvailable()) 1127 1126 return; 1127 1128 ALWAYS_LOG(LOGIDENTIFIER); 1128 1129 1129 1130 m_requestedPlaying = false; … … 1216 1217 return; 1217 1218 1219 ALWAYS_LOG(LOGIDENTIFIER, volume); 1220 1218 1221 [m_avPlayer.get() setVolume:volume]; 1219 1222 #endif … … 1225 1228 return; 1226 1229 1227 INFO_LOG(LOGIDENTIFIER, muted);1230 ALWAYS_LOG(LOGIDENTIFIER, muted); 1228 1231 1229 1232 m_muted = muted; … … 1242 1245 return; 1243 1246 1244 INFO_LOG(LOGIDENTIFIER, closedCaptionsVisible);1247 ALWAYS_LOG(LOGIDENTIFIER, closedCaptionsVisible); 1245 1248 } 1246 1249 … … 2860 2863 } 2861 2864 2862 void MediaPlayerPrivateAVFoundationObjC::set ShouldBufferData(bool shouldBuffer)2863 { 2864 INFO_LOG(LOGIDENTIFIER, shouldBuffer);2865 2866 if (m_ shouldBufferData == shouldBuffer)2867 return; 2868 2869 m_ shouldBufferData = shouldBuffer;2865 void MediaPlayerPrivateAVFoundationObjC::setBufferingPolicy(MediaPlayer::BufferingPolicy policy) 2866 { 2867 ALWAYS_LOG(LOGIDENTIFIER, policy); 2868 2869 if (m_bufferingPolicy == policy) 2870 return; 2871 2872 m_bufferingPolicy = policy; 2870 2873 2871 2874 if (!m_avPlayer) 2872 2875 return; 2873 2876 2874 setAVPlayerItem(shouldBuffer ? m_avPlayerItem.get() : nil); 2877 #if HAVE(AVPLAYER_RESOURCE_CONSERVATION_LEVEL) 2878 static_assert(static_cast<size_t>(MediaPlayer::BufferingPolicy::Default) == AVPlayerResourceConservationLevelNone, "MediaPlayer::BufferingPolicy::Default is not AVPlayerResourceConservationLevelNone as expected"); 2879 static_assert(static_cast<size_t>(MediaPlayer::BufferingPolicy::LimitReadAhead) == AVPlayerResourceConservationLevelReduceReadAhead, "MediaPlayer::BufferingPolicy::LimitReadAhead is not AVPlayerResourceConservationLevelReduceReadAhead as expected"); 2880 static_assert(static_cast<size_t>(MediaPlayer::BufferingPolicy::MakeResourcesPurgeable) == AVPlayerResourceConservationLevelReuseActivePlayerResources, "MediaPlayer::BufferingPolicy::MakeResourcesPurgeable is not AVPlayerResourceConservationLevelReuseActivePlayerResources as expected"); 2881 static_assert(static_cast<size_t>(MediaPlayer::BufferingPolicy::PurgeResources) == AVPlayerResourceConservationLevelRecycleBuffer, "MediaPlayer::BufferingPolicy::PurgeResources is not AVPlayerResourceConservationLevelRecycleBuffer as expected"); 2882 2883 if ([m_avPlayer respondsToSelector:@selector(setResourceConservationLevelWhilePaused:)]) { 2884 m_avPlayer.get().resourceConservationLevelWhilePaused = static_cast<AVPlayerResourceConservationLevel>(policy); 2885 updateStates(); 2886 return; 2887 } 2888 #endif 2889 2890 switch (policy) { 2891 case MediaPlayer::BufferingPolicy::Default: 2892 setAVPlayerItem(m_avPlayerItem.get()); 2893 break; 2894 case MediaPlayer::BufferingPolicy::LimitReadAhead: 2895 case MediaPlayer::BufferingPolicy::MakeResourcesPurgeable: 2896 setAVPlayerItem(nil); 2897 break; 2898 case MediaPlayer::BufferingPolicy::PurgeResources: 2899 setAVPlayerItem(nil); 2900 setAVPlayerItem(m_avPlayerItem.get()); 2901 break; 2902 } 2903 2875 2904 updateStates(); 2876 2905 } -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h
r239319 r245039 155 155 void enqueueVideoSample(MediaStreamTrackPrivate&, MediaSample&); 156 156 void enqueueCorrectedVideoSample(MediaSample&); 157 void flushAndRemoveVideoSampleBuffers();158 157 void requestNotificationWhenReadyForVideoData(); 159 158 … … 175 174 bool ended() const override { return m_ended; } 176 175 177 void set ShouldBufferData(bool) override;176 void setBufferingPolicy(MediaPlayer::BufferingPolicy) override; 178 177 179 178 MediaPlayer::ReadyState currentReadyState(); -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm
r244922 r245039 458 458 } 459 459 460 void MediaPlayerPrivateMediaStreamAVFObjC::flushAndRemoveVideoSampleBuffers()461 {462 [m_sampleBufferDisplayLayer flushAndRemoveImage];463 }464 465 460 void MediaPlayerPrivateMediaStreamAVFObjC::ensureLayers() 466 461 { … … 1150 1145 } 1151 1146 1152 void MediaPlayerPrivateMediaStreamAVFObjC::set ShouldBufferData(bool shouldBuffer)1153 { 1154 if ( !shouldBuffer)1155 flushAndRemoveVideoSampleBuffers();1147 void MediaPlayerPrivateMediaStreamAVFObjC::setBufferingPolicy(MediaPlayer::BufferingPolicy policy) 1148 { 1149 if (policy != MediaPlayer::BufferingPolicy::Default) 1150 [m_sampleBufferDisplayLayer flushAndRemoveImage]; 1156 1151 } 1157 1152 -
trunk/Source/WebCore/testing/Internals.cpp
r245025 r245039 3502 3502 bool Internals::elementShouldBufferData(HTMLMediaElement& element) 3503 3503 { 3504 return element.shouldBufferData(); 3505 } 3506 3504 return element.bufferingPolicy() < MediaPlayer::BufferingPolicy::LimitReadAhead; 3505 } 3506 3507 String Internals::elementBufferingPolicy(HTMLMediaElement& element) 3508 { 3509 switch (element.bufferingPolicy()) { 3510 case MediaPlayer::BufferingPolicy::Default: 3511 return "Default"; 3512 case MediaPlayer::BufferingPolicy::LimitReadAhead: 3513 return "LimitReadAhead"; 3514 case MediaPlayer::BufferingPolicy::MakeResourcesPurgeable: 3515 return "MakeResourcesPurgeable"; 3516 case MediaPlayer::BufferingPolicy::PurgeResources: 3517 return "PurgeResources"; 3518 } 3519 3520 ASSERT_NOT_REACHED(); 3521 return "UNKNOWN"; 3522 } 3507 3523 #endif 3508 3524 -
trunk/Source/WebCore/testing/Internals.h
r245025 r245039 541 541 542 542 bool elementShouldBufferData(HTMLMediaElement&); 543 String elementBufferingPolicy(HTMLMediaElement&); 543 544 #endif 544 545 -
trunk/Source/WebCore/testing/Internals.idl
r245025 r245039 529 529 530 530 [Conditional=VIDEO] boolean elementShouldBufferData(HTMLMediaElement media); 531 [Conditional=VIDEO] DOMString elementBufferingPolicy(HTMLMediaElement media); 531 532 532 533 [Conditional=LEGACY_ENCRYPTED_MEDIA] void initializeMockCDM(); -
trunk/Tools/ChangeLog
r245038 r245039 1 2019-05-07 Eric Carlson <eric.carlson@apple.com> 2 3 Define media buffering policy 4 https://bugs.webkit.org/show_bug.cgi?id=196979 5 <rdar://problem/28383861> 6 7 Reviewed by Jer Noble. 8 9 * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: 10 * TestWebKitAPI/Tests/WebKitCocoa/MediaBufferingPolicy.mm: Added. 11 (waitUntilBufferingPolicyIsEqualTo): 12 (TEST): 13 1 14 2019-05-07 Alex Christensen <achristensen@webkit.org> 2 15 -
trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
r244955 r245039 33 33 0799C34B1EBA3301003B7532 /* disableGetUserMedia.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 0799C34A1EBA32F4003B7532 /* disableGetUserMedia.html */; }; 34 34 07C046CA1E4262A8007201E7 /* CARingBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07C046C91E42573E007201E7 /* CARingBuffer.cpp */; }; 35 07CC7DFE2266330900E39181 /* MediaBufferingPolicy.mm in Sources */ = {isa = PBXBuildFile; fileRef = 07CC7DFD2266330800E39181 /* MediaBufferingPolicy.mm */; }; 35 36 07CD32F62065B5430064A4BE /* AVFoundationPreference.mm in Sources */ = {isa = PBXBuildFile; fileRef = 07CD32F52065B5420064A4BE /* AVFoundationPreference.mm */; }; 36 37 07CE1CF31F06A7E000BF89F5 /* GetUserMediaNavigation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 07CE1CF21F06A7E000BF89F5 /* GetUserMediaNavigation.mm */; }; … … 1350 1351 0799C34A1EBA32F4003B7532 /* disableGetUserMedia.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = disableGetUserMedia.html; sourceTree = "<group>"; }; 1351 1352 07C046C91E42573E007201E7 /* CARingBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CARingBuffer.cpp; sourceTree = "<group>"; }; 1353 07CC7DFD2266330800E39181 /* MediaBufferingPolicy.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MediaBufferingPolicy.mm; sourceTree = "<group>"; }; 1352 1354 07CD32F52065B5420064A4BE /* AVFoundationPreference.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AVFoundationPreference.mm; sourceTree = "<group>"; }; 1353 1355 07CD32F72065B72A0064A4BE /* video.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = video.html; sourceTree = "<group>"; }; … … 2624 2626 8C10AF96206467770018FD90 /* LocalStoragePersistence.mm */, 2625 2627 7A6A2C6F1DCCF87B00C0D085 /* LocalStorageQuirkTest.mm */, 2628 07CC7DFD2266330800E39181 /* MediaBufferingPolicy.mm */, 2626 2629 5165FE03201EE617009F7EC3 /* MessagePortProviders.mm */, 2627 2630 51CD1C6A1B38CE3600142CA5 /* ModalAlerts.mm */, … … 4237 4240 076E507F1F4513D6006E9F5A /* Logging.cpp in Sources */, 4238 4241 CE1866491F72E8F100A0CAB6 /* MarkedText.cpp in Sources */, 4242 07CC7DFE2266330900E39181 /* MediaBufferingPolicy.mm in Sources */, 4239 4243 CDA315981ED53651009F60D3 /* MediaPlaybackSleepAssertion.mm in Sources */, 4240 4244 CDC9442E1EF1FC080059C3C4 /* MediaStreamTrackDetached.mm in Sources */,
Note: See TracChangeset
for help on using the changeset viewer.