Commit 3d8c42d8 authored by Raymond Toy's avatar Raymond Toy Committed by Commit Bot

Rename HasSampleAccurateValuesTimeline and fix DelayNode

Now that all AudioParams with inputs have been updated to accept
inputs when the automation rate is k-rate, remove the old
HasSampleAccurateValues and rename HasSampleAccurateValuesTimeline to
HasSampleAccurateValues.

This change requires a modification of the DelayDSPKernel to add the
method IsAudioRate() so that the delay node handles k-rate delayTime
input correctly.

Bug: 1015760
Change-Id: Ieb59889017328bfa58bf82df636643878b6ad3ef
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2199133Reviewed-by: default avatarHongchan Choi <hongchan@chromium.org>
Commit-Queue: Raymond Toy <rtoy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#768521}
parent e4a03fcc
......@@ -150,15 +150,15 @@ void AudioListener::RemovePanner(PannerHandler& panner) {
}
bool AudioListener::HasSampleAccurateValues() const {
return positionX()->Handler().HasSampleAccurateValuesTimeline() ||
positionY()->Handler().HasSampleAccurateValuesTimeline() ||
positionZ()->Handler().HasSampleAccurateValuesTimeline() ||
forwardX()->Handler().HasSampleAccurateValuesTimeline() ||
forwardY()->Handler().HasSampleAccurateValuesTimeline() ||
forwardZ()->Handler().HasSampleAccurateValuesTimeline() ||
upX()->Handler().HasSampleAccurateValuesTimeline() ||
upY()->Handler().HasSampleAccurateValuesTimeline() ||
upZ()->Handler().HasSampleAccurateValuesTimeline();
return positionX()->Handler().HasSampleAccurateValues() ||
positionY()->Handler().HasSampleAccurateValues() ||
positionZ()->Handler().HasSampleAccurateValues() ||
forwardX()->Handler().HasSampleAccurateValues() ||
forwardY()->Handler().HasSampleAccurateValues() ||
forwardZ()->Handler().HasSampleAccurateValues() ||
upX()->Handler().HasSampleAccurateValues() ||
upY()->Handler().HasSampleAccurateValues() ||
upZ()->Handler().HasSampleAccurateValues();
}
bool AudioListener::IsAudioRate() const {
......
......@@ -179,21 +179,9 @@ class AudioParamHandler final : public ThreadSafeRefCounted<AudioParamHandler>,
void ResetSmoothedValue() { timeline_.SetSmoothedValue(IntrinsicValue()); }
// An AudioParam needs sample accurate processing if there are
// automations scheduled or if there are connections.
bool HasSampleAccurateValues() {
if (automation_rate_ != kAudio)
return false;
bool has_values =
timeline_.HasValues(destination_handler_->CurrentSampleFrame(),
destination_handler_->SampleRate());
return has_values || NumberOfRenderingConnections();
}
// TODO(crbug.com/1015760) This is like HasSAmpleAccurateValues, but
// we don't check for the rate. When the bug is fixed,
// HasSampleAccurateValues can be removed and this methed renamed.
bool HasSampleAccurateValuesTimeline() {
bool has_values =
timeline_.HasValues(destination_handler_->CurrentSampleFrame(),
destination_handler_->SampleRate());
......
......@@ -109,7 +109,7 @@ void AudioWorkletHandler::Process(uint32_t frames_to_process) {
for (const auto& param_name : param_value_map_.Keys()) {
auto* const param_handler = param_handler_map_.at(param_name);
AudioFloatArray* param_values = param_value_map_.at(param_name);
if (param_handler->HasSampleAccurateValuesTimeline() &&
if (param_handler->HasSampleAccurateValues() &&
param_handler->IsAudioRate()) {
param_handler->CalculateSampleAccurateValues(
param_values->Data(), static_cast<uint32_t>(frames_to_process));
......
......@@ -63,10 +63,10 @@ void BiquadProcessor::CheckForDirtyCoefficients() {
filter_coefficients_dirty_ = false;
has_sample_accurate_values_ = false;
if (parameter1_->HasSampleAccurateValuesTimeline() ||
parameter2_->HasSampleAccurateValuesTimeline() ||
parameter3_->HasSampleAccurateValuesTimeline() ||
parameter4_->HasSampleAccurateValuesTimeline()) {
if (parameter1_->HasSampleAccurateValues() ||
parameter2_->HasSampleAccurateValues() ||
parameter3_->HasSampleAccurateValues() ||
parameter4_->HasSampleAccurateValues()) {
// Coefficients are dirty if any of them has automations or if there are
// connections to the AudioParam.
filter_coefficients_dirty_ = true;
......
......@@ -70,7 +70,7 @@ void ConstantSourceHandler::Process(uint32_t frames_to_process) {
return;
}
bool is_sample_accurate = offset_->HasSampleAccurateValuesTimeline();
bool is_sample_accurate = offset_->HasSampleAccurateValues();
if (is_sample_accurate && offset_->IsAudioRate()) {
DCHECK_LE(frames_to_process, sample_accurate_values_.size());
......
......@@ -58,6 +58,10 @@ double DelayDSPKernel::DelayTime(float) {
return GetDelayProcessor()->DelayTime().FinalValue();
}
bool DelayDSPKernel::IsAudioRate() {
return GetDelayProcessor()->DelayTime().IsAudioRate();
}
void DelayDSPKernel::ProcessOnlyAudioParams(uint32_t frames_to_process) {
DCHECK_LE(frames_to_process, audio_utilities::kRenderQuantumFrames);
......
......@@ -42,6 +42,7 @@ class DelayDSPKernel final : public AudioDelayDSPKernel {
void CalculateSampleAccurateValues(float* delay_times,
uint32_t frames_to_process) override;
double DelayTime(float sample_rate) override;
bool IsAudioRate() override;
void ProcessOnlyAudioParams(uint32_t frames_to_process) override;
......
......@@ -71,7 +71,7 @@ void GainHandler::Process(uint32_t frames_to_process) {
} else {
scoped_refptr<AudioBus> input_bus = Input(0).Bus();
bool is_sample_accurate = gain_->HasSampleAccurateValuesTimeline();
bool is_sample_accurate = gain_->HasSampleAccurateValues();
if (is_sample_accurate && gain_->IsAudioRate()) {
// Apply sample-accurate gain scaling for precise envelopes, grain
......
......@@ -192,8 +192,7 @@ bool OscillatorHandler::CalculateSampleAccuratePhaseIncrements(
float final_scale = periodic_wave_->RateScale();
if (frequency_->HasSampleAccurateValuesTimeline() &&
frequency_->IsAudioRate()) {
if (frequency_->HasSampleAccurateValues() && frequency_->IsAudioRate()) {
has_sample_accurate_values = true;
has_frequency_changes = true;
......@@ -207,7 +206,7 @@ bool OscillatorHandler::CalculateSampleAccuratePhaseIncrements(
final_scale *= frequency;
}
if (detune_->HasSampleAccurateValuesTimeline() && detune_->IsAudioRate()) {
if (detune_->HasSampleAccurateValues() && detune_->IsAudioRate()) {
has_sample_accurate_values = true;
// Get the sample-accurate detune values.
......
......@@ -710,12 +710,12 @@ void PannerHandler::SetChannelCountMode(const String& mode,
}
bool PannerHandler::HasSampleAccurateValues() const {
return position_x_->HasSampleAccurateValuesTimeline() ||
position_y_->HasSampleAccurateValuesTimeline() ||
position_z_->HasSampleAccurateValuesTimeline() ||
orientation_x_->HasSampleAccurateValuesTimeline() ||
orientation_y_->HasSampleAccurateValuesTimeline() ||
orientation_z_->HasSampleAccurateValuesTimeline();
return position_x_->HasSampleAccurateValues() ||
position_y_->HasSampleAccurateValues() ||
position_z_->HasSampleAccurateValues() ||
orientation_x_->HasSampleAccurateValues() ||
orientation_y_->HasSampleAccurateValues() ||
orientation_z_->HasSampleAccurateValues();
}
bool PannerHandler::IsAudioRate() const {
......
......@@ -59,7 +59,7 @@ void StereoPannerHandler::Process(uint32_t frames_to_process) {
return;
}
bool is_sample_accurate = pan_->HasSampleAccurateValuesTimeline();
bool is_sample_accurate = pan_->HasSampleAccurateValues();
if (is_sample_accurate && pan_->IsAudioRate()) {
// Apply sample-accurate panning specified by AudioParam automation.
......
......@@ -73,6 +73,10 @@ void AudioDelayDSPKernel::CalculateSampleAccurateValues(float*, uint32_t) {
NOTREACHED();
}
bool AudioDelayDSPKernel::IsAudioRate() {
return true;
}
double AudioDelayDSPKernel::DelayTime(float sample_rate) {
return desired_delay_frames_ / sample_rate;
}
......@@ -92,7 +96,7 @@ void AudioDelayDSPKernel::Process(const float* source,
float sample_rate = this->SampleRate();
double max_time = MaxDelayTime();
if (HasSampleAccurateValues()) {
if (HasSampleAccurateValues() && IsAudioRate()) {
float* delay_times = delay_times_.Data();
CalculateSampleAccurateValues(delay_times, frames_to_process);
......
......@@ -58,6 +58,7 @@ class PLATFORM_EXPORT AudioDelayDSPKernel : public AudioDSPKernel {
virtual void CalculateSampleAccurateValues(float* delay_times,
uint32_t frames_to_process);
virtual double DelayTime(float sample_rate);
virtual bool IsAudioRate();
AudioFloatArray buffer_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment