зеркало из 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>
|
||||
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,
|
||||
|
|
Загрузка…
Ссылка в новой задаче