This let's us use FindOwnedDOMTrack before the TrackID in mOwnedStream
is known.
This is necessary for a stream clone with multiple tracks whose original
TrackID is the same.
MozReview-Commit-ID: J3OvbiNb8X
--HG--
extra : rebase_source : 25f2bddf07de99d187c5d546bfc5eac50b7d6295
For original tracks, the input TrackID is the same as in its
owned stream.
For cloned tracks, the input TrackID comes from the original track,
since no guarantees about TrackIDs in a cloned DOMMediaStream's owned
stream can be given
(imagine e.g., `new MediaStream([trackID1FromStreamX, trackID1FromStreamY]).clone()`).
MozReview-Commit-ID: 9iulggncBZ7
--HG--
extra : rebase_source : 699f6bb1d0e6e22a696bf5ca616594dd5b002ec5
This allows DOMMediaStream to assign MediaStreamTrackSources to
dynamically created MediaStreamTracks.
MozReview-Commit-ID: 3v91zLiqfl7
--HG--
extra : rebase_source : 4fe67e92b9c833fe5ba964fc5f3b11ba21447f36
This lets a MediaStreamTrack communicate with its source/producer on the
main thread. It's for now used for stopping a track at the source and
retrieving some metadata, but it could also be a link between actual
sinks of a track and the source, to for instance let the source optimize
by scaling down the resolution when all sinks want lowres-video.
MozReview-Commit-ID: D4SJLr0aqhJ
--HG--
extra : rebase_source : ea511b5c86ca4836bfa980825f04617fef498261
This allows us to add the JS-side MediaStreamTrack before the MSG-side
track.
MozReview-Commit-ID: BJfbivaljtU
--HG--
extra : rebase_source : f71acc42ca79974a2d5123eff0debc513fe719ee
Without this, HTMLMediaElement cannot see that the camera stream contains
video so it won't hold the screen wake lock.
--HG--
extra : commitid : 1dGzbvOQkLe
extra : rebase_source : 23340b3c01f72cc82c02f4762f4fe10f1b129a3a
The bulk of this commit was generated with a script, executed at the top
level of a typical source code checkout. The only non-machine-generated
part was modifying MFBT's moz.build to reflect the new naming.
CLOSED TREE makes big refactorings like this a piece of cake.
# The main substitution.
find . -name '*.cpp' -o -name '*.cc' -o -name '*.h' -o -name '*.mm' -o -name '*.idl'| \
xargs perl -p -i -e '
s/nsRefPtr\.h/RefPtr\.h/g; # handle includes
s/nsRefPtr ?</RefPtr</g; # handle declarations and variables
'
# Handle a special friend declaration in gfx/layers/AtomicRefCountedWithFinalize.h.
perl -p -i -e 's/::nsRefPtr;/::RefPtr;/' gfx/layers/AtomicRefCountedWithFinalize.h
# Handle nsRefPtr.h itself, a couple places that define constructors
# from nsRefPtr, and code generators specially. We do this here, rather
# than indiscriminantly s/nsRefPtr/RefPtr/, because that would rename
# things like nsRefPtrHashtable.
perl -p -i -e 's/nsRefPtr/RefPtr/g' \
mfbt/nsRefPtr.h \
xpcom/glue/nsCOMPtr.h \
xpcom/base/OwningNonNull.h \
ipc/ipdl/ipdl/lower.py \
ipc/ipdl/ipdl/builtin.py \
dom/bindings/Codegen.py \
python/lldbutils/lldbutils/utils.py
# In our indiscriminate substitution above, we renamed
# nsRefPtrGetterAddRefs, the class behind getter_AddRefs. Fix that up.
find . -name '*.cpp' -o -name '*.h' -o -name '*.idl' | \
xargs perl -p -i -e 's/nsRefPtrGetterAddRefs/RefPtrGetterAddRefs/g'
if [ -d .git ]; then
git mv mfbt/nsRefPtr.h mfbt/RefPtr.h
else
hg mv mfbt/nsRefPtr.h mfbt/RefPtr.h
fi
--HG--
rename : mfbt/nsRefPtr.h => mfbt/RefPtr.h
This commit was generated using the following script, executed at the
top level of a typical source code checkout.
# Don't modify select files in mfbt/ because it's not worth trying to
# tease out the dependencies currently.
#
# Don't modify anything in media/gmp-clearkey/0.1/ because those files
# use their own RefPtr, defined in their own RefCounted.h.
find . -name '*.cpp' -o -name '*.h' -o -name '*.mm' -o -name '*.idl'| \
grep -v 'mfbt/RefPtr.h' | \
grep -v 'mfbt/nsRefPtr.h' | \
grep -v 'mfbt/RefCounted.h' | \
grep -v 'media/gmp-clearkey/0.1/' | \
xargs perl -p -i -e '
s/mozilla::RefPtr/nsRefPtr/g; # handle declarations in headers
s/\bRefPtr</nsRefPtr</g; # handle local variables in functions
s#mozilla/RefPtr.h#mozilla/nsRefPtr.h#; # handle #includes
s#mfbt/RefPtr.h#mfbt/nsRefPtr.h#; # handle strange #includes
'
# |using mozilla::RefPtr;| is OK; |using nsRefPtr;| is invalid syntax.
find . -name '*.cpp' -o -name '*.mm' | xargs sed -i -e '/using nsRefPtr/d'
# RefPtr.h used |byRef| for dealing with COM-style outparams.
# nsRefPtr.h uses |getter_AddRefs|.
# Fixup that mismatch.
find . -name '*.cpp' -o -name '*.h'| \
xargs perl -p -i -e 's/byRef/getter_AddRefs/g'
This allows us to initiate a DOMMediaStream into three states:
* One that has input, owned and playback streams, for data producers
like gUM or RTCPeerConnection.
* One with owned and playback streams, for cloned DOM streams.
If a cloned DOM stream has an empty input stream connected to its
owned stream, both are regarded as not having current data.
* One with only a playback stream, for when it has been created with the
default constructor from JS. Its track set can only be changed by
addTrack() and removeTrack() which when called only affect mPlaybackStream.
--HG--
extra : commitid : J9Hj3Lffpg
extra : rebase_source : 03fd61130c8948c1be996e536eb3078bb09d8480
Other modules than MediaTrackLists may want to receive updates on a
DOMMediaStream's track set. This moves the MediaTrackListListener out of
the MediaTrackList class into DOMMediaStream as a general interface.
The logic for adding MediaTracks to the MediaTrackList when
MediaStreamTracks are added or removed from a DOMMediaStream is moved to
HTMLMediaElement as this fits the model better - HTMLMediaElement is the
owner of the MediaTrackLists.
--HG--
extra : commitid : 3I8mAeBB3oL
extra : rebase_source : 66b8ffcfb5343811c181e4169f295b08494f2ee0
This is needed to make tests pass until we have bug 1208316 implemented.
--HG--
extra : commitid : GPSNwBVyD4j
extra : rebase_source : b7cb9cb1678a582fbf85b729b8f43508889f5c78
A DOMMediaStream's owned stream is piped from the input stream which is
under the control of the DOMMediaStream's owner/producer (like
captureStream or gUM). When producers like these create new tracks after
the stream has already been created (the initial set should be available
to JS synchronously), it is nice if the DOMMediaStream picks them up
automatically and create the corresponding MediaStreamTracks.
The OwnedStreamListener added here does just that; creates an owned
MediaStreamTrack when a track appeared in the stream that didn't already
have a MediaStreamTrack.
It also moves the logic for ended tracks from the PlaybackStreamListener
to the OwnedStreamListener as we previously would see a track end in the
playbak stream after removeTrack() and that would be interpreted as the
track ending at the source.
--HG--
extra : commitid : GPSNwBVyD4j
extra : rebase_source : ee7d81282ee3fe0e05b55358dee8fc97a22473fe