зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1299072: P14. Use MediaResult between TrackBuffersManager and MediaSourceDemuxer. r=gerald
MozReview-Commit-ID: 99EopLYqjWh --HG-- extra : rebase_source : a5c54de401dc0ef3d20b3c35a724666c152d6c0d
This commit is contained in:
Родитель
57a4871bb2
Коммит
5b7653c571
|
@ -379,8 +379,6 @@ MediaSourceTrackDemuxer::BreakCycles()
|
||||||
RefPtr<MediaSourceTrackDemuxer::SeekPromise>
|
RefPtr<MediaSourceTrackDemuxer::SeekPromise>
|
||||||
MediaSourceTrackDemuxer::DoSeek(media::TimeUnit aTime)
|
MediaSourceTrackDemuxer::DoSeek(media::TimeUnit aTime)
|
||||||
{
|
{
|
||||||
typedef TrackBuffersManager::GetSampleResult Result;
|
|
||||||
|
|
||||||
TimeIntervals buffered = mManager->Buffered(mType);
|
TimeIntervals buffered = mManager->Buffered(mType);
|
||||||
// Fuzz factor represents a +/- threshold. So when seeking it allows the gap
|
// Fuzz factor represents a +/- threshold. So when seeking it allows the gap
|
||||||
// to be twice as big as the fuzz value. We only want to allow EOS_FUZZ gap.
|
// to be twice as big as the fuzz value. We only want to allow EOS_FUZZ gap.
|
||||||
|
@ -410,12 +408,12 @@ MediaSourceTrackDemuxer::DoSeek(media::TimeUnit aTime)
|
||||||
seekTime = buffered[index].mStart;
|
seekTime = buffered[index].mStart;
|
||||||
}
|
}
|
||||||
seekTime = mManager->Seek(mType, seekTime, MediaSourceDemuxer::EOS_FUZZ);
|
seekTime = mManager->Seek(mType, seekTime, MediaSourceDemuxer::EOS_FUZZ);
|
||||||
Result result;
|
MediaResult result = NS_OK;
|
||||||
RefPtr<MediaRawData> sample =
|
RefPtr<MediaRawData> sample =
|
||||||
mManager->GetSample(mType,
|
mManager->GetSample(mType,
|
||||||
media::TimeUnit(),
|
media::TimeUnit(),
|
||||||
result);
|
result);
|
||||||
MOZ_ASSERT(result != Result::ERROR && sample);
|
MOZ_ASSERT(NS_SUCCEEDED(result) && sample);
|
||||||
mNextSample = Some(sample);
|
mNextSample = Some(sample);
|
||||||
mReset = false;
|
mReset = false;
|
||||||
{
|
{
|
||||||
|
@ -429,8 +427,6 @@ MediaSourceTrackDemuxer::DoSeek(media::TimeUnit aTime)
|
||||||
RefPtr<MediaSourceTrackDemuxer::SamplesPromise>
|
RefPtr<MediaSourceTrackDemuxer::SamplesPromise>
|
||||||
MediaSourceTrackDemuxer::DoGetSamples(int32_t aNumSamples)
|
MediaSourceTrackDemuxer::DoGetSamples(int32_t aNumSamples)
|
||||||
{
|
{
|
||||||
typedef TrackBuffersManager::GetSampleResult Result;
|
|
||||||
|
|
||||||
if (mReset) {
|
if (mReset) {
|
||||||
// If a seek (or reset) was recently performed, we ensure that the data
|
// If a seek (or reset) was recently performed, we ensure that the data
|
||||||
// we are about to retrieve is still available.
|
// we are about to retrieve is still available.
|
||||||
|
@ -452,16 +448,17 @@ MediaSourceTrackDemuxer::DoGetSamples(int32_t aNumSamples)
|
||||||
sample = mNextSample.ref();
|
sample = mNextSample.ref();
|
||||||
mNextSample.reset();
|
mNextSample.reset();
|
||||||
} else {
|
} else {
|
||||||
Result result;
|
MediaResult result = NS_OK;
|
||||||
sample = mManager->GetSample(mType, MediaSourceDemuxer::EOS_FUZZ, result);
|
sample = mManager->GetSample(mType, MediaSourceDemuxer::EOS_FUZZ, result);
|
||||||
if (!sample) {
|
if (!sample) {
|
||||||
if (result == Result::ERROR) {
|
if (result == NS_ERROR_DOM_MEDIA_END_OF_STREAM ||
|
||||||
return SamplesPromise::CreateAndReject(NS_ERROR_DOM_MEDIA_DEMUXER_ERR, __func__);
|
result == NS_ERROR_DOM_MEDIA_WAITING_FOR_DATA) {
|
||||||
|
return SamplesPromise::CreateAndReject(
|
||||||
|
(result == NS_ERROR_DOM_MEDIA_END_OF_STREAM && mManager->IsEnded())
|
||||||
|
? NS_ERROR_DOM_MEDIA_END_OF_STREAM
|
||||||
|
: NS_ERROR_DOM_MEDIA_WAITING_FOR_DATA, __func__);
|
||||||
}
|
}
|
||||||
return SamplesPromise::CreateAndReject(
|
return SamplesPromise::CreateAndReject(result, __func__);
|
||||||
(result == Result::EOS && mManager->IsEnded())
|
|
||||||
? NS_ERROR_DOM_MEDIA_END_OF_STREAM
|
|
||||||
: NS_ERROR_DOM_MEDIA_WAITING_FOR_DATA, __func__);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
RefPtr<SamplesHolder> samples = new SamplesHolder;
|
RefPtr<SamplesHolder> samples = new SamplesHolder;
|
||||||
|
|
|
@ -2150,16 +2150,16 @@ TrackBuffersManager::GetSample(TrackInfo::TrackType aTrack,
|
||||||
already_AddRefed<MediaRawData>
|
already_AddRefed<MediaRawData>
|
||||||
TrackBuffersManager::GetSample(TrackInfo::TrackType aTrack,
|
TrackBuffersManager::GetSample(TrackInfo::TrackType aTrack,
|
||||||
const TimeUnit& aFuzz,
|
const TimeUnit& aFuzz,
|
||||||
GetSampleResult& aResult)
|
MediaResult& aResult)
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(OnTaskQueue());
|
MOZ_ASSERT(OnTaskQueue());
|
||||||
auto& trackData = GetTracksData(aTrack);
|
auto& trackData = GetTracksData(aTrack);
|
||||||
const TrackBuffer& track = GetTrackBuffer(aTrack);
|
const TrackBuffer& track = GetTrackBuffer(aTrack);
|
||||||
|
|
||||||
aResult = GetSampleResult::WAITING_FOR_DATA;
|
aResult = NS_ERROR_DOM_MEDIA_WAITING_FOR_DATA;
|
||||||
|
|
||||||
if (!track.Length()) {
|
if (!track.Length()) {
|
||||||
aResult = GetSampleResult::EOS;
|
aResult = NS_ERROR_DOM_MEDIA_END_OF_STREAM;
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2171,7 +2171,7 @@ TrackBuffersManager::GetSample(TrackInfo::TrackType aTrack,
|
||||||
|
|
||||||
if (trackData.mNextGetSampleIndex.isSome()) {
|
if (trackData.mNextGetSampleIndex.isSome()) {
|
||||||
if (trackData.mNextGetSampleIndex.ref() >= track.Length()) {
|
if (trackData.mNextGetSampleIndex.ref() >= track.Length()) {
|
||||||
aResult = GetSampleResult::EOS;
|
aResult = NS_ERROR_DOM_MEDIA_END_OF_STREAM;
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
const MediaRawData* sample =
|
const MediaRawData* sample =
|
||||||
|
@ -2186,7 +2186,7 @@ TrackBuffersManager::GetSample(TrackInfo::TrackType aTrack,
|
||||||
|
|
||||||
RefPtr<MediaRawData> p = sample->Clone();
|
RefPtr<MediaRawData> p = sample->Clone();
|
||||||
if (!p) {
|
if (!p) {
|
||||||
aResult = GetSampleResult::ERROR;
|
aResult = MediaResult(NS_ERROR_OUT_OF_MEMORY, __func__);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
trackData.mNextGetSampleIndex.ref()++;
|
trackData.mNextGetSampleIndex.ref()++;
|
||||||
|
@ -2212,7 +2212,7 @@ TrackBuffersManager::GetSample(TrackInfo::TrackType aTrack,
|
||||||
trackData.mNextSampleTimecode = nextSampleTimecode;
|
trackData.mNextSampleTimecode = nextSampleTimecode;
|
||||||
trackData.mNextSampleTime = nextSampleTime;
|
trackData.mNextSampleTime = nextSampleTime;
|
||||||
}
|
}
|
||||||
aResult = GetSampleResult::NO_ERROR;
|
aResult = NS_OK;
|
||||||
return p.forget();
|
return p.forget();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2220,7 +2220,7 @@ TrackBuffersManager::GetSample(TrackInfo::TrackType aTrack,
|
||||||
track.LastElement()->mTimecode + track.LastElement()->mDuration) {
|
track.LastElement()->mTimecode + track.LastElement()->mDuration) {
|
||||||
// The next element is past our last sample. We're done.
|
// The next element is past our last sample. We're done.
|
||||||
trackData.mNextGetSampleIndex = Some(uint32_t(track.Length()));
|
trackData.mNextGetSampleIndex = Some(uint32_t(track.Length()));
|
||||||
aResult = GetSampleResult::EOS;
|
aResult = NS_ERROR_DOM_MEDIA_END_OF_STREAM;
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2237,7 +2237,7 @@ TrackBuffersManager::GetSample(TrackInfo::TrackType aTrack,
|
||||||
RefPtr<MediaRawData> p = sample->Clone();
|
RefPtr<MediaRawData> p = sample->Clone();
|
||||||
if (!p) {
|
if (!p) {
|
||||||
// OOM
|
// OOM
|
||||||
aResult = GetSampleResult::ERROR;
|
aResult = MediaResult(NS_ERROR_OUT_OF_MEMORY, __func__);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
trackData.mNextGetSampleIndex = Some(uint32_t(pos)+1);
|
trackData.mNextGetSampleIndex = Some(uint32_t(pos)+1);
|
||||||
|
@ -2245,7 +2245,7 @@ TrackBuffersManager::GetSample(TrackInfo::TrackType aTrack,
|
||||||
TimeUnit::FromMicroseconds(sample->mTimecode + sample->mDuration);
|
TimeUnit::FromMicroseconds(sample->mTimecode + sample->mDuration);
|
||||||
trackData.mNextSampleTime =
|
trackData.mNextSampleTime =
|
||||||
TimeUnit::FromMicroseconds(sample->GetEndTime());
|
TimeUnit::FromMicroseconds(sample->GetEndTime());
|
||||||
aResult = GetSampleResult::NO_ERROR;
|
aResult = NS_OK;
|
||||||
return p.forget();
|
return p.forget();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -155,17 +155,9 @@ public:
|
||||||
const media::TimeUnit& aFuzz,
|
const media::TimeUnit& aFuzz,
|
||||||
bool& aFound);
|
bool& aFound);
|
||||||
|
|
||||||
enum class GetSampleResult
|
|
||||||
{
|
|
||||||
NO_ERROR,
|
|
||||||
ERROR,
|
|
||||||
WAITING_FOR_DATA,
|
|
||||||
EOS
|
|
||||||
};
|
|
||||||
|
|
||||||
already_AddRefed<MediaRawData> GetSample(TrackInfo::TrackType aTrack,
|
already_AddRefed<MediaRawData> GetSample(TrackInfo::TrackType aTrack,
|
||||||
const media::TimeUnit& aFuzz,
|
const media::TimeUnit& aFuzz,
|
||||||
GetSampleResult& aResult);
|
MediaResult& aResult);
|
||||||
int32_t FindCurrentPosition(TrackInfo::TrackType aTrack,
|
int32_t FindCurrentPosition(TrackInfo::TrackType aTrack,
|
||||||
const media::TimeUnit& aFuzz);
|
const media::TimeUnit& aFuzz);
|
||||||
media::TimeUnit GetNextRandomAccessPoint(TrackInfo::TrackType aTrack,
|
media::TimeUnit GetNextRandomAccessPoint(TrackInfo::TrackType aTrack,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче