nsRefPtr<MP4TrackDemuxer::SamplesPromise> MP4TrackDemuxer::GetSamples(int32_t aNumSamples) { nsRefPtr<SamplesHolder> samples = new SamplesHolder; if (!aNumSamples) { return SamplesPromise::CreateAndReject(DemuxerFailureReason::DEMUXER_ERROR, __func__); } if (mQueuedSample) { samples->mSamples.AppendElement(mQueuedSample); mQueuedSample = nullptr; aNumSamples--; } MonitorAutoLock mon(mMonitor); nsRefPtr<MediaRawData> sample; while (aNumSamples && (sample = mIterator->GetNext())) { samples->mSamples.AppendElement(sample); aNumSamples--; } if (samples->mSamples.IsEmpty()) { return SamplesPromise::CreateAndReject(DemuxerFailureReason::END_OF_STREAM, __func__); } else { UpdateSamples(samples->mSamples); return SamplesPromise::CreateAndResolve(samples, __func__); } }
void TerrainGesture::TouchMoved(Touch* touch) { if (_hotspot->HasCapturedTouch(touch)) { TerrainView* terrainView = _hotspot->GetTerrainView(); switch (_hotspot->GetTerrainHotspotMode()) { case TerrainHotspotMode::MoveAndOrbit: terrainView->Orbit( _hotspot->GetOrbitAnchor(), CalculateOrbitFactor() * _hotspot->GetOrbitAngle()); terrainView->Move( _hotspot->GetContentPosition1(), _hotspot->GetCurrentScreenPosition1()); break; case TerrainHotspotMode::Zoom: terrainView->Zoom( _hotspot->GetContentPositions(), _hotspot->GetCurrentScreenPositions()); break; default: break; } AdjustToKeepInView(0.5, 0); UpdateSamples(touch->GetTimestamp()); } }