Bug 1208371 - Remove MediaStreamTrack::GetStream. r=jib

MozReview-Commit-ID: GP0Mo3CZZ8E

--HG--
extra : rebase_source : 196b149a180e033e021366790bf662037c4ec89f
This commit is contained in:
Andreas Pehrson 2016-02-01 22:48:05 +08:00
Родитель dcc36821e9
Коммит 5f32f21927
10 изменённых файлов: 41 добавлений и 48 удалений

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

@ -533,7 +533,7 @@ DOMMediaStream::AddTrack(MediaStreamTrack& aTrack)
}
LOG(LogLevel::Info, ("DOMMediaStream %p Adding track %p (from stream %p with ID %d)",
this, &aTrack, aTrack.GetStream(), aTrack.GetTrackID()));
this, &aTrack, aTrack.mOwningStream.get(), aTrack.mTrackID));
if (mPlaybackStream->Graph() != aTrack.Graph()) {
NS_ASSERTION(false, "Cannot combine tracks from different MediaStreamGraphs");
@ -563,7 +563,7 @@ DOMMediaStream::AddTrack(MediaStreamTrack& aTrack)
// Hook up the underlying track with our underlying playback stream.
RefPtr<MediaInputPort> inputPort =
GetPlaybackStream()->AllocateInputPort(aTrack.GetOwnedStream(),
aTrack.GetTrackID());
aTrack.mTrackID);
RefPtr<TrackPort> trackPort =
new TrackPort(inputPort, &aTrack, TrackPort::InputPortOwnership::OWNED);
mTracks.AppendElement(trackPort.forget());
@ -576,7 +576,7 @@ void
DOMMediaStream::RemoveTrack(MediaStreamTrack& aTrack)
{
LOG(LogLevel::Info, ("DOMMediaStream %p Removing track %p (from stream %p with ID %d)",
this, &aTrack, aTrack.GetStream(), aTrack.GetTrackID()));
this, &aTrack, aTrack.mOwningStream.get(), aTrack.mTrackID));
RefPtr<TrackPort> toRemove = FindPlaybackTrackPort(aTrack);
if (!toRemove) {
@ -588,7 +588,7 @@ DOMMediaStream::RemoveTrack(MediaStreamTrack& aTrack)
// to block it in the port. Doing this for a locked track is still OK as it
// will first block the track, then destroy the port. Both cause the track to
// end.
toRemove->BlockTrackId(aTrack.GetTrackID());
toRemove->BlockTrackId(aTrack.mTrackID);
DebugOnly<bool> removed = mTracks.RemoveElement(toRemove);
MOZ_ASSERT(removed);
@ -887,7 +887,7 @@ DOMMediaStream::FindOwnedDOMTrack(MediaStream* aInputStream,
for (const RefPtr<TrackPort>& info : mOwnedTracks) {
if (info->GetInputPort() &&
info->GetInputPort()->GetSource() == aInputStream &&
info->GetTrack()->GetInputTrackID() == aInputTrackID) {
info->GetTrack()->mInputTrackID == aInputTrackID) {
// This track is owned externally but in our playback stream.
return info->GetTrack();
}
@ -915,7 +915,7 @@ DOMMediaStream::FindPlaybackDOMTrack(MediaStream* aInputStream, TrackID aInputTr
for (const RefPtr<TrackPort>& info : mTracks) {
if (info->GetInputPort() == mPlaybackPort &&
aInputStream == mOwnedStream &&
info->GetTrack()->GetInputTrackID() == aInputTrackID) {
info->GetTrack()->mInputTrackID == aInputTrackID) {
// This track is in our owned and playback streams.
return info->GetTrack();
}

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

@ -84,6 +84,13 @@ NS_IMPL_RELEASE_INHERITED(MediaStreamTrack, DOMEventTargetHelper)
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(MediaStreamTrack)
NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper)
nsPIDOMWindowInner*
MediaStreamTrack::GetParentObject() const
{
MOZ_RELEASE_ASSERT(mOwningStream);
return mOwningStream->GetParentObject();
}
void
MediaStreamTrack::GetId(nsAString& aID) const
{
@ -137,7 +144,7 @@ MediaStreamTrack::ApplyConstraints(const MediaTrackConstraints& aConstraints,
"constraints %s", this, NS_ConvertUTF16toUTF8(str).get()));
}
return GetStream()->ApplyConstraintsToTrack(mTrackID, aConstraints, aRv);
return mOwningStream->ApplyConstraintsToTrack(mTrackID, aConstraints, aRv);
}
MediaStreamGraph*
@ -180,8 +187,8 @@ MediaStreamTrack::GetInputDOMStream()
{
MediaStreamTrack* originalTrack =
mOriginalTrack ? mOriginalTrack.get() : this;
MOZ_RELEASE_ASSERT(originalTrack->GetStream());
return originalTrack->GetStream();
MOZ_RELEASE_ASSERT(originalTrack->mOwningStream);
return originalTrack->mOwningStream;
}
MediaStream*
@ -195,7 +202,7 @@ MediaStreamTrack::GetInputStream()
ProcessedMediaStream*
MediaStreamTrack::GetOwnedStream()
{
return GetStream()->GetOwnedStream();
return mOwningStream->GetOwnedStream();
}
void

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

@ -22,6 +22,7 @@ class MediaStreamGraph;
class MediaStreamTrackListener;
class PeerConnectionImpl;
class ProcessedMediaStream;
class RemoteSourceStreamInfo;
namespace dom {
@ -170,8 +171,9 @@ class MediaStreamTrack : public DOMEventTargetHelper,
// some internal state, e.g., GetInputStream(), GetOwnedStream().
friend class mozilla::DOMMediaStream;
// PeerConnectionImpl.cpp needs to know our owning DOMStream and bound track id.
// PeerConnection and friends need to know our owning DOMStream and track id.
friend class mozilla::PeerConnectionImpl;
friend class mozilla::RemoteSourceStreamInfo;
public:
/**
@ -186,25 +188,9 @@ public:
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(MediaStreamTrack,
DOMEventTargetHelper)
DOMMediaStream* GetParentObject() const { return mOwningStream; }
nsPIDOMWindowInner* GetParentObject() const;
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override = 0;
/**
* Returns the DOMMediaStream owning this track.
*/
DOMMediaStream* GetStream() const { return mOwningStream; }
/**
* Returns the TrackID this stream has in its owning DOMMediaStream's Owned
* stream.
*/
TrackID GetTrackID() const { return mTrackID; }
/**
* Returns the TrackID this MediaStreamTrack has in its input MSG-MediaStream.
*/
TrackID GetInputTrackID() const { return mInputTrackID; }
virtual AudioStreamTrack* AsAudioStreamTrack() { return nullptr; }
virtual VideoStreamTrack* AsVideoStreamTrack() { return nullptr; }

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

@ -60,9 +60,8 @@ public:
void DetachTrack();
// CaptureTask should be created on main thread.
CaptureTask(dom::ImageCapture* aImageCapture, TrackID aTrackID)
explicit CaptureTask(dom::ImageCapture* aImageCapture)
: mImageCapture(aImageCapture)
, mTrackID(aTrackID)
, mImageGrabbedOrTrackEnd(false)
, mPrincipalChanged(false) {}
@ -78,8 +77,6 @@ protected:
// event to script.
RefPtr<dom::ImageCapture> mImageCapture;
TrackID mTrackID;
// True when an image is retrieved from MediaStreamGraph or MediaStreamGraph
// sends a track finish, end, or removed event.
bool mImageGrabbedOrTrackEnd;

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

@ -148,7 +148,7 @@ ImageCapture::TakePhoto(ErrorResult& aResult)
if (rv == NS_ERROR_NOT_IMPLEMENTED) {
IC_LOG("MediaEngine doesn't support TakePhoto(), it falls back to MediaStreamGraph.");
RefPtr<CaptureTask> task =
new CaptureTask(this, mVideoStreamTrack->GetTrackID());
new CaptureTask(this);
// It adds itself into MediaStreamGraph, so ImageCapture doesn't need to hold
// the reference.

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

@ -215,13 +215,12 @@ public:
// track id from the start, but we're stuck doing this fixup after the
// fact.
nsresult rv = wrapper.impl()->GetRemoteTrackId(streamId,
tracks[i]->GetTrackID(),
*tracks[i],
&trackId);
if (NS_FAILED(rv)) {
CSFLogError(logTag, "%s: Failed to get string track id for %u, rv = %u",
__FUNCTION__,
static_cast<unsigned>(tracks[i]->GetTrackID()),
CSFLogError(logTag, "%s: Failed to get string track id for %p, rv = %u",
__FUNCTION__, tracks[i].get(),
static_cast<unsigned>(rv));
MOZ_ASSERT(false);
continue;
@ -2186,14 +2185,14 @@ PeerConnectionImpl::PrincipalChanged(DOMMediaStream* aMediaStream) {
#if !defined(MOZILLA_EXTERNAL_LINKAGE)
nsresult
PeerConnectionImpl::GetRemoteTrackId(const std::string streamId,
TrackID numericTrackId,
const MediaStreamTrack& aTrack,
std::string* trackId) const
{
if (IsClosed()) {
return NS_ERROR_UNEXPECTED;
}
return mMedia->GetRemoteTrackId(streamId, numericTrackId, trackId);
return mMedia->GetRemoteTrackId(streamId, aTrack, trackId);
}
#endif

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

@ -652,7 +652,7 @@ public:
virtual void PrincipalChanged(DOMMediaStream* aMediaStream) override;
nsresult GetRemoteTrackId(const std::string streamId,
TrackID numericTrackId,
const dom::MediaStreamTrack& track,
std::string* trackId) const;
#endif

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

@ -743,7 +743,7 @@ PeerConnectionMedia::RemoveRemoteTrack(const std::string& streamId,
nsresult
PeerConnectionMedia::GetRemoteTrackId(const std::string streamId,
TrackID numericTrackId,
const MediaStreamTrack& track,
std::string* trackId) const
{
auto* ncThis = const_cast<PeerConnectionMedia*>(this);
@ -755,7 +755,7 @@ PeerConnectionMedia::GetRemoteTrackId(const std::string streamId,
return NS_ERROR_NOT_AVAILABLE;
}
return info->GetTrackId(numericTrackId, trackId);
return info->GetTrackId(track, trackId);
}
void

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

@ -218,8 +218,10 @@ class RemoteSourceStreamInfo : public SourceStreamInfo {
return TRACK_INVALID;
}
nsresult GetTrackId(TrackID numericTrackId, std::string* trackId) const
nsresult GetTrackId(const dom::MediaStreamTrack& track, std::string* trackId) const
{
TrackID numericTrackId = track.mTrackID;
if (numericTrackId <= 0 ||
static_cast<size_t>(numericTrackId) > mTrackIdMap.size()) {
return NS_ERROR_INVALID_ARG;;
@ -315,7 +317,7 @@ class PeerConnectionMedia : public sigslot::has_slots<> {
const std::string& trackId);
nsresult GetRemoteTrackId(const std::string streamId,
TrackID numericTrackId,
const dom::MediaStreamTrack& track,
std::string* trackId) const;
// Get a specific local stream

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

@ -32,6 +32,7 @@ namespace mozilla {
class MediaStreamGraphImpl;
class MediaSegment;
class PeerConnectionImpl;
class RemoteSourceStreamInfo;
};
@ -298,12 +299,14 @@ protected:
class Fake_MediaStreamTrack
{
friend class mozilla::PeerConnectionImpl;
friend class mozilla::RemoteSourceStreamInfo;
public:
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(Fake_MediaStreamTrack)
Fake_MediaStreamTrack(bool aIsVideo, Fake_DOMMediaStream* aOwningStream) :
mIsVideo (aIsVideo),
mOwningStream (aOwningStream)
mOwningStream (aOwningStream),
mTrackID(mIsVideo ? 1 : 0)
{
static size_t counter = 0;
std::ostringstream os;
@ -311,7 +314,6 @@ public:
mID = os.str();
}
mozilla::TrackID GetTrackID() { return mIsVideo ? 1 : 0; }
std::string GetId() const { return mID; }
void AssignId(const std::string& id) { mID = id; }
const Fake_MediaStreamTrack* AsVideoStreamTrack() const
@ -334,9 +336,8 @@ private:
~Fake_MediaStreamTrack() {}
const bool mIsVideo;
protected:
Fake_DOMMediaStream* mOwningStream;
private:
mozilla::TrackID mTrackID;
std::string mID;
};
@ -517,6 +518,7 @@ typedef Fake_DOMMediaStream DOMMediaStream;
typedef Fake_DOMMediaStream DOMLocalMediaStream;
namespace dom {
typedef Fake_MediaStreamTrack MediaStreamTrack;
typedef Fake_MediaStreamTrackSource MediaStreamTrackSource;
}
}