Changeset 171288 in webkit


Ignore:
Timestamp:
Jul 20, 2014 8:08:25 PM (10 years ago)
Author:
commit-queue@webkit.org
Message:

Disable ff/rw based on canPlayFastForward and canPlayFastRewind.
https://bugs.webkit.org/show_bug.cgi?id=134894

Patch by Jeremy Jones <jeremyj@apple.com> on 2014-07-20
Reviewed by Darin Adler.

Source/WebCore:

  • WebCore.exp.in: add symbol for canPlayFastReverse
  • html/HTMLMediaElement.cpp: Add two new accessors

(WebCore::HTMLMediaElement::nextScanRate): possibly limit scanRate
(WebCore::HTMLMediaElement::canPlayFastForward): added
(WebCore::HTMLMediaElement::canPlayFastReverse): added

  • html/HTMLMediaElement.h: declare two new methods
  • platform/graphics/MediaPlayer.cpp: Plumb through two new accessors

(WebCore::MediaPlayer::maxFastForwardRate): added
(WebCore::MediaPlayer::minFastReverseRate): added

  • platform/graphics/MediaPlayer.h: Declare new methods
  • platform/graphics/MediaPlayerPrivate.h: Added two new methods.

(WebCore::MediaPlayerPrivateInterface::maxFastForwardRate): added
(WebCore::MediaPlayerPrivateInterface::minFastReverseRate): added

  • platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: member to cache ff/rw enabled state
  • platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:

(WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): observe on item canPlayFastForward canPlayFastReverse
(WebCore::MediaPlayerPrivateAVFoundationObjC::canPlayFastForwardDidChange): added
(WebCore::MediaPlayerPrivateAVFoundationObjC::canPlayFastReverseDidChange): added
(WebCore::itemKVOProperties): observe canPlayFastForward canPlayFastRewind
(-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]): ditto

  • platform/ios/WebVideoFullscreenInterface.h: add new method
  • platform/ios/WebVideoFullscreenInterfaceAVKit.h: ditto
  • platform/ios/WebVideoFullscreenInterfaceAVKit.mm: ditto

(WebVideoFullscreenInterfaceAVKit::setCanPlayFastReverse): Set value on WebAVPlayerController.
(-[WebAVPlayerController canScanBackward]): Deleted.
(+[WebAVPlayerController keyPathsForValuesAffectingCanScanBackward]): Deleted.

  • platform/ios/WebVideoFullscreenModelMediaElement.mm:

(WebVideoFullscreenModelMediaElement::updateForEventName): update canPlayFastReverse.

Source/WebKit2:
Add setCanPlayFastReverse

  • UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in: ditto
  • WebProcess/ios/WebVideoFullscreenManager.h: ditto
  • WebProcess/ios/WebVideoFullscreenManager.mm: ditto

(WebKit::WebVideoFullscreenManager::setCanPlayFastReverse): ditto

Location:
trunk/Source
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r171287 r171288  
     12014-07-20  Jeremy Jones  <jeremyj@apple.com>
     2
     3        Disable ff/rw based on canPlayFastForward and canPlayFastRewind.
     4        https://bugs.webkit.org/show_bug.cgi?id=134894
     5
     6        Reviewed by Darin Adler.
     7
     8        * WebCore.exp.in: add symbol for canPlayFastReverse
     9        * html/HTMLMediaElement.cpp: Add two new accessors
     10        (WebCore::HTMLMediaElement::nextScanRate): possibly limit scanRate
     11        (WebCore::HTMLMediaElement::canPlayFastForward): added
     12        (WebCore::HTMLMediaElement::canPlayFastReverse): added
     13        * html/HTMLMediaElement.h: declare two new methods
     14        * platform/graphics/MediaPlayer.cpp: Plumb through two new accessors
     15        (WebCore::MediaPlayer::maxFastForwardRate): added
     16        (WebCore::MediaPlayer::minFastReverseRate): added
     17        * platform/graphics/MediaPlayer.h: Declare new methods
     18        * platform/graphics/MediaPlayerPrivate.h: Added two new methods.
     19        (WebCore::MediaPlayerPrivateInterface::maxFastForwardRate): added
     20        (WebCore::MediaPlayerPrivateInterface::minFastReverseRate): added
     21        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h: member to cache ff/rw enabled state
     22        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
     23        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): observe on item canPlayFastForward canPlayFastReverse
     24        (WebCore::MediaPlayerPrivateAVFoundationObjC::canPlayFastForwardDidChange): added
     25        (WebCore::MediaPlayerPrivateAVFoundationObjC::canPlayFastReverseDidChange): added
     26        (WebCore::itemKVOProperties): observe canPlayFastForward canPlayFastRewind
     27        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]): ditto
     28        * platform/ios/WebVideoFullscreenInterface.h: add new method
     29        * platform/ios/WebVideoFullscreenInterfaceAVKit.h: ditto
     30        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm: ditto
     31        (WebVideoFullscreenInterfaceAVKit::setCanPlayFastReverse): Set value on WebAVPlayerController.
     32        (-[WebAVPlayerController canScanBackward]): Deleted.
     33        (+[WebAVPlayerController keyPathsForValuesAffectingCanScanBackward]): Deleted.
     34        * platform/ios/WebVideoFullscreenModelMediaElement.mm:
     35        (WebVideoFullscreenModelMediaElement::updateForEventName): update canPlayFastReverse.
     36
    1372014-07-18  Gavin Barraclough  <baraclough@apple.com>
    238
  • trunk/Source/WebCore/WebCore.exp.in

    r171252 r171288  
    34463446__ZN7WebCore32WebVideoFullscreenInterfaceAVKit18setVideoDimensionsEbff
    34473447__ZN7WebCore32WebVideoFullscreenInterfaceAVKit19setExternalPlaybackEbNS_27WebVideoFullscreenInterface26ExternalPlaybackTargetTypeEN3WTF6StringE
     3448__ZN7WebCore32WebVideoFullscreenInterfaceAVKit21setCanPlayFastReverseEb
    34483449__ZN7WebCore32WebVideoFullscreenInterfaceAVKit26setWebVideoFullscreenModelEPNS_23WebVideoFullscreenModelE
    34493450__ZN7WebCore32WebVideoFullscreenInterfaceAVKit28requestHideAndExitFullscreenEv
  • trunk/Source/WebCore/html/HTMLMediaElement.cpp

    r171287 r171288  
    31043104    if (m_scanDirection == Backward)
    31053105        rate *= -1;
     3106#if PLATFORM(IOS)
     3107    rate = std::min(std::max(rate, minFastReverseRate()), maxFastForwardRate());
     3108#endif
    31063109    return rate;
    31073110}
     
    48574860#endif
    48584861
     4862double HTMLMediaElement::minFastReverseRate() const
     4863{
     4864    return m_player ? m_player->minFastReverseRate() : 0;
     4865}
     4866
     4867double HTMLMediaElement::maxFastForwardRate() const
     4868{
     4869    return m_player ? m_player->maxFastForwardRate() : 0;
     4870}
     4871   
    48594872bool HTMLMediaElement::isFullscreen() const
    48604873{
  • trunk/Source/WebCore/html/HTMLMediaElement.h

    r171081 r171288  
    189189    virtual void setShouldBufferData(bool) override;
    190190    void fastSeek(double);
     191    double minFastReverseRate() const;
     192    double maxFastForwardRate() const;
    191193
    192194// captions
  • trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp

    r169596 r171288  
    894894#endif
    895895
     896double MediaPlayer::maxFastForwardRate() const
     897{
     898    return m_private->maxFastForwardRate();
     899}
     900
     901double MediaPlayer::minFastReverseRate() const
     902{
     903    return m_private->minFastReverseRate();
     904}
     905
    896906#if USE(NATIVE_FULLSCREEN_VIDEO)
    897907bool MediaPlayer::canEnterFullscreen() const
  • trunk/Source/WebCore/platform/graphics/MediaPlayer.h

    r169596 r171288  
    481481#endif
    482482
     483    double minFastReverseRate() const;
     484    double maxFastForwardRate() const;
     485
    483486#if USE(NATIVE_FULLSCREEN_VIDEO)
    484487    bool canEnterFullscreen() const;
  • trunk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h

    r169568 r171288  
    117117    virtual void setClosedCaptionsVisible(bool) { }
    118118
     119    virtual double maxFastForwardRate() const { return std::numeric_limits<double>::infinity(); }
     120    virtual double minFastReverseRate() const { return -std::numeric_limits<double>::infinity(); }
     121
    119122    virtual MediaPlayer::NetworkState networkState() const = 0;
    120123    virtual MediaPlayer::ReadyState readyState() const = 0;
  • trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h

    r171286 r171288  
    109109    void firstFrameAvailableDidChange(bool);
    110110    void trackEnabledDidChange(bool);
     111    void canPlayFastReverseDidChange(bool);
     112    void canPlayFastForwardDidChange(bool);
    111113
    112114    virtual void setShouldBufferData(bool);
     
    265267    void updateDisableExternalPlayback();
    266268#endif
     269
     270    virtual double maxFastForwardRate() const override { return m_cachedCanPlayFastForward ? std::numeric_limits<double>::infinity() : 2.0; }
     271    virtual double minFastReverseRate() const override { return m_cachedCanPlayFastReverse ? -std::numeric_limits<double>::infinity() : 0.0; }
    267272
    268273    WeakPtrFactory<MediaPlayerPrivateAVFoundationObjC> m_weakPtrFactory;
     
    337342    bool m_cachedIsReadyForDisplay;
    338343    bool m_haveBeenAskedToCreateLayer;
     344    bool m_cachedCanPlayFastForward;
     345    bool m_cachedCanPlayFastReverse;
    339346#if ENABLE(IOS_AIRPLAY)
    340347    mutable bool m_allowsWirelessVideoPlayback;
  • trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm

    r171286 r171288  
    25732573#endif
    25742574
     2575void MediaPlayerPrivateAVFoundationObjC::canPlayFastForwardDidChange(bool newValue)
     2576{
     2577    m_cachedCanPlayFastForward = newValue;
     2578}
     2579
     2580void MediaPlayerPrivateAVFoundationObjC::canPlayFastReverseDidChange(bool newValue)
     2581{
     2582    m_cachedCanPlayFastReverse = newValue;
     2583}
     2584
    25752585NSArray* assetMetadataKeyNames()
    25762586{
     
    26062616                @"hasEnabledAudio",
    26072617                @"timedMetadata",
     2618                @"canPlayFastForward",
     2619                @"canPlayFastReverse",
    26082620                nil];
    26092621    }
     
    27152727                now = std::max(narrowPrecisionToFloat(CMTimeGetSeconds(itemTime)), 0.0f);
    27162728            function = WTF::bind(&MediaPlayerPrivateAVFoundationObjC::metadataDidArrive, m_callback, RetainPtr<NSArray>(newValue), now);
    2717         }
     2729        } else if ([keyPath isEqualToString:@"canPlayFastReverse"])
     2730            function = WTF::bind(&MediaPlayerPrivateAVFoundationObjC::canPlayFastReverseDidChange, m_callback, [newValue boolValue]);
     2731        else if ([keyPath isEqualToString:@"canPlayFastForward"])
     2732            function = WTF::bind(&MediaPlayerPrivateAVFoundationObjC::canPlayFastForwardDidChange, m_callback, [newValue boolValue]);
    27182733    }
    27192734
  • trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterface.h

    r169545 r171288  
    5050    virtual void setVideoDimensions(bool hasVideo, float width, float height) = 0;
    5151    virtual void setSeekableRanges(const TimeRanges&) = 0;
     52    virtual void setCanPlayFastReverse(bool) = 0;
    5253    virtual void setAudioMediaSelectionOptions(const Vector<String>& options, uint64_t selectedIndex) = 0;
    5354    virtual void setLegibleMediaSelectionOptions(const Vector<String>& options, uint64_t selectedIndex) = 0;
  • trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.h

    r170083 r171288  
    8484    virtual void setVideoDimensions(bool hasVideo, float width, float height) override;
    8585    virtual void setSeekableRanges(const TimeRanges&) override;
     86    virtual void setCanPlayFastReverse(bool) override;
    8687    virtual void setAudioMediaSelectionOptions(const Vector<String>& options, uint64_t selectedIndex) override;
    8788    virtual void setLegibleMediaSelectionOptions(const Vector<String>& options, uint64_t selectedIndex) override;
  • trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm

    r171286 r171288  
    9292
    9393@property (readonly) BOOL canScanForward;
    94 @property (readonly) BOOL canScanBackward;
     94@property BOOL canScanBackward;
    9595@property (readonly) BOOL canSeekToBeginning;
    9696@property (readonly) BOOL canSeekToEnd;
     
    302302}
    303303
    304 - (BOOL)canScanBackward
    305 {
    306     return [self canPlay];
    307 }
    308 
    309 + (NSSet *)keyPathsForValuesAffectingCanScanBackward
    310 {
    311     return [NSSet setWithObject:@"canPlay"];
    312 }
    313 
    314304- (void)beginScanningBackward:(id)sender
    315305{
     
    677667        protect.clear();
    678668    });
     669}
     670
     671void WebVideoFullscreenInterfaceAVKit::setCanPlayFastReverse(bool canPlayFastReverse)
     672{
     673    playerController().canScanBackward = canPlayFastReverse;
    679674}
    680675
  • trunk/Source/WebCore/platform/ios/WebVideoFullscreenModelMediaElement.mm

    r169545 r171288  
    107107
    108108    if (all
    109         || eventName == eventNames().durationchangeEvent)
     109        || eventName == eventNames().durationchangeEvent) {
    110110        m_videoFullscreenInterface->setDuration(m_mediaElement->duration());
     111        // These is no standard event for minFastReverseRateChange; duration change is a reasonable proxy for it.
     112        // It happens every time a new item becomes ready to play.
     113        m_videoFullscreenInterface->setCanPlayFastReverse(m_mediaElement->minFastReverseRate() < 0.0);
     114    }
    111115
    112116    if (all
  • trunk/Source/WebKit2/ChangeLog

    r171286 r171288  
     12014-07-20  Jeremy Jones  <jeremyj@apple.com>
     2
     3        Disable ff/rw based on canPlayFastForward and canPlayFastRewind.
     4        https://bugs.webkit.org/show_bug.cgi?id=134894
     5
     6        Reviewed by Darin Adler.
     7
     8        Add setCanPlayFastReverse
     9
     10        * UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in: ditto
     11        * WebProcess/ios/WebVideoFullscreenManager.h: ditto
     12        * WebProcess/ios/WebVideoFullscreenManager.mm: ditto
     13        (WebKit::WebVideoFullscreenManager::setCanPlayFastReverse): ditto
     14
    1152014-07-20  Jeremy Jones  <jeremyj@apple.com>
    216
  • trunk/Source/WebKit2/UIProcess/ios/WebVideoFullscreenManagerProxy.messages.in

    r170083 r171288  
    2626    SetVideoDimensions(bool hasVideo, unsigned width, unsigned height)
    2727    SetSeekableRangesVector(Vector<std::pair<double, double>> ranges);
     28    SetCanPlayFastReverse(bool value);
    2829    SetAudioMediaSelectionOptions(Vector<String> options, uint64_t selectedIndex);
    2930    SetLegibleMediaSelectionOptions(Vector<String> options, uint64_t selectedIndex);
  • trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.h

    r170083 r171288  
    7272    virtual void setVideoDimensions(bool hasVideo, float width, float height) override;
    7373    virtual void setSeekableRanges(const WebCore::TimeRanges&) override;
     74    virtual void setCanPlayFastReverse(bool value) override;
     75
    7476    virtual void setAudioMediaSelectionOptions(const Vector<String>& options, uint64_t selectedIndex) override;
    7577    virtual void setLegibleMediaSelectionOptions(const Vector<String>& options, uint64_t selectedIndex) override;
  • trunk/Source/WebKit2/WebProcess/ios/WebVideoFullscreenManager.mm

    r171286 r171288  
    147147}
    148148
     149void WebVideoFullscreenManager::setCanPlayFastReverse(bool value)
     150{
     151    m_page->send(Messages::WebVideoFullscreenManagerProxy::SetCanPlayFastReverse(value), m_page->pageID());
     152}
     153
    149154void WebVideoFullscreenManager::setAudioMediaSelectionOptions(const Vector<String>& options, uint64_t selectedIndex)
    150155{
Note: See TracChangeset for help on using the changeset viewer.