diff options
Diffstat (limited to 'Source/WebCore/html/track/InbandWebVTTTextTrack.cpp')
-rw-r--r-- | Source/WebCore/html/track/InbandWebVTTTextTrack.cpp | 64 |
1 files changed, 40 insertions, 24 deletions
diff --git a/Source/WebCore/html/track/InbandWebVTTTextTrack.cpp b/Source/WebCore/html/track/InbandWebVTTTextTrack.cpp index 7e03d41a6..d0fae4e9b 100644 --- a/Source/WebCore/html/track/InbandWebVTTTextTrack.cpp +++ b/Source/WebCore/html/track/InbandWebVTTTextTrack.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012 Apple Inc. All rights reserved. + * Copyright (C) 2012-2017 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -10,10 +10,10 @@ * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR @@ -24,60 +24,76 @@ */ #include "config.h" +#include "InbandWebVTTTextTrack.h" #if ENABLE(VIDEO_TRACK) -#include "InbandWebVTTTextTrack.h" - #include "InbandTextTrackPrivate.h" #include "Logging.h" +#include "VTTCue.h" +#include "VTTRegionList.h" #include <wtf/text/CString.h> namespace WebCore { -PassRefPtr<InbandTextTrack> InbandWebVTTTextTrack::create(ScriptExecutionContext* context, TextTrackClient* client, PassRefPtr<InbandTextTrackPrivate> playerPrivate) +inline InbandWebVTTTextTrack::InbandWebVTTTextTrack(ScriptExecutionContext& context, TextTrackClient& client, InbandTextTrackPrivate& trackPrivate) + : InbandTextTrack(context, client, trackPrivate) { - return adoptRef(new InbandWebVTTTextTrack(context, client, playerPrivate)); } -InbandWebVTTTextTrack::InbandWebVTTTextTrack(ScriptExecutionContext* context, TextTrackClient* client, PassRefPtr<InbandTextTrackPrivate> trackPrivate) - : InbandTextTrack(context, client, trackPrivate) +Ref<InbandTextTrack> InbandWebVTTTextTrack::create(ScriptExecutionContext& context, TextTrackClient& client, InbandTextTrackPrivate& trackPrivate) { + return adoptRef(*new InbandWebVTTTextTrack(context, client, trackPrivate)); } InbandWebVTTTextTrack::~InbandWebVTTTextTrack() { } -void InbandWebVTTTextTrack::parseWebVTTCueData(InbandTextTrackPrivate* trackPrivate, const char* data, unsigned length) +WebVTTParser& InbandWebVTTTextTrack::parser() { - ASSERT_UNUSED(trackPrivate, trackPrivate == m_private); if (!m_webVTTParser) - m_webVTTParser = WebVTTParser::create(this, scriptExecutionContext()); - m_webVTTParser->parseBytes(data, length); + m_webVTTParser = std::make_unique<WebVTTParser>(static_cast<WebVTTParserClient*>(this), scriptExecutionContext()); + return *m_webVTTParser; +} + +void InbandWebVTTTextTrack::parseWebVTTCueData(const char* data, unsigned length) +{ + parser().parseBytes(data, length); +} + +void InbandWebVTTTextTrack::parseWebVTTCueData(const ISOWebVTTCue& cueData) +{ + parser().parseCueData(cueData); } void InbandWebVTTTextTrack::newCuesParsed() { Vector<RefPtr<WebVTTCueData>> cues; - m_webVTTParser->getNewCues(cues); - for (size_t i = 0; i < cues.size(); ++i) { - RefPtr<WebVTTCueData> cueData = cues[i]; - RefPtr<TextTrackCue> cue = TextTrackCue::create(*scriptExecutionContext(), cueData->startTime(), cueData->endTime(), cueData->content()); - cue->setId(cueData->id()); - cue->setCueSettings(cueData->settings()); - - if (hasCue(cue.get(), TextTrackCue::IgnoreDuration)) { - LOG(Media, "InbandWebVTTTextTrack::newCuesParsed ignoring already added cue: start=%.2f, end=%.2f, content=\"%s\"\n", cueData->startTime(), cueData->endTime(), cueData->content().utf8().data()); + parser().getNewCues(cues); + for (auto& cueData : cues) { + auto vttCue = VTTCue::create(*scriptExecutionContext(), *cueData); + if (hasCue(vttCue.ptr(), TextTrackCue::IgnoreDuration)) { + LOG(Media, "InbandWebVTTTextTrack::newCuesParsed ignoring already added cue: start=%.2f, end=%.2f, content=\"%s\"\n", vttCue->startTime(), vttCue->endTime(), vttCue->text().utf8().data()); return; } - addCue(cue.release()); + addCue(WTFMove(vttCue)); + } +} + +void InbandWebVTTTextTrack::newRegionsParsed() +{ + Vector<RefPtr<VTTRegion>> newRegions; + parser().getNewRegions(newRegions); + for (auto& region : newRegions) { + region->setTrack(this); + regions()->add(region.releaseNonNull()); } } void InbandWebVTTTextTrack::fileFailedToParse() { - LOG(Media, "Unable to parse WebVTT stream."); + LOG(Media, "Error parsing WebVTT stream."); } } // namespace WebCore |