1/*
2 * Copyright (C) 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#pragma once
27
28#include "ISOBox.h"
29#include <wtf/MediaTime.h>
30#include <wtf/text/WTFString.h>
31
32namespace WebCore {
33
34// 4 bytes : 4CC : identifier = 'vttc'
35// 4 bytes : unsigned : length
36// N bytes : CueSourceIDBox : box : optional
37// N bytes : CueIDBox : box : optional
38// N bytes : CueTimeBox : box : optional
39// N bytes : CueSettingsBox : box : optional
40// N bytes : CuePayloadBox : box : required
41class ISOWebVTTCue : public ISOBox {
42public:
43 ISOWebVTTCue(const MediaTime& presentationTime, const MediaTime& duration);
44
45 static FourCC boxTypeName() { return "vttc"; }
46
47 const MediaTime& presentationTime() const { return m_presentationTime; }
48 const MediaTime& duration() const { return m_duration; }
49
50 const String& sourceID() const { return m_sourceID; }
51 const String& id() const { return m_identifier; }
52 const String& originalStartTime() const { return m_originalStartTime; }
53 const String& settings() const { return m_settings; }
54 const String& cueText() const { return m_cueText; }
55
56 String toJSONString() const;
57
58protected:
59 bool parse(JSC::DataView&, unsigned& offset) override;
60
61 MediaTime m_presentationTime;
62 MediaTime m_duration;
63
64 String m_sourceID;
65 String m_identifier;
66 String m_originalStartTime;
67 String m_settings;
68 String m_cueText;
69};
70
71} // namespace WebCore
72
73namespace WTF {
74
75template<typename Type>
76struct LogArgument;
77
78template <>
79struct LogArgument<WebCore::ISOWebVTTCue> {
80 static String toString(const WebCore::ISOWebVTTCue& cue)
81 {
82 return cue.toJSONString();
83 }
84};
85
86} // namespace WTF
87