15 #ifndef SHAKA_EMBEDDED_JS_MSE_TRACK_LIST_H_ 16 #define SHAKA_EMBEDDED_JS_MSE_TRACK_LIST_H_ 19 #include <unordered_map> 20 #include <unordered_set> 54 template <
typename JsTrack,
typename PubTrack>
58 : mutex_(
"TrackList"), player_(player) {
67 events::EventTarget::Trace(tracer);
68 std::unique_lock<Mutex> lock(mutex_);
69 for (
auto& pair : tracks_)
70 tracer->
Trace(&pair.second);
74 std::unique_lock<Mutex> lock(mutex_);
75 return tracks_.size();
79 std::unique_lock<Mutex> lock(mutex_);
80 if (i >= tracks_.size())
83 *track = tracks_[i].second;
90 player_->RemoveClient(
this);
96 std::unique_lock<Mutex> lock(mutex_);
97 for (
auto& pair : tracks_) {
98 if (pair.first == pub_track)
104 void AddTrack(std::shared_ptr<PubTrack> pub_track) {
105 std::unique_lock<Mutex> lock(mutex_);
106 tracks_.emplace_back(pub_track,
new JsTrack(pub_track));
107 ScheduleEvent<events::Event>(EventType::AddTrack);
111 std::unique_lock<Mutex> lock(mutex_);
112 for (
auto it = tracks_.begin(); it != tracks_.end(); it++) {
113 if (it->first == pub_track) {
115 ScheduleEvent<events::Event>(EventType::RemoveTrack);
122 mutable Mutex mutex_;
123 std::vector<std::pair<std::shared_ptr<PubTrack>,
Member<JsTrack>>> tracks_;
131 using TrackList::TrackList;
134 void OnAddAudioTrack(std::shared_ptr<media::MediaTrack> track)
override;
135 void OnRemoveAudioTrack(std::shared_ptr<media::MediaTrack> track)
override;
142 using TrackList::TrackList;
145 void OnAddVideoTrack(std::shared_ptr<media::MediaTrack> track)
override;
146 void OnRemoveVideoTrack(std::shared_ptr<media::MediaTrack> track)
override;
153 using TrackList::TrackList;
156 void OnAddTextTrack(std::shared_ptr<media::TextTrack> track)
override;
157 void OnRemoveTextTrack(std::shared_ptr<media::TextTrack> track)
override;
161 template <
typename T>
165 this->AddGenericProperty(
"length", &T::length);
166 this->AddIndexer(&T::GetIndex);
178 #endif // SHAKA_EMBEDDED_JS_MSE_TRACK_LIST_H_
RefPtr< JsTrack > GetTrack(std::shared_ptr< PubTrack > pub_track)
bool GetIndex(size_t i, RefPtr< JsTrack > *track) const
void Trace(const Traceable *ptr)
void RemoveTrack(std::shared_ptr< PubTrack > pub_track)
TrackList(media::MediaPlayer *player)
void Trace(memory::HeapTracer *tracer) const override
void AddTrack(std::shared_ptr< PubTrack > pub_track)
#define DECLARE_TYPE_INFO(type)