1/*
2 * Copyright (C) 2012-2017 Apple Inc. All rights reserved.
3 * Copyright (C) 2013 Cable Television Labs, Inc. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
16 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
19 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#pragma once
29
30#if ENABLE(VIDEO_TRACK)
31
32#include <wtf/LoggerHelper.h>
33#include <wtf/MediaTime.h>
34#include <wtf/ThreadSafeRefCounted.h>
35#include <wtf/text/AtomicString.h>
36
37namespace WebCore {
38
39class TrackPrivateBaseClient {
40public:
41 virtual ~TrackPrivateBaseClient() = default;
42 virtual void idChanged(const AtomicString&) = 0;
43 virtual void labelChanged(const AtomicString&) = 0;
44 virtual void languageChanged(const AtomicString&) = 0;
45 virtual void willRemove() = 0;
46};
47
48class TrackPrivateBase
49 : public ThreadSafeRefCounted<TrackPrivateBase, WTF::DestructionThread::Main>
50#if !RELEASE_LOG_DISABLED
51 , private LoggerHelper
52#endif
53{
54 WTF_MAKE_NONCOPYABLE(TrackPrivateBase);
55 WTF_MAKE_FAST_ALLOCATED;
56public:
57 virtual ~TrackPrivateBase() = default;
58
59 virtual TrackPrivateBaseClient* client() const = 0;
60
61 virtual AtomicString id() const { return emptyAtom(); }
62 virtual AtomicString label() const { return emptyAtom(); }
63 virtual AtomicString language() const { return emptyAtom(); }
64
65 virtual int trackIndex() const { return 0; }
66
67 virtual MediaTime startTimeVariance() const { return MediaTime::zeroTime(); }
68
69 void willBeRemoved()
70 {
71 if (auto* client = this->client())
72 client->willRemove();
73 }
74
75#if !RELEASE_LOG_DISABLED
76 void setLogger(const Logger&, const void*);
77 const Logger& logger() const final { ASSERT(m_logger); return *m_logger.get(); }
78 const void* logIdentifier() const final { return m_logIdentifier; }
79 WTFLogChannel& logChannel() const final;
80#endif
81
82protected:
83 TrackPrivateBase() = default;
84
85#if !RELEASE_LOG_DISABLED
86 RefPtr<const Logger> m_logger;
87 const void* m_logIdentifier;
88#endif
89};
90
91} // namespace WebCore
92
93#endif
94