1/* 2 * Copyright (C) 2012, 2014 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26#include "config.h" 27 28#if ENABLE(VIDEO_TRACK) 29 30#include "InbandWebVTTTextTrack.h" 31 32#include "InbandTextTrackPrivate.h" 33#include "Logging.h" 34#include "NotImplemented.h" 35#include <wtf/text/CString.h> 36 37#if ENABLE(WEBVTT_REGIONS) 38#include "VTTRegionList.h" 39#endif 40 41namespace WebCore { 42 43PassRefPtr<InbandTextTrack> InbandWebVTTTextTrack::create(ScriptExecutionContext* context, TextTrackClient* client, PassRefPtr<InbandTextTrackPrivate> playerPrivate) 44{ 45 return adoptRef(new InbandWebVTTTextTrack(context, client, playerPrivate)); 46} 47 48InbandWebVTTTextTrack::InbandWebVTTTextTrack(ScriptExecutionContext* context, TextTrackClient* client, PassRefPtr<InbandTextTrackPrivate> trackPrivate) 49 : InbandTextTrack(context, client, trackPrivate) 50{ 51} 52 53InbandWebVTTTextTrack::~InbandWebVTTTextTrack() 54{ 55} 56 57WebVTTParser& InbandWebVTTTextTrack::parser() 58{ 59 if (!m_webVTTParser) 60 m_webVTTParser = std::make_unique<WebVTTParser>(static_cast<WebVTTParserClient*>(this), scriptExecutionContext()); 61 return *m_webVTTParser; 62} 63 64void InbandWebVTTTextTrack::parseWebVTTCueData(InbandTextTrackPrivate* trackPrivate, const char* data, unsigned length) 65{ 66 ASSERT_UNUSED(trackPrivate, trackPrivate == m_private); 67 parser().parseBytes(data, length); 68} 69 70void InbandWebVTTTextTrack::parseWebVTTCueData(InbandTextTrackPrivate* trackPrivate, const ISOWebVTTCue& cueData) 71{ 72 ASSERT_UNUSED(trackPrivate, trackPrivate == m_private); 73 parser().parseCueData(cueData); 74} 75 76void InbandWebVTTTextTrack::newCuesParsed() 77{ 78 Vector<RefPtr<WebVTTCueData>> cues; 79 parser().getNewCues(cues); 80 81 for (auto& cueData : cues) { 82 RefPtr<VTTCue> vttCue = VTTCue::create(*scriptExecutionContext(), *cueData); 83 84 if (hasCue(vttCue.get(), TextTrackCue::IgnoreDuration)) { 85 LOG(Media, "InbandWebVTTTextTrack::newCuesParsed ignoring already added cue: start=%.2f, end=%.2f, content=\"%s\"\n", vttCue->startTime(), vttCue->endTime(), vttCue->text().utf8().data()); 86 return; 87 } 88 addCue(vttCue.release(), ASSERT_NO_EXCEPTION); 89 } 90} 91 92#if ENABLE(WEBVTT_REGIONS) 93void InbandWebVTTTextTrack::newRegionsParsed() 94{ 95 Vector<RefPtr<VTTRegion>> newRegions; 96 parser().getNewRegions(newRegions); 97 98 for (auto& region : newRegions) { 99 region->setTrack(this); 100 regions()->add(region); 101 } 102} 103#endif 104 105void InbandWebVTTTextTrack::fileFailedToParse() 106{ 107 LOG(Media, "Error parsing WebVTT stream."); 108} 109 110} // namespace WebCore 111 112#endif 113