Bug 1155089 - Part 1: Reset |TrackID| for MediaPipelineTransmit::PipelineListener on replaceTrack(). r=bwc

--HG--
extra : rebase_source : 3ce3979f4b61ef204b468c244f03839b5c1bd3ed
This commit is contained in:
Andreas Pehrson 2015-04-22 11:59:43 +08:00
Родитель 0fb2aa4bf1
Коммит d1d704fa84
3 изменённых файлов: 33 добавлений и 0 удалений

Просмотреть файл

@ -688,6 +688,8 @@ nsresult MediaPipelineTransmit::ReplaceTrack(DOMMediaStream *domstream,
}
domstream_ = domstream; // Detach clears it
stream_ = domstream->GetStream();
// Unsets the track id after RemoveListener() takes effect.
listener_->UnsetTrackId(stream_->GraphImpl());
track_id_ = track_id;
AttachToTrack(track_id);
return NS_OK;
@ -853,6 +855,24 @@ nsresult MediaPipeline::PipelineTransport::SendRtcpPacket_s(
out_len);
}
void MediaPipelineTransmit::PipelineListener::
UnsetTrackId(MediaStreamGraphImpl* graph) {
#ifndef USE_FAKE_MEDIA_STREAMS
class Message : public ControlMessage {
public:
Message(PipelineListener* listener) :
ControlMessage(nullptr), listener_(listener) {}
virtual void Run() override
{
listener_->UnsetTrackIdImpl();
}
nsRefPtr<PipelineListener> listener_;
};
graph->AppendMessage(new Message(this));
#else
UnsetTrackIdImpl();
#endif
}
// Called if we're attached with AddDirectListener()
void MediaPipelineTransmit::PipelineListener::
NotifyRealtimeData(MediaStreamGraph* graph, TrackID tid,

Просмотреть файл

@ -466,6 +466,12 @@ public:
}
}
// Dispatches setting the internal TrackID to TRACK_INVALID to the media
// graph thread to keep it in sync with other MediaStreamGraph operations
// like RemoveListener() and AddListener(). The TrackID will be updated on
// the next NewData() callback.
void UnsetTrackId(MediaStreamGraphImpl* graph);
void SetActive(bool active) { active_ = active; }
void SetEnabled(bool enabled) { enabled_ = enabled; }
TrackID trackid() {
@ -487,6 +493,11 @@ public:
const MediaSegment& media) override;
private:
void UnsetTrackIdImpl() {
MutexAutoLock lock(mMutex);
track_id_ = track_id_external_ = TRACK_INVALID;
}
void NewData(MediaStreamGraph* graph, TrackID tid,
StreamTime offset,
uint32_t events,

Просмотреть файл

@ -30,6 +30,7 @@ class nsIDOMWindow;
namespace mozilla {
class MediaStreamGraph;
class MediaStreamGraphImpl;
class MediaSegment;
};
@ -103,6 +104,7 @@ class Fake_MediaStream {
virtual Fake_SourceMediaStream *AsSourceStream() { return nullptr; }
virtual mozilla::MediaStreamGraphImpl *GraphImpl() { return nullptr; }
virtual nsresult Start() { return NS_OK; }
virtual nsresult Stop() { return NS_OK; }
virtual void StopStream() {}