bool USoundWave::IsCachedCookedPlatformDataLoaded( const ITargetPlatform* TargetPlatform ) { if (TargetPlatform->SupportsFeature(ETargetPlatformFeatures::AudioStreaming) && IsStreaming()) { // Retrieve format to cache for targetplatform. FName PlatformFormat = TargetPlatform->GetWaveFormat(this); // find format data by comparing derived data keys. FString DerivedDataKey; GetStreamedAudioDerivedDataKeySuffix(*this, PlatformFormat, DerivedDataKey); FStreamedAudioPlatformData *PlatformData = CookedPlatformData.FindRef(DerivedDataKey); if (PlatformData == NULL) { // we havne't called begincache return false; } if (PlatformData->AsyncTask && PlatformData->AsyncTask->IsWorkDone()) { PlatformData->FinishCache(); } return PlatformData->IsFinishedCache(); } return true; }
void USoundWave::SerializeCookedPlatformData(FArchive& Ar) { if (IsTemplate()) { return; } DECLARE_SCOPE_CYCLE_COUNTER( TEXT("USoundWave::SerializeCookedPlatformData"), STAT_SoundWave_SerializeCookedPlatformData, STATGROUP_LoadTime ); #if WITH_EDITORONLY_DATA if (Ar.IsCooking() && Ar.IsPersistent()) { check(!Ar.CookingTarget()->IsServerOnly()); FName PlatformFormat = Ar.CookingTarget()->GetWaveFormat(this); FString DerivedDataKey; GetStreamedAudioDerivedDataKey(*this, PlatformFormat, DerivedDataKey); FStreamedAudioPlatformData *PlatformDataToSave = CookedPlatformData.FindRef(DerivedDataKey); if (PlatformDataToSave == NULL) { PlatformDataToSave = new FStreamedAudioPlatformData(); PlatformDataToSave->Cache(*this, PlatformFormat, EStreamedAudioCacheFlags::InlineChunks | EStreamedAudioCacheFlags::Async); CookedPlatformData.Add(DerivedDataKey, PlatformDataToSave); } PlatformDataToSave->FinishCache(); PlatformDataToSave->Serialize(Ar, this); } else #endif // #if WITH_EDITORONLY_DATA { check(!FPlatformProperties::IsServerOnly()); CleanupCachedRunningPlatformData(); check(RunningPlatformData == NULL); // Don't serialize streaming data on servers, even if this platform supports streaming in theory RunningPlatformData = new FStreamedAudioPlatformData(); RunningPlatformData->Serialize(Ar, this); } }