Changeset 196131 in webkit


Ignore:
Timestamp:
Feb 4, 2016 10:20:21 AM (8 years ago)
Author:
eric.carlson@apple.com
Message:

Don't discard in-band cues with negative start times
https://bugs.webkit.org/show_bug.cgi?id=153867
<rdar://problem/19588632>

Reviewed by Jer Noble.

Source/WebCore:

No new tests, updated and un-skipped http/tests/media/track-in-band-hls-metadata.html.

  • platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.cpp:

(WebCore::InbandMetadataTextTrackPrivateAVF::addDataCue): ASSERT if passed negative time value.
(WebCore::InbandMetadataTextTrackPrivateAVF::updatePendingCueEndTimes): Ditto. Correct logging.

  • platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:

(WebCore::MediaPlayerPrivateAVFoundationObjC::processCue): ASSERT if passed negative time value.
(WebCore::MediaPlayerPrivateAVFoundationObjC::metadataDidArrive): Convert negative cue times to zero.
(-[WebCoreAVFMovieObserver legibleOutput:didOutputAttributedStrings:nativeSampleBuffers:forItemTime:]):

Ditto.

LayoutTests:

  • http/tests/media/track-in-band-hls-metadata-expected.txt:
  • http/tests/media/track-in-band-hls-metadata.html: Test more attributes for correctness, fail test immediately if cue.value is undefined so the test doesn't generate an exception and exit without any results.
  • platform/mac/TestExpectations: Unskip test.
Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r196130 r196131  
     12016-02-04  Eric Carlson  <eric.carlson@apple.com>
     2
     3        Don't discard in-band cues with negative start times
     4        https://bugs.webkit.org/show_bug.cgi?id=153867
     5        <rdar://problem/19588632>
     6
     7        Reviewed by Jer Noble.
     8
     9        * http/tests/media/track-in-band-hls-metadata-expected.txt:
     10        * http/tests/media/track-in-band-hls-metadata.html: Test more attributes for correctness,
     11          fail test immediately if cue.value is undefined so the test doesn't generate an exception
     12          and exit without any results.
     13        * platform/mac/TestExpectations: Unskip test.
     14
    1152016-02-04  Hyemi Shin  <hyemi.sin@samsung.com>
    216
  • trunk/LayoutTests/http/tests/media/track-in-band-hls-metadata-expected.txt

    r168377 r196131  
    2525** Validate cue data
    2626* 1
     27EXPECTED (typeof(cue) != 'undefined') OK
    2728EXPECTED (cue.type == 'org.id3') OK
    2829EXPECTED (cue.data == 'null') OK
     30EXPECTED (cue.value != 'null') OK
    2931EXPECTED (cue.value.key == '"TIT2"') OK
    3032EXPECTED (cue.value.data == '"Stream Counting"') OK
    3133
    3234* 2
     35EXPECTED (typeof(cue) != 'undefined') OK
    3336EXPECTED (cue.type == 'org.id3') OK
    3437EXPECTED (cue.data == 'null') OK
     38EXPECTED (cue.value != 'null') OK
    3539EXPECTED (cue.value.key == '"TPE1"') OK
    3640EXPECTED (cue.value.data == '"Andy"') OK
    3741
    3842* 3
     43EXPECTED (typeof(cue) != 'undefined') OK
    3944EXPECTED (cue.type == 'org.id3') OK
    4045EXPECTED (cue.data == 'null') OK
     46EXPECTED (cue.value != 'null') OK
    4147EXPECTED (cue.value.key == '"TALB"') OK
    4248EXPECTED (cue.value.data == '"Greatest Hits"') OK
    4349
    4450* 4
     51EXPECTED (typeof(cue) != 'undefined') OK
    4552EXPECTED (cue.type == 'org.id3') OK
    4653EXPECTED (cue.data == 'null') OK
     54EXPECTED (cue.value != 'null') OK
    4755EXPECTED (cue.value.key == '"GEOB"') OK
    4856EXPECTED (cue.value.data == '{}') OK
     
    5260
    5361* 5
     62EXPECTED (typeof(cue) != 'undefined') OK
    5463EXPECTED (cue.type == 'org.id3') OK
    5564EXPECTED (cue.data == 'null') OK
     65EXPECTED (cue.value != 'null') OK
    5666EXPECTED (cue.value.key == '"APIC"') OK
    5767EXPECTED (cue.value.data == '{}') OK
     
    5969
    6070* 6
     71EXPECTED (typeof(cue) != 'undefined') OK
    6172EXPECTED (cue.type == 'org.id3') OK
    6273EXPECTED (cue.data == 'null') OK
     74EXPECTED (cue.value != 'null') OK
    6375EXPECTED (cue.value.key == '"TXXX"') OK
    6476EXPECTED (cue.value.data == '"Text Blob"') OK
  • trunk/LayoutTests/http/tests/media/track-in-band-hls-metadata.html

    r168377 r196131  
    2020            ];
    2121            var imageSizes = [ [76, 103], [100, 100] ];
     22            var cue;
    2223       
    2324            function addtrack(event)
     
    5758            function compareCues(observed, expected)
    5859            {
    59                 // Make a mutable copy of the cue so we can remove attributes as they are processed.
     60                // Make a mutable copy of observed so we can remove attributes as they are processed.
    6061                observed = JSON.parse(JSON.stringify(observed));
    6162                for (property in expected) {
     
    6667                    observedValue = JSON.stringify(observedValue);
    6768                    expectedValue = JSON.stringify(expectedValue);
    68                     reportExpected(observedValue == expectedValue, "cue.value." + property, "==", expectedValue, observedValue);
     69                    reportExpected(observedValue == expectedValue, `cue.value.${property}`, "==", expectedValue, observedValue);
    6970                    delete observed[property];
    7071                }
     
    7374                    observedName = property;
    7475                    observedValue = observed[property];
    75                     logResult(Failed, "Error: unexpected cue property <em>cue.value." + observedName + "</em> = <em>'" + observedValue + "'</em> ");
     76                    logResult(Failed, `Error: unexpected cue property <em>cue.value. ${observedName}</em> = <em>' ${observedValue}'</em>`);
    7677                }
    7778            }
     
    8889
    8990                for (var i = 0; i < 6; i++) {
    90                     consoleWrite("<em>* " + (i + 1) + "</em>");
     91                    consoleWrite(`<em>* ${i + 1}</em>`);
    9192                    cue = track.cues[i];
     93
     94                    testExpected("typeof(cue)", undefined, "!=");
    9295                    testExpected("cue.type", "org.id3");
    9396                    testExpected("cue.data", null);
     97                    testExpected("cue.value", null, "!=");
     98                    if (typeof(cue.value) == undefined) {
     99                        failTest(`Error: cue.value is undefined!`);
     100                        return;
     101                    }
     102
    94103                    compareCues(cue.value, cueData[i]);
    95104                    consoleWrite("");
     
    115124
    116125                consoleWrite("");
    117                 waitForEvent("canplaythrough", canplaythrough);
     126                waitForEventOnce("canplaythrough", canplaythrough);
    118127                waitForEvent('addtrack', addtrack, false, false, video.textTracks);
    119128            }
  • trunk/LayoutTests/platform/mac/TestExpectations

    r196099 r196131  
    907907webkit.org/b/123099 media/media-controller-time-clamp.html [ Pass Timeout ]
    908908webkit.org/b/123522 media/track/track-in-band-legacy-api.html [ Pass Failure Crash ]
    909 webkit.org/b/128312 media/video-load-preload-metadata.html [ Pass Failure ]
    910909webkit.org/b/130490 media/video-remote-control-playpause.html [ Pass Failure ]
    911910webkit.org/b/130971 media/track/track-remove-track.html [ Pass Crash Failure Timeout ]
  • trunk/Source/WebCore/ChangeLog

    r196130 r196131  
     12016-02-04  Eric Carlson  <eric.carlson@apple.com>
     2
     3        Don't discard in-band cues with negative start times
     4        https://bugs.webkit.org/show_bug.cgi?id=153867
     5        <rdar://problem/19588632>
     6
     7        Reviewed by Jer Noble.
     8
     9        No new tests, updated and un-skipped http/tests/media/track-in-band-hls-metadata.html.
     10
     11        * platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.cpp:
     12        (WebCore::InbandMetadataTextTrackPrivateAVF::addDataCue):  ASSERT if passed negative time value.
     13        (WebCore::InbandMetadataTextTrackPrivateAVF::updatePendingCueEndTimes): Ditto. Correct logging.
     14
     15        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
     16        (WebCore::MediaPlayerPrivateAVFoundationObjC::processCue): ASSERT if passed negative time value.
     17        (WebCore::MediaPlayerPrivateAVFoundationObjC::metadataDidArrive): Convert negative cue times to zero.
     18        (-[WebCoreAVFMovieObserver legibleOutput:didOutputAttributedStrings:nativeSampleBuffers:forItemTime:]):
     19          Ditto.
     20
    1212016-02-04  Hyemi Shin  <hyemi.sin@samsung.com>
    222
  • trunk/Source/WebCore/platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.cpp

    r183234 r196131  
    5858{
    5959    ASSERT(cueFormat() == Data);
     60    ASSERT(start >= MediaTime::zeroTime());
     61
    6062    if (!client())
    6163        return;
     
    7072void InbandMetadataTextTrackPrivateAVF::updatePendingCueEndTimes(const MediaTime& time)
    7173{
     74    ASSERT(time >= MediaTime::zeroTime());
     75
    7276    if (time >= m_currentCueStartTime) {
    7377        if (client()) {
    7478            for (auto& partialCue : m_incompleteCues) {
    75                 LOG(Media, "InbandMetadataTextTrackPrivateAVF::addDataCue(%p) - updating cue: start=%s, end=%s", this, toString(partialCue.startTime).utf8().data(), toString(time).utf8().data());
     79                LOG(Media, "InbandMetadataTextTrackPrivateAVF::updatePendingCueEndTimes(%p) - updating cue: start=%s, end=%s", this, toString(partialCue.startTime).utf8().data(), toString(time).utf8().data());
    7680                client()->updateDataCue(this, partialCue.startTime, time, partialCue.cueData);
    7781            }
    7882        }
    7983    } else
    80         LOG(Media, "InbandMetadataTextTrackPrivateAVF::addDataCue negative length cue(s) ignored: start=%s, end=%s\n", toString(m_currentCueStartTime).utf8().data(), toString(time).utf8().data());
     84        LOG(Media, "InbandMetadataTextTrackPrivateAVF::updatePendingCueEndTimes negative length cue(s) ignored: start=%s, end=%s\n", toString(m_currentCueStartTime).utf8().data(), toString(time).utf8().data());
    8185
    8286    m_incompleteCues.resize(0);
  • trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm

    r196010 r196131  
    28622862void MediaPlayerPrivateAVFoundationObjC::processCue(NSArray *attributedStrings, NSArray *nativeSamples, const MediaTime& time)
    28632863{
     2864    ASSERT(time >= MediaTime::zeroTime());
     2865
    28642866    if (!m_currentTextTrack)
    28652867        return;
     
    32403242    MediaTime earliestStartTime = MediaTime::positiveInfiniteTime();
    32413243    for (AVMetadataItemType *item in m_currentMetaData.get()) {
    3242         MediaTime start = toMediaTime(item.time);
     3244        MediaTime start = std::max(toMediaTime(item.time), MediaTime::zeroTime());
    32433245        if (start < earliestStartTime)
    32443246            earliestStartTime = start;
     
    32473249
    32483250    for (AVMetadataItemType *item in m_currentMetaData.get()) {
    3249         MediaTime start = toMediaTime(item.time);
     3251        MediaTime start = std::max(toMediaTime(item.time), MediaTime::zeroTime());
    32503252        MediaTime end = MediaTime::positiveInfiniteTime();
    32513253        if (CMTIME_IS_VALID(item.duration))
     
    35613563        if (!callback)
    35623564            return;
    3563         callback->processCue(strongStrings.get(), strongSamples.get(), toMediaTime(itemTime));
     3565        MediaTime time = std::max(toMediaTime(itemTime), MediaTime::zeroTime());
     3566        callback->processCue(strongStrings.get(), strongSamples.get(), time);
    35643567    });
    35653568}
Note: See TracChangeset for help on using the changeset viewer.