Commit Graph

45 Commits

Author SHA1 Message Date
trav90 4db9fb1d37 Track "metadata duration" separately and mirror it to MediaDecoderReader 2018-07-25 07:49:21 +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 955f7117b3 Revert "Drop frames aggressively during internal seek"
This reverts commit 6e42a48.
2018-07-25 07:31:45 +08:00
trav90 57310d0f1b Check for MediaDataDecoder::Input error
Don't assume the value will alway be NS_OK.
2018-07-25 07:31:02 +08:00
trav90 2dc8e6a507 Drop frames aggressively during internal seek 2018-07-25 07:30:48 +08:00
trav90 450f34aedc Ensure drainComplete flag is set upon failure to create decoder 2018-07-25 07:30:20 +08:00
trav90 ad322e4080 Add/fix some logging in MediaFormatReader 2018-07-25 07:30:14 +08:00
trav90 da4481057f Followup to commit 43539a3 2018-07-25 07:30:06 +08:00
trav90 3f9864b658 Don't unnecessarily drain decoders when there's no frames pending 2018-07-25 07:27:47 +08:00
trav90 60381f9215 Add missing ; 2018-07-25 07:18:20 +08:00
trav90 794af349b7 Reject promise if decoder couldn't be created 2018-07-25 07:18:17 +08:00
trav90 29ee5e08f2 Wait until current drain completes before decoding new data 2018-07-25 07:18:15 +08:00
trav90 62adc63305 Drain decoder when changing resolution 2018-07-25 07:18:10 +08:00
trav90 ae8c2c3034 Do not drain decoders when waiting for data 2018-07-25 07:18:03 +08:00
trav90 3d6fc29624 Drain decoder when discontinuity encountered
A discontinuity can be when waiting for data, decoding error or reaching end of stream.
2018-07-25 07:18:01 +08:00
trav90 679a130c20 Do not skip keyframe with negative timestamp 2018-07-25 07:17:56 +08:00
trav90 ac35a0e2be Detect change of stream content and automatically recreate decoder 2018-07-25 07:16:34 +08:00
trav90 0b139a5329 Add MediaDataDemuxer::GetSamplesMayBlock() method
This is used by the MediaFormatReader to determine if buffering heuristics should be used.
2018-07-25 07:16:20 +08:00
trav90 61008a2cbf Ensure we will always decode available data
Only clear decoder.mInputExhausted once we feed data to the decoder. This ensures that we never stop attempting to decode while the decoder is waiting for content.
2018-07-25 07:16:14 +08:00
trav90 c588acf599 Don't compute start time for MSE
Make media source reference time be 0 as per spec.
2018-07-25 07:16:03 +08:00
trav90 10071576b9 Handle errors when skipping to the next keyframe
Handle EOS and WAITING_FOR_DATA during skip to next key frame.
2018-07-25 07:15:57 +08:00
trav90 837e626add Add MediaDataDemuxer::IsThreadSafe() method
The new media source demuxer can't support cloning. Cloning() works if you can share the MediaResource object, which we can't do in the case of MSE.
2018-07-25 07:15:55 +08:00
trav90 759486911b Get rid of RefableThen and make Then return an nsRefPtr<Consumer> 2018-07-25 07:13:05 +08:00
trav90 9227ffb4c9 Always seek audio to original seeking position
There's no guarantee that the audio stream will have the same buffered ranges as the video track; which could lead to a stall. It is up to the MediaDecoderStateMachine to ensure proper A/V sync following a sync.
2018-07-25 07:03:13 +08:00
trav90 bcbd26d984 Ensure we have up to date buffered time ranges when OnTaskQueue 2018-07-25 06:51:23 +08:00
trav90 d4c2af85da Remove use of decoder's monitor in MFR::ResetDecode()
This prevents a potential deadlock.
2018-07-25 06:51:18 +08:00
trav90 69e5e7e7c5 Immediately resolve WaitingForDataPromise if we're not waiting for data
This prevents a potential stall in MSE streams.
2018-07-25 06:47:39 +08:00
trav90 fb24feea12 Prevent potential shutdown crash in MFR 2018-07-25 06:47:37 +08:00
trav90 58c5930a6e Fix crash in MFR
The MediaFormatReader destructor is only called once all media task queues have shutdown.
However, the main thread demuxer always owned a reference to trackbuffer task queue.
2018-07-25 06:46:06 +08:00
trav90 9b30c70c1b Remove "if (OnTaskQueue)()" from MediaFormatReader 2018-07-25 01:28:49 +08:00
trav90 83afdd0658 MediaFormatReader: returns error if no tracks are usable 2018-07-25 01:28:47 +08:00
trav90 7f7fdd1cac Reject metadata promise on shutdown 2018-07-25 01:28:45 +08:00
trav90 baaba8abea Fix typo 2018-07-25 01:28:28 +08:00
trav90 b838f29f01 Ensure buffered range referential starts at 0 2018-07-25 01:28:22 +08:00
trav90 e6da217c9c Cache main thread buffered time range 2018-07-25 01:28:14 +08:00
trav90 27136f01b4 Crash fix: always check that track demuxer was successfully created 2018-07-25 01:28:08 +08:00
trav90 37c7767ffa Don't reset demuxer when skipping to next keyframe 2018-07-25 01:28:04 +08:00
trav90 10b5821962 Small reorganization of Update() & remove need for StorensRefPtrPassByPtr. 2018-07-25 01:27:57 +08:00
trav90 9410bc7a49 Add MediaDecoderReader::NotifyDataRemoved method 2018-07-25 01:27:52 +08:00
trav90 b20b8dadab Replace dom::TimeRanges with TimeIntervals object 2018-07-25 01:27:34 +08:00
trav90 6dd69a31f9 Fix build bustage: remove extra } 2018-07-25 01:27:01 +08:00
trav90 dfff91d033 Don't ignore DrainComplete() on first demux 2018-07-25 01:26:53 +08:00
trav90 2d83eaceb5 Remove most locking in MediaFormatReader 2018-07-25 01:26:51 +08:00
trav90 e1fbf7147a Put new MediaFormatReader behind a pref
media.format-reader.mp4=true: Will enable the new format decoder for normal MP4
media.mediasource.format-reader.mp4=true: Will enable new format decoder for
MP4 within MSE.

Both are currently defaulted to false.
2018-07-25 01:26:47 +08:00
trav90 0eb8374c80 Add MediaFormatReader player 2018-07-25 01:26:45 +08:00