VideoTrackList.cpp [plain text]
#include "config.h"
#if ENABLE(VIDEO)
#include "VideoTrackList.h"
#include "HTMLMediaElement.h"
#include "VideoTrack.h"
namespace WebCore {
VideoTrackList::VideoTrackList(WeakPtr<HTMLMediaElement> element, ScriptExecutionContext* context)
: TrackListBase(element, context)
{
}
VideoTrackList::~VideoTrackList() = default;
void VideoTrackList::append(Ref<VideoTrack>&& track)
{
size_t index = track->inbandTrackIndex();
size_t insertionIndex;
for (insertionIndex = 0; insertionIndex < m_inbandTracks.size(); ++insertionIndex) {
auto& otherTrack = downcast<VideoTrack>(*m_inbandTracks[insertionIndex]);
if (otherTrack.inbandTrackIndex() > index)
break;
}
m_inbandTracks.insert(insertionIndex, track.ptr());
ASSERT(!track->mediaElement() || track->mediaElement() == mediaElement());
track->setMediaElement(mediaElement());
scheduleAddTrackEvent(WTFMove(track));
}
VideoTrack* VideoTrackList::item(unsigned index) const
{
if (index < m_inbandTracks.size())
return downcast<VideoTrack>(m_inbandTracks[index].get());
return nullptr;
}
VideoTrack* VideoTrackList::getTrackById(const AtomString& id) const
{
for (auto& inbandTracks : m_inbandTracks) {
auto& track = downcast<VideoTrack>(*inbandTracks);
if (track.id() == id)
return &track;
}
return nullptr;
}
int VideoTrackList::selectedIndex() const
{
for (unsigned i = 0; i < length(); ++i) {
if (downcast<VideoTrack>(*m_inbandTracks[i]).selected())
return i;
}
return -1;
}
EventTargetInterface VideoTrackList::eventTargetInterface() const
{
return VideoTrackListEventTargetInterfaceType;
}
const char* VideoTrackList::activeDOMObjectName() const
{
return "VideoTrackList";
}
} #endif