Просмотр исходного кода

Merge pull request #11520 from Kelebek1/estimated_time

Do not consider voice commands in time estimation, fix adpcm estimate
liamwhite 2 лет назад
Родитель
Сommit
d6cf54dd2f

+ 2 - 2
src/audio_core/renderer/command/command_processing_time_estimator.cpp

@@ -27,12 +27,12 @@ u32 CommandProcessingTimeEstimatorVersion1::Estimate(
 
 u32 CommandProcessingTimeEstimatorVersion1::Estimate(
     const AdpcmDataSourceVersion1Command& command) const {
-    return static_cast<u32>(command.pitch * 0.25f * 1.2f);
+    return static_cast<u32>(command.pitch * 0.46f * 1.2f);
 }
 
 u32 CommandProcessingTimeEstimatorVersion1::Estimate(
     const AdpcmDataSourceVersion2Command& command) const {
-    return static_cast<u32>(command.pitch * 0.25f * 1.2f);
+    return static_cast<u32>(command.pitch * 0.46f * 1.2f);
 }
 
 u32 CommandProcessingTimeEstimatorVersion1::Estimate(

+ 6 - 4
src/audio_core/renderer/system.cpp

@@ -684,11 +684,11 @@ u64 System::GenerateCommand(std::span<u8> in_command_buffer,
                                        sink_context,   splitter_context,     perf_manager};
 
     voice_context.SortInfo();
+    command_generator.GenerateVoiceCommands();
 
     const auto start_estimated_time{drop_voice_param *
                                     static_cast<f32>(command_buffer.estimated_process_time)};
 
-    command_generator.GenerateVoiceCommands();
     command_generator.GenerateSubMixCommands();
     command_generator.GenerateFinalMixCommands();
     command_generator.GenerateSinkCommands();
@@ -708,11 +708,13 @@ u64 System::GenerateCommand(std::span<u8> in_command_buffer,
 
         const auto end_estimated_time{drop_voice_param *
                                       static_cast<f32>(command_buffer.estimated_process_time)};
+
+        const auto dsp_time_limit{((time_limit_percent / 100.0f) * 2'880'000.0f) *
+                                  (static_cast<f32>(render_time_limit_percent) / 100.0f)};
+
         const auto estimated_time{start_estimated_time - end_estimated_time};
 
-        const auto time_limit{static_cast<u32>(
-            estimated_time + (((time_limit_percent / 100.0f) * 2'880'000.0) *
-                              (static_cast<f32>(render_time_limit_percent) / 100.0f)))};
+        const auto time_limit{static_cast<u32>(std::max(dsp_time_limit + estimated_time, 0.0f))};
         num_voices_dropped =
             DropVoices(command_buffer, static_cast<u32>(start_estimated_time), time_limit);
     }