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); } }
void USoundWave::BeginCacheForCookedPlatformData(const ITargetPlatform *TargetPlatform) { if (TargetPlatform->SupportsFeature(ETargetPlatformFeatures::AudioStreaming) && IsStreaming()) { // Retrieve format to cache for targetplatform. FName PlatformFormat = TargetPlatform->GetWaveFormat(this); uint32 CacheFlags = EStreamedAudioCacheFlags::Async | EStreamedAudioCacheFlags::InlineChunks; // If source data is resident in memory then allow the streamed audio to be built // in a background thread. if (GetCompressedData(PlatformFormat)->IsBulkDataLoaded()) { CacheFlags |= EStreamedAudioCacheFlags::AllowAsyncBuild; } // find format data by comparing derived data keys. FString DerivedDataKey; GetStreamedAudioDerivedDataKeySuffix(*this, PlatformFormat, DerivedDataKey); FStreamedAudioPlatformData *PlatformData = CookedPlatformData.FindRef(DerivedDataKey); if (PlatformData == NULL) { PlatformData = new FStreamedAudioPlatformData(); PlatformData->Cache( *this, PlatformFormat, CacheFlags ); CookedPlatformData.Add(DerivedDataKey, PlatformData); } } Super::BeginCacheForCookedPlatformData(TargetPlatform); }