We had problems because we'd call Destroy on a port after calling Destroy on
its streams. This patch makes the port's Destroy ControlMessage not use a stream,
instead we get the stream from the port directly. It also makes us update the
graph's mPortCount only when the port is finally destroyed; this fixes a potential
bug where the current graph could shut down when all streams are removed, before
all ports have been completely destroyed.
--HG--
extra : rebase_source : 3245fa64b79fb8a75c17190f1a4a2af6d42a5012
test_streams_element_capture_reset.html is updated to test that mozCaptureStreamUntilEnded actually stops
capturing when the stream ends. It also tests that seeking and reloading the media resource keep
feeding a mozCaptureStream stream, and feed the right amount of data.
--HG--
extra : rebase_source : 07faf20b8a99b5e7dcdfb27b3a2096fdfd570f45
Moves to a new setup where a decoder manages a single SourceMediaStream internally. Each stream
returned from mozCaptureStream(UntilEnded) is a TrackUnionStream which is fed by the
decoder's SourceMediaStream.
We want the captured streams to be blocked while the media element is not playing. We do that
by blocking any captured stream that has no SourceMediaStream feeding into it, and blocking
any SourceMediaStream while its decoder is not playing.
We arrange for the decoders's PlaybackEnded to be delayed until its SourceMediaStream has
finished according to the media stream graph. This ensures the state of captured media streams
corresponds more closely to the media element state.
--HG--
extra : rebase_source : 3324ff0e9bdce9c71a23c0f5f2032815e9046081
Instead of forcing a full-layer invalidation when new frames appear, invalidate
only the bounds of the frame. Invalidating untrusted geometry still causes a
full-layer invalidation.
As clip items aren't processed, they have no associated layer entries. This is
a problem when a clip item's underlying frame is the same as one that gets
merged into a container layer, as display-item data will be created, but no
layer entry will be added. This will cause it to be removed on the next
layer-build, and cause a full invalidation.
Fix this by adding an 'mIsMergedFrame' entry to DisplayItemDataEntry and setting
it on all merged frames in BuildContainerLayerFor. This property stops the
entry from being removed when it gets updated.