#pragma once
#if ENABLE(VIDEO)
#include <wtf/LoggerHelper.h>
#include <wtf/WeakPtr.h>
#include <wtf/text/AtomString.h>
namespace WebCore {
class Element;
class HTMLMediaElement;
class SourceBuffer;
class TrackBase
: public RefCounted<TrackBase>
#if !RELEASE_LOG_DISABLED
, private LoggerHelper
#endif
{
public:
virtual ~TrackBase() = default;
enum Type { BaseTrack, TextTrack, AudioTrack, VideoTrack };
Type type() const { return m_type; }
virtual void setMediaElement(WeakPtr<HTMLMediaElement>);
WeakPtr<HTMLMediaElement> mediaElement() { return m_mediaElement; }
virtual Element* element();
virtual AtomString id() const { return m_id; }
virtual void setId(const AtomString& id) { m_id = id; }
AtomString label() const { return m_label; }
void setLabel(const AtomString& label) { m_label = label; }
AtomString validBCP47Language() const { return m_validBCP47Language; }
AtomString language() const { return m_language; }
virtual void setLanguage(const AtomString&);
virtual void clearClient() = 0;
virtual int uniqueId() const { return m_uniqueId; }
#if ENABLE(MEDIA_SOURCE)
SourceBuffer* sourceBuffer() const { return m_sourceBuffer; }
void setSourceBuffer(SourceBuffer* buffer) { m_sourceBuffer = buffer; }
#endif
virtual bool enabled() const = 0;
#if !RELEASE_LOG_DISABLED
virtual void setLogger(const Logger&, const void*);
const Logger& logger() const final { ASSERT(m_logger); return *m_logger.get(); }
const void* logIdentifier() const final { return m_logIdentifier; }
WTFLogChannel& logChannel() const final;
#endif
protected:
TrackBase(Type, const AtomString& id, const AtomString& label, const AtomString& language);
WeakPtr<HTMLMediaElement> m_mediaElement { nullptr };
#if ENABLE(MEDIA_SOURCE)
SourceBuffer* m_sourceBuffer { nullptr };
#endif
private:
Type m_type;
int m_uniqueId;
AtomString m_id;
AtomString m_label;
AtomString m_language;
AtomString m_validBCP47Language;
#if !RELEASE_LOG_DISABLED
RefPtr<const Logger> m_logger;
const void* m_logIdentifier { nullptr };
#endif
};
class MediaTrackBase : public TrackBase {
public:
const AtomString& kind() const { return m_kind; }
virtual void setKind(const AtomString&);
protected:
MediaTrackBase(Type, const AtomString& id, const AtomString& label, const AtomString& language);
void setKindInternal(const AtomString&);
private:
virtual bool isValidKind(const AtomString&) const = 0;
AtomString m_kind;
};
}
#endif