mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 19:35:51 +00:00
Bug 1050099 - Avoid calling deprecated FindStartTime and instead use buffer's decoded ranges in switching logic. r=cajbir
This commit is contained in:
parent
930455959f
commit
faca6b37b1
@ -126,6 +126,17 @@ TimeRanges::Normalize()
|
||||
}
|
||||
}
|
||||
|
||||
TimeRanges::index_type
|
||||
TimeRanges::Find(double aTime)
|
||||
{
|
||||
for (index_type i = 0; i < mRanges.Length(); ++i) {
|
||||
if (aTime >= mRanges[i].mStart && aTime < mRanges[i].mEnd) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return NoIndex;
|
||||
}
|
||||
|
||||
JSObject*
|
||||
TimeRanges::WrapObject(JSContext* aCx)
|
||||
{
|
||||
|
@ -80,6 +80,12 @@ private:
|
||||
};
|
||||
|
||||
nsAutoTArray<TimeRange,4> mRanges;
|
||||
|
||||
public:
|
||||
typedef nsTArray<TimeRange>::index_type index_type;
|
||||
static const index_type NoIndex = index_type(-1);
|
||||
|
||||
index_type Find(double aTime);
|
||||
};
|
||||
|
||||
} // namespace dom
|
||||
|
@ -44,12 +44,6 @@ extern PRLogModuleInfo* GetMediaSourceAPILog();
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
namespace dom {
|
||||
|
||||
class TimeRanges;
|
||||
|
||||
} // namespace dom
|
||||
|
||||
class MediaSourceReader : public MediaDecoderReader
|
||||
{
|
||||
public:
|
||||
@ -206,17 +200,25 @@ private:
|
||||
|
||||
for (uint32_t i = mActiveVideoDecoder + 1; i < mDecoders.Length(); ++i) {
|
||||
SubBufferDecoder* decoder = mDecoders[i];
|
||||
|
||||
nsRefPtr<dom::TimeRanges> ranges = new dom::TimeRanges();
|
||||
decoder->GetBuffered(ranges);
|
||||
|
||||
MSE_DEBUGV("MediaDecoderReader(%p)::SwitchVideoReaders(%d) decoder=%u (%p) discarded=%d"
|
||||
" hasVideo=%d timeThreshold=%lld startTime=%lld",
|
||||
" hasVideo=%d timeThreshold=%f startTime=%f endTime=%f length=%u",
|
||||
this, aType, i, decoder, decoder->IsDiscarded(),
|
||||
decoder->GetReader()->GetMediaInfo().HasVideo(),
|
||||
mTimeThreshold, decoder->GetMediaStartTime());
|
||||
double(mTimeThreshold) / USECS_PER_S,
|
||||
ranges->GetStartTime(), ranges->GetEndTime(), ranges->Length());
|
||||
|
||||
if (decoder->IsDiscarded() || !decoder->GetReader()->GetMediaInfo().HasVideo()) {
|
||||
if (decoder->IsDiscarded() ||
|
||||
!decoder->GetReader()->GetMediaInfo().HasVideo() ||
|
||||
ranges->Length() == 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (aType == SWITCH_FORCED || mTimeThreshold >= decoder->GetMediaStartTime()) {
|
||||
if (aType == SWITCH_FORCED ||
|
||||
ranges->Find(double(mTimeThreshold) / USECS_PER_S) != dom::TimeRanges::NoIndex) {
|
||||
GetVideoReader()->SetIdle();
|
||||
|
||||
mActiveVideoDecoder = i;
|
||||
@ -423,27 +425,22 @@ MediaSourceReader::InitializePendingDecoders()
|
||||
MediaInfo mi;
|
||||
nsAutoPtr<MetadataTags> tags; // TODO: Handle metadata.
|
||||
nsresult rv;
|
||||
int64_t startTime = INT64_MIN;
|
||||
{
|
||||
ReentrantMonitorAutoExit exitMon(mDecoder->GetReentrantMonitor());
|
||||
rv = reader->ReadMetadata(&mi, getter_Transfers(tags));
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
reader->FindStartTime(startTime);
|
||||
}
|
||||
}
|
||||
reader->SetIdle();
|
||||
if (NS_FAILED(rv) || startTime == INT64_MIN) {
|
||||
if (NS_FAILED(rv)) {
|
||||
// XXX: Need to signal error back to owning SourceBuffer.
|
||||
MSE_DEBUG("MediaSourceReader(%p): Reader %p failed to initialize rv=%x startTime=%lld",
|
||||
this, reader, rv, startTime);
|
||||
MSE_DEBUG("MediaSourceReader(%p): Reader %p failed to initialize rv=%x",
|
||||
this, reader, rv);
|
||||
continue;
|
||||
}
|
||||
decoder->SetMediaStartTime(startTime);
|
||||
|
||||
bool active = false;
|
||||
if (mi.HasVideo() || mi.HasAudio()) {
|
||||
MSE_DEBUG("MediaSourceReader(%p): Reader %p has video=%d audio=%d startTime=%lld",
|
||||
this, reader, mi.HasVideo(), mi.HasAudio(), startTime);
|
||||
MSE_DEBUG("MediaSourceReader(%p): Reader %p has video=%d audio=%d",
|
||||
this, reader, mi.HasVideo(), mi.HasAudio());
|
||||
if (mi.HasVideo()) {
|
||||
MSE_DEBUG("MediaSourceReader(%p): Reader %p video resolution=%dx%d",
|
||||
this, reader, mi.mVideo.mDisplay.width, mi.mVideo.mDisplay.height);
|
||||
|
@ -29,7 +29,7 @@ public:
|
||||
// of the caller to manage the memory of the MediaResource object.
|
||||
SubBufferDecoder(MediaResource* aResource, MediaSourceDecoder* aParentDecoder)
|
||||
: BufferDecoder(aResource), mParentDecoder(aParentDecoder), mReader(nullptr)
|
||||
, mMediaDuration(-1), mMediaStartTime(0), mDiscarded(false)
|
||||
, mMediaDuration(-1), mDiscarded(false)
|
||||
{
|
||||
}
|
||||
|
||||
@ -69,16 +69,6 @@ public:
|
||||
return mMediaDuration;
|
||||
}
|
||||
|
||||
int64_t GetMediaStartTime()
|
||||
{
|
||||
return mMediaStartTime;
|
||||
}
|
||||
|
||||
void SetMediaStartTime(int64_t aMediaStartTime)
|
||||
{
|
||||
mMediaStartTime = aMediaStartTime;
|
||||
}
|
||||
|
||||
bool IsDiscarded()
|
||||
{
|
||||
return mDiscarded;
|
||||
@ -94,7 +84,6 @@ private:
|
||||
MediaSourceDecoder* mParentDecoder;
|
||||
nsRefPtr<MediaDecoderReader> mReader;
|
||||
int64_t mMediaDuration;
|
||||
int64_t mMediaStartTime;
|
||||
bool mDiscarded;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user