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