зеркало из 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
|
domstream_ = domstream; // Detach clears it
|
||||||
stream_ = domstream->GetStream();
|
stream_ = domstream->GetStream();
|
||||||
|
// Unsets the track id after RemoveListener() takes effect.
|
||||||
|
listener_->UnsetTrackId(stream_->GraphImpl());
|
||||||
track_id_ = track_id;
|
track_id_ = track_id;
|
||||||
AttachToTrack(track_id);
|
AttachToTrack(track_id);
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
@ -853,6 +855,24 @@ nsresult MediaPipeline::PipelineTransport::SendRtcpPacket_s(
|
||||||
out_len);
|
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()
|
// Called if we're attached with AddDirectListener()
|
||||||
void MediaPipelineTransmit::PipelineListener::
|
void MediaPipelineTransmit::PipelineListener::
|
||||||
NotifyRealtimeData(MediaStreamGraph* graph, TrackID tid,
|
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 SetActive(bool active) { active_ = active; }
|
||||||
void SetEnabled(bool enabled) { enabled_ = enabled; }
|
void SetEnabled(bool enabled) { enabled_ = enabled; }
|
||||||
TrackID trackid() {
|
TrackID trackid() {
|
||||||
|
@ -487,6 +493,11 @@ public:
|
||||||
const MediaSegment& media) override;
|
const MediaSegment& media) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void UnsetTrackIdImpl() {
|
||||||
|
MutexAutoLock lock(mMutex);
|
||||||
|
track_id_ = track_id_external_ = TRACK_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
void NewData(MediaStreamGraph* graph, TrackID tid,
|
void NewData(MediaStreamGraph* graph, TrackID tid,
|
||||||
StreamTime offset,
|
StreamTime offset,
|
||||||
uint32_t events,
|
uint32_t events,
|
||||||
|
|
|
@ -30,6 +30,7 @@ class nsIDOMWindow;
|
||||||
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
class MediaStreamGraph;
|
class MediaStreamGraph;
|
||||||
|
class MediaStreamGraphImpl;
|
||||||
class MediaSegment;
|
class MediaSegment;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -103,6 +104,7 @@ class Fake_MediaStream {
|
||||||
|
|
||||||
virtual Fake_SourceMediaStream *AsSourceStream() { return nullptr; }
|
virtual Fake_SourceMediaStream *AsSourceStream() { return nullptr; }
|
||||||
|
|
||||||
|
virtual mozilla::MediaStreamGraphImpl *GraphImpl() { return nullptr; }
|
||||||
virtual nsresult Start() { return NS_OK; }
|
virtual nsresult Start() { return NS_OK; }
|
||||||
virtual nsresult Stop() { return NS_OK; }
|
virtual nsresult Stop() { return NS_OK; }
|
||||||
virtual void StopStream() {}
|
virtual void StopStream() {}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче