зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1155089 - Part 1: Reset |TrackID| for MediaPipelineTransmit::PipelineListener on replaceTrack(). r=bwc
--HG-- extra : rebase_source : 3ce3979f4b61ef204b468c244f03839b5c1bd3ed
This commit is contained in:
Родитель
0fb2aa4bf1
Коммит
d1d704fa84
|
@ -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() {}
|
||||
|
|
Загрузка…
Ссылка в новой задаче