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:
Jean-Yves Avenard 2016-09-12 15:44:31 +10:00
Родитель 57a4871bb2
Коммит 5b7653c571
3 изменённых файлов: 20 добавлений и 31 удалений

Просмотреть файл

@ -379,8 +379,6 @@ MediaSourceTrackDemuxer::BreakCycles()
RefPtr<MediaSourceTrackDemuxer::SeekPromise>
MediaSourceTrackDemuxer::DoSeek(media::TimeUnit aTime)
{
typedef TrackBuffersManager::GetSampleResult Result;
TimeIntervals buffered = mManager->Buffered(mType);
// 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.
@ -410,12 +408,12 @@ MediaSourceTrackDemuxer::DoSeek(media::TimeUnit aTime)
seekTime = buffered[index].mStart;
}
seekTime = mManager->Seek(mType, seekTime, MediaSourceDemuxer::EOS_FUZZ);
Result result;
MediaResult result = NS_OK;
RefPtr<MediaRawData> sample =
mManager->GetSample(mType,
media::TimeUnit(),
result);
MOZ_ASSERT(result != Result::ERROR && sample);
MOZ_ASSERT(NS_SUCCEEDED(result) && sample);
mNextSample = Some(sample);
mReset = false;
{
@ -429,8 +427,6 @@ MediaSourceTrackDemuxer::DoSeek(media::TimeUnit aTime)
RefPtr<MediaSourceTrackDemuxer::SamplesPromise>
MediaSourceTrackDemuxer::DoGetSamples(int32_t aNumSamples)
{
typedef TrackBuffersManager::GetSampleResult Result;
if (mReset) {
// If a seek (or reset) was recently performed, we ensure that the data
// we are about to retrieve is still available.
@ -452,16 +448,17 @@ MediaSourceTrackDemuxer::DoGetSamples(int32_t aNumSamples)
sample = mNextSample.ref();
mNextSample.reset();
} else {
Result result;
MediaResult result = NS_OK;
sample = mManager->GetSample(mType, MediaSourceDemuxer::EOS_FUZZ, result);
if (!sample) {
if (result == Result::ERROR) {
return SamplesPromise::CreateAndReject(NS_ERROR_DOM_MEDIA_DEMUXER_ERR, __func__);
if (result == NS_ERROR_DOM_MEDIA_END_OF_STREAM ||
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(
(result == Result::EOS && mManager->IsEnded())
? NS_ERROR_DOM_MEDIA_END_OF_STREAM
: NS_ERROR_DOM_MEDIA_WAITING_FOR_DATA, __func__);
return SamplesPromise::CreateAndReject(result, __func__);
}
}
RefPtr<SamplesHolder> samples = new SamplesHolder;

Просмотреть файл

@ -2150,16 +2150,16 @@ TrackBuffersManager::GetSample(TrackInfo::TrackType aTrack,
already_AddRefed<MediaRawData>
TrackBuffersManager::GetSample(TrackInfo::TrackType aTrack,
const TimeUnit& aFuzz,
GetSampleResult& aResult)
MediaResult& aResult)
{
MOZ_ASSERT(OnTaskQueue());
auto& trackData = GetTracksData(aTrack);
const TrackBuffer& track = GetTrackBuffer(aTrack);
aResult = GetSampleResult::WAITING_FOR_DATA;
aResult = NS_ERROR_DOM_MEDIA_WAITING_FOR_DATA;
if (!track.Length()) {
aResult = GetSampleResult::EOS;
aResult = NS_ERROR_DOM_MEDIA_END_OF_STREAM;
return nullptr;
}
@ -2171,7 +2171,7 @@ TrackBuffersManager::GetSample(TrackInfo::TrackType aTrack,
if (trackData.mNextGetSampleIndex.isSome()) {
if (trackData.mNextGetSampleIndex.ref() >= track.Length()) {
aResult = GetSampleResult::EOS;
aResult = NS_ERROR_DOM_MEDIA_END_OF_STREAM;
return nullptr;
}
const MediaRawData* sample =
@ -2186,7 +2186,7 @@ TrackBuffersManager::GetSample(TrackInfo::TrackType aTrack,
RefPtr<MediaRawData> p = sample->Clone();
if (!p) {
aResult = GetSampleResult::ERROR;
aResult = MediaResult(NS_ERROR_OUT_OF_MEMORY, __func__);
return nullptr;
}
trackData.mNextGetSampleIndex.ref()++;
@ -2212,7 +2212,7 @@ TrackBuffersManager::GetSample(TrackInfo::TrackType aTrack,
trackData.mNextSampleTimecode = nextSampleTimecode;
trackData.mNextSampleTime = nextSampleTime;
}
aResult = GetSampleResult::NO_ERROR;
aResult = NS_OK;
return p.forget();
}
@ -2220,7 +2220,7 @@ TrackBuffersManager::GetSample(TrackInfo::TrackType aTrack,
track.LastElement()->mTimecode + track.LastElement()->mDuration) {
// The next element is past our last sample. We're done.
trackData.mNextGetSampleIndex = Some(uint32_t(track.Length()));
aResult = GetSampleResult::EOS;
aResult = NS_ERROR_DOM_MEDIA_END_OF_STREAM;
return nullptr;
}
@ -2237,7 +2237,7 @@ TrackBuffersManager::GetSample(TrackInfo::TrackType aTrack,
RefPtr<MediaRawData> p = sample->Clone();
if (!p) {
// OOM
aResult = GetSampleResult::ERROR;
aResult = MediaResult(NS_ERROR_OUT_OF_MEMORY, __func__);
return nullptr;
}
trackData.mNextGetSampleIndex = Some(uint32_t(pos)+1);
@ -2245,7 +2245,7 @@ TrackBuffersManager::GetSample(TrackInfo::TrackType aTrack,
TimeUnit::FromMicroseconds(sample->mTimecode + sample->mDuration);
trackData.mNextSampleTime =
TimeUnit::FromMicroseconds(sample->GetEndTime());
aResult = GetSampleResult::NO_ERROR;
aResult = NS_OK;
return p.forget();
}

Просмотреть файл

@ -155,17 +155,9 @@ public:
const media::TimeUnit& aFuzz,
bool& aFound);
enum class GetSampleResult
{
NO_ERROR,
ERROR,
WAITING_FOR_DATA,
EOS
};
already_AddRefed<MediaRawData> GetSample(TrackInfo::TrackType aTrack,
const media::TimeUnit& aFuzz,
GetSampleResult& aResult);
MediaResult& aResult);
int32_t FindCurrentPosition(TrackInfo::TrackType aTrack,
const media::TimeUnit& aFuzz);
media::TimeUnit GetNextRandomAccessPoint(TrackInfo::TrackType aTrack,