Changeset 267057 in webkit


Ignore:
Timestamp:
Sep 14, 2020 4:17:53 PM (4 years ago)
Author:
jer.noble@apple.com
Message:

[Cocoa,HDR] HLS streams with HDR variants will not select HDR.
https://bugs.webkit.org/show_bug.cgi?id=216203
<rdar://problem/67438626>

Reviewed by Darin Adler.

Source/WebCore:

Test: http/tests/media/hls/hls-hdr-switch.html

In r264710, we adopted a new API to set the preferred HDR mode for every AVPlayer created by an HTMLMediaElement. The
MediaPlayerPrivateAVFoundationObjC object will query its parent when it creates an AVPlayer, or the MediaPlayer will
tell the MediaPlayerPrivate... that the HDR mode changes if the AVPlayer is already created. However, in r264710, we
neglected to cache the new value of the preferred HDR mode, so subsequent queries will just return "Standard". This means
HDR mode will correctly be applied if it changes after the AVPlayer has been created, but not initially.

  • platform/graphics/MediaPlayer.cpp:

(WebCore::MediaPlayer::setPreferredDynamicRangeMode):

LayoutTests:

  • http/tests/media/hls/hls-hdr-switch-expected.txt: Added.
  • http/tests/media/hls/hls-hdr-switch.html: Added.
  • http/tests/media/resources/hls/green-bip.ts: Added.
  • http/tests/media/resources/hls/hdr.m3u8: Added.
  • http/tests/media/resources/hls/red-bip.ts: Added.
  • http/tests/media/resources/hls/test-live.php:
Location:
trunk
Files:
5 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r267055 r267057  
     12020-09-14  Jer Noble  <jer.noble@apple.com>
     2
     3        [Cocoa,HDR] HLS streams with HDR variants will not select HDR.
     4        https://bugs.webkit.org/show_bug.cgi?id=216203
     5        <rdar://problem/67438626>
     6
     7        Reviewed by Darin Adler.
     8
     9        * http/tests/media/hls/hls-hdr-switch-expected.txt: Added.
     10        * http/tests/media/hls/hls-hdr-switch.html: Added.
     11        * http/tests/media/resources/hls/green-bip.ts: Added.
     12        * http/tests/media/resources/hls/hdr.m3u8: Added.
     13        * http/tests/media/resources/hls/red-bip.ts: Added.
     14        * http/tests/media/resources/hls/test-live.php:
     15
    1162020-09-14  Hector Lopez  <hector_i_lopez@apple.com>
    217
  • trunk/LayoutTests/TestExpectations

    r267018 r267057  
    45564556webkit.org/b/215531 imported/w3c/web-platform-tests/css/css-backgrounds/background-size/vector/wide--contain--width.html [ ImageOnlyFailure ]
    45574557
     4558# Cocoa-only
     4559http/tests/media/hls/hls-hdr-switch.html [ Skip ]
  • trunk/LayoutTests/http/tests/media/resources/hls/test-live.php

    r167828 r267057  
    1111
    1212$chunkDuration = 6.0272;
     13if (array_key_exists("duration", $_GET))
     14    $chunkDuration = floatval($_GET["duration"]);
     15
    1316$chunkCount = 4;
     17if (array_key_exists("count", $_GET))
     18    $chunkCount = intval($_GET["count"]);
     19
     20$chunkURL = "test.ts";
     21if (array_key_exists("url", $_GET))
     22    $chunkURL = $_GET["url"];
    1423
    1524function println($string) { return print($string . PHP_EOL); }
     
    2332
    2433for ($i = 0; $i < $chunkCount; ++$i) {
    25         $time += 6;
     34        $time += $chunkDuration;
    2635        println("#EXT-X-PROGRAM-DATE-TIME:" . gmdate("c", $time));
    2736        println("#EXTINF:" . $chunkDuration . ",");
    28         println("test.ts");
     37        println($chunkURL);
    2938}
  • trunk/LayoutTests/platform/mac/TestExpectations

    r267033 r267057  
    22092209webkit.org/b/216492 imported/w3c/web-platform-tests/selection/extend-20.html [ Pass Timeout ]
    22102210webkit.org/b/216492 imported/w3c/web-platform-tests/selection/extend-00.html [ Pass Timeout ]
     2211
     2212# This test requires API only availble on BigSur and later
     2213[ BigSur+ ] http/tests/media/hls/hls-hdr-switch.html [ Pass ]
  • trunk/Source/WebCore/ChangeLog

    r267054 r267057  
     12020-09-14  Jer Noble  <jer.noble@apple.com>
     2
     3        [Cocoa,HDR] HLS streams with HDR variants will not select HDR.
     4        https://bugs.webkit.org/show_bug.cgi?id=216203
     5        <rdar://problem/67438626>
     6
     7        Reviewed by Darin Adler.
     8
     9        Test: http/tests/media/hls/hls-hdr-switch.html
     10
     11        In r264710, we adopted a new API to set the preferred HDR mode for every AVPlayer created by an HTMLMediaElement. The
     12        MediaPlayerPrivateAVFoundationObjC object will query its parent when it creates an AVPlayer, or the MediaPlayer will
     13        tell the MediaPlayerPrivate... that the HDR mode changes if the AVPlayer is already created. However, in r264710, we
     14        neglected to cache the new value of the preferred HDR mode, so subsequent queries will just return "Standard". This means
     15        HDR mode will correctly be applied if it changes after the AVPlayer has been created, but not initially.
     16
     17        * platform/graphics/MediaPlayer.cpp:
     18        (WebCore::MediaPlayer::setPreferredDynamicRangeMode):
     19
    1202020-09-14  Simon Fraser  <simon.fraser@apple.com>
    221
  • trunk/Source/WebCore/html/HTMLMediaElement.cpp

    r266844 r267057  
    65566556    m_player = MediaPlayer::create(*this);
    65576557    m_player->setBufferingPolicy(m_bufferingPolicy);
    6558     m_player->setPreferredDynamicRangeMode(preferredDynamicRangeMode(document().view()));
     6558    m_player->setPreferredDynamicRangeMode(m_overrideDynamicRangeMode.valueOr(preferredDynamicRangeMode(document().view())));
    65596559    m_player->setMuted(effectiveMuted());
    65606560    schedulePlaybackControlsManagerUpdate();
     
    69726972void HTMLMediaElement::setPreferredDynamicRangeMode(DynamicRangeMode mode)
    69736973{
     6974    if (m_player && !m_overrideDynamicRangeMode)
     6975        m_player->setPreferredDynamicRangeMode(mode);
     6976}
     6977
     6978void HTMLMediaElement::setOverridePreferredDynamicRangeMode(DynamicRangeMode mode)
     6979{
     6980    m_overrideDynamicRangeMode = mode;
    69746981    if (m_player)
    69756982        m_player->setPreferredDynamicRangeMode(mode);
  • trunk/Source/WebCore/html/HTMLMediaElement.h

    r266728 r267057  
    578578    String sourceApplicationIdentifier() const;
    579579
     580    WEBCORE_EXPORT void setOverridePreferredDynamicRangeMode(DynamicRangeMode);
    580581    void setPreferredDynamicRangeMode(DynamicRangeMode);
    581582
     
    11481149    WeakPtr<const MediaResourceLoader> m_lastMediaResourceLoaderForTesting;
    11491150
     1151    Optional<DynamicRangeMode> m_overrideDynamicRangeMode;
     1152
    11501153    friend class TrackDisplayUpdateScope;
    11511154
  • trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp

    r264710 r267057  
    16011601void MediaPlayer::setPreferredDynamicRangeMode(DynamicRangeMode mode)
    16021602{
     1603    m_preferredDynamicRangeMode = mode;
    16031604    m_private->setPreferredDynamicRangeMode(mode);
    16041605}
  • trunk/Source/WebCore/testing/Internals.cpp

    r266832 r267057  
    39323932    return "UNKNOWN";
    39333933}
     3934
     3935ExceptionOr<void> Internals::setOverridePreferredDynamicRangeMode(HTMLMediaElement& element, const String& modeString)
     3936{
     3937    DynamicRangeMode mode;
     3938    if (modeString == "None")
     3939        mode = DynamicRangeMode::None;
     3940    else if (modeString == "Standard")
     3941        mode = DynamicRangeMode::Standard;
     3942    else if (modeString == "HLG")
     3943        mode = DynamicRangeMode::HLG;
     3944    else if (modeString == "HDR10")
     3945        mode = DynamicRangeMode::HDR10;
     3946    else if (modeString == "DolbyVisionPQ")
     3947        mode = DynamicRangeMode::DolbyVisionPQ;
     3948    else
     3949        return Exception { SyntaxError };
     3950
     3951    element.setOverridePreferredDynamicRangeMode(mode);
     3952    return { };
     3953}
     3954
    39343955#endif
    39353956
  • trunk/Source/WebCore/testing/Internals.h

    r266832 r267057  
    624624    String elementBufferingPolicy(HTMLMediaElement&);
    625625    double privatePlayerVolume(const HTMLMediaElement&);
     626    ExceptionOr<void> setOverridePreferredDynamicRangeMode(HTMLMediaElement&, const String&);
    626627#endif
    627628
  • trunk/Source/WebCore/testing/Internals.idl

    r266832 r267057  
    661661    [Conditional=VIDEO] DOMString elementBufferingPolicy(HTMLMediaElement media);
    662662    [Conditional=VIDEO] double privatePlayerVolume(HTMLMediaElement media);
     663    [Conditional=VIDEO, MayThrowException] undefined setOverridePreferredDynamicRangeMode(HTMLMediaElement media, DOMString mode);
    663664
    664665    [MayThrowException] undefined setIsPlayingToBluetoothOverride(optional boolean? isPlaying = null);
Note: See TracChangeset for help on using the changeset viewer.