Commit Graph

98 Commits

Author SHA1 Message Date
trav90 72bcf79f70 Move MediaDecoder::UpdateStreamBlockingForStateMachinePlaying to the MDSM 2018-07-25 09:25:18 +08:00
trav90 39b1ff0f06 Guard against early states in UpdateNextFrameStatus 2018-07-25 09:23:01 +08:00
trav90 ce59f3b191 Move MediaDecoder::DecodedStreamData and related code to its own file 2018-07-25 09:22:25 +08:00
Moonchild 1464a0eeb2 Revert "Media mirroring/task queue improvements" 2018-07-25 08:02:45 +08:00
trav90 4f1d5e3605 Enable tail dispatch for the decode task queue 2018-07-25 08:01:03 +08:00
trav90 fd93b917ec Initialize reader task queue in the constructor
This is a necessary step towards having mirrored/canonical values, since those need to know the task queue in their constructor.
2018-07-25 08:00:56 +08:00
trav90 43875b6b1f Drop Support for Content-Duration
This code is racey, extremely difficult to debug, and there is nothing that says its use must be enforced. The few sites that care about getting a duration without seeking to the end of the stream can index their Ogg files.
2018-07-25 07:50:34 +08:00
trav90 44d5199751 Move post-duration-change seeking into MediaDecoder where it belongs 2018-07-25 07:50:19 +08:00
trav90 cf35cc45a2 Clarify the semantics of when we fire DurationChanged 2018-07-25 07:50:12 +08:00
trav90 f319e95fd1 Clean up SetDuration and remove negative duration case 2018-07-25 07:50:05 +08:00
trav90 f3666a1dc9 Track observed duration separately 2018-07-25 07:49:57 +08:00
trav90 10f8792a37 Track demuxer-estimated duration separately 2018-07-25 07:49:50 +08:00
trav90 cf3312970e Track explicit (MSE) duration separately 2018-07-25 07:49:43 +08:00
trav90 30a4725667 Make MediaDecoder::DurationChanged take a duration argument rather than reading it back synchronously from the MDSM 2018-07-25 07:49:36 +08:00
trav90 4db9fb1d37 Track "metadata duration" separately and mirror it to MediaDecoderReader 2018-07-25 07:49:21 +08:00
trav90 2fbf35f99a Track "network duration" separately and mirror it to the MDSM 2018-07-25 07:49:14 +08:00
trav90 e8a4024fa7 Remove ApplyStateToStateMachine and PLAY_STATE_SEEKING 2018-07-25 07:48:53 +08:00
trav90 a18f275a4d Replace MDSM::Play with a state-watcher on mPlayState and eliminate ApplyStateToStateMachine 2018-07-25 07:48:46 +08:00
trav90 372e93e081 Remove wrong mCurrentPosition update 2018-07-25 07:48:38 +08:00
trav90 67d488872c Use StateMirroring for playback position 2018-07-25 07:48:31 +08:00
trav90 e1cffc8281 Rename mCurrentFrameTime to mCurrentPosition to better match the naming in the spec
This field corresponds to the "current playback position" in HTML5.
2018-07-25 07:48:24 +08:00
trav90 03673556a3 Revert Mozilla change "Make newCurrentFrameTime more accurate while seeking by checking audio & video timestamp boundary in addition"
This was landed by Mozilla to work around an issue with seeking on Firefox OS.
2018-07-25 07:45:03 +08:00
trav90 eba13a9563 Use separate thread pool for platform decoder task queues
So that platform decoder tasks will run when their readers wait and block their thread pool.
2018-07-25 07:35:32 +08:00
trav90 3cbf3e5e8a Fix indentation
No code changes. Followup to 2c9ac59.
2018-07-25 07:14:05 +08:00
trav90 759486911b Get rid of RefableThen and make Then return an nsRefPtr<Consumer> 2018-07-25 07:13:05 +08:00
trav90 6c19defcd4 Use lambdas for Seek 2018-07-25 07:12:14 +08:00
trav90 805023876f Use lambdas for WaitForData 2018-07-25 07:12:10 +08:00
trav90 d7c268b018 Include mStartTime when calculating endPosition 2018-07-25 07:11:46 +08:00
trav90 079b1b63a6 Reset the value to AUDIO_DURATION_USECS or re-calculate if the remainingTime is negtive. Schedule the state machine at the first video sample pushed into the queue 2018-07-25 07:11:02 +08:00
trav90 2cae9fb888 Dispatch SetMinimizePrerollUntilPlabackStarts 2018-07-25 07:07:32 +08:00
trav90 fa32ae47df Dispatch SetAudioCaptured 2018-07-25 07:07:28 +08:00
trav90 7d4520f94f Mirror mPreservesPitch 2018-07-25 07:07:26 +08:00
trav90 05d14bdb99 Mirror mPlaybackRate 2018-07-25 07:07:23 +08:00
trav90 1aefd63963 Mirror mVolume 2018-07-25 07:07:20 +08:00
trav90 49424b811e Assert that we're on the state machine thread for most remaining MDSM methods 2018-07-25 07:07:15 +08:00
trav90 659022b636 Give WatchManager an owner thread and make sure everything happens there 2018-07-25 07:07:12 +08:00
trav90 d54dbfa0b9 Do watching/mirroring initialization on the state machine task queue
We take this as an opportunity to remove connect-during-initialization.
2018-07-25 07:07:08 +08:00
trav90 032f6f5dc7 Switch mirror/canonical initialization to happen in the constructor
The goal here is to hoist all meaningful watcher/mirror/canonical manipulation onto the owner thread. But since that must necessarily happen asynchronously, we need to make sure that canonicals are in a sane state immediately upon creation, since otherwise a mirror from another thread may attempt to connect to a not-yet-initialized canonical.
2018-07-25 07:07:05 +08:00
trav90 02e984bce2 Initialize the state machine task queue in the initializer list 2018-07-25 07:07:01 +08:00
trav90 e640efcded Redesign state watching to use a manager 2018-07-25 07:05:53 +08:00
trav90 d77ea08468 Eliminate initial notifies
Not really needed or helpful for our use.
2018-07-25 07:05:51 +08:00
trav90 a5b5468889 Use state-watching machinery for UpdateNextFrameStatus 2018-07-25 07:05:45 +08:00
trav90 b415ed83c6 Be more disciplined about where we call UpdateNextFrameStatus
This value depends on mState and the audio/video queue states. Given that, we can just stick these calls in a few choke points.
2018-07-25 07:05:43 +08:00
trav90 41c67a91d8 Mirror mPlayState and mNextState to the state machine task queue and eliminate cross-thread access 2018-07-25 07:05:41 +08:00
trav90 6fa240db4e Re-land "Dispatch AudioSink notifications asynchronously"
Turns out that this is needed after all.
2018-07-25 07:04:46 +08:00
Moonchild 54c849b63d Revert "Re-land "Dispatch AudioSink notifications asynchronously" + fixes" 2018-07-25 07:04:08 +08:00
trav90 1a2fea0658 Re-land "Dispatch AudioSink notifications asynchronously"
This is needed by some new code that I am working on.
2018-07-25 07:03:56 +08:00
trav90 df074df1ee Use state mirroring for NextFrameStatus 2018-07-25 07:03:42 +08:00
trav90 422ce43cbb Invoke SeekCompleted synchronously
The current behavior is a holdover from when this some of this stuff was happening on the decode thread. It's problematic because nothing guarantees that we don't call CheckIfSeekComplete twice, and queue up two SeekCompleted events.
2018-07-25 07:03:28 +08:00
trav90 8b8219a3c1 Make it impossible for the MDSM frame calculation to overflow 2018-07-25 07:02:05 +08:00