Closed Bug 1096790 Opened 10 years ago Closed 9 years ago

Optimize MSE reader switching logic to account for duration estimate and fuzz factor

Categories

(Core :: Audio/Video, defect, P5)

defect

Tracking

()

RESOLVED FIXED

People

(Reporter: cajbir, Assigned: mattwoodrow)

References

(Blocks 1 open bug)

Details

Spun from bug 1089937 comment 18.

"It feels to me that the fuzz should be used as an acceptable tolerance, but
SelectReader() should prefer something closer to the expected, if available,
so as to avoid possibly skipping over available frames.  This can be a
separate bug if you like. 

I also suspect the fuzz should be applied in SelectReader() or other
SelectReader() callers will have similar problems.  It might be necessary now
however to find the closest available if applying the fuzz in SelectReader()."

Need to look at all usage of MediaSourceReader::SelectReader and apply the selection logic so it takes into account of the time fuzz factor introduced in bug 1089937.
Blocks: MSE
Assignee: nobody → cajbir.bugzilla
Status: NEW → ASSIGNED
There are 3 situations where SelectReader() is used, and it seems we may want different approaches for at least some of the different situations.

* On EOS

If the current reader has not played up to the beginning of the range for the
nearest next reader, then we can accept a gap up to some tolerance.

If the current reader has played up to the beginning of the range for the next
reader, but the current reader's buffered range says that the ranges overlap,
then there is the issue that selecting the reader for a target matching the
end of the last decoded interval may select the reader that has reached EOS.
Advancing the target to the end the current reader's range, past the start of
the range of the next reader, was the approach used to avoid this problem in
bug 1089937.  Perhaps another possible approach might be to use lower bounds
for the end times of buffered ranges, when selecting a reader on EOS.

If the current reader has played past the beginning of the range for the next
reader, and there is considerable overlap in the ranges of the readers, then
perhaps we need to seek into the next reader.

* On seeking.

If we are not sure whether one reader will provide data for a target time
(because of uncertainty in the end time) then perhaps we can just advance to
the next reader, if there is one close enough, or otherwise fail seek or
report end of stream, as appropriate.  That might be the easiest approach, and
is similar to the EOS case.

Alternatively, if we want to be more accurate, we could try the reader with
the earlier range and follow a process like that of EOS above to move to the
next reader only if the first reader fails to seek. 

* In RequestAudioData().

If we have a current reader, then we don't want to jump a gap to the next
reader as in the EOS case, unless it is EOS, and I assume we can let the EOS
code handle that.

If there is more recent data in another reader for the range of the current
reader, or "better" data, then we'd like to switch readers.  I don't know
whether better or more recent is more important, or specified.  We may need to
seek into the next reader, if ranges overlap.
Assignee: cajbir.bugzilla → matt.woodrow
Priority: -- → P5
This has been fixed by bug 1127203 and bug 1125776
Status: ASSIGNED → RESOLVED
Closed: 9 years ago
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.