Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6856)

Unified Diff: chromecast/media/cma/backend/alsa/post_processing_pipeline_impl.cc

Issue 2847673002: [Chromecast] Complete PostProcessingPipeline changes (Closed)
Patch Set: Fix deps Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chromecast/media/cma/backend/alsa/post_processing_pipeline_impl.cc
diff --git a/chromecast/media/cma/backend/alsa/post_processing_pipeline.cc b/chromecast/media/cma/backend/alsa/post_processing_pipeline_impl.cc
similarity index 65%
rename from chromecast/media/cma/backend/alsa/post_processing_pipeline.cc
rename to chromecast/media/cma/backend/alsa/post_processing_pipeline_impl.cc
index d8c7c5eea2f9f0e9e7e00d6d7d8e89e4dc8f08c1..f67875b760d7ff064fc97bd53e206359bb6e9c5f 100644
--- a/chromecast/media/cma/backend/alsa/post_processing_pipeline.cc
+++ b/chromecast/media/cma/backend/alsa/post_processing_pipeline_impl.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chromecast/media/cma/backend/alsa/post_processing_pipeline.h"
+#include "chromecast/media/cma/backend/alsa/post_processing_pipeline_impl.h"
#include <string>
@@ -12,6 +12,7 @@
#include "base/values.h"
#include "chromecast/base/serializers.h"
#include "chromecast/public/media/audio_post_processor_shlib.h"
+#include "chromecast/public/volume_control.h"
namespace chromecast {
namespace media {
@@ -20,15 +21,25 @@ namespace {
const int kNoSampleRate = -1;
const char kSoCreateFunction[] = "AudioPostProcessorShlib_Create";
+const char kProcessorKey[] = "processor";
} // namespace
using CreatePostProcessor = AudioPostProcessor* (*)(const std::string&, int);
-PostProcessingPipeline::PostProcessingPipeline(
+std::unique_ptr<PostProcessingPipeline> PostProcessingPipeline::Create(
+ const std::string& name,
+ const base::ListValue* filter_description_list,
+ int num_channels) {
+ return base::MakeUnique<PostProcessingPipelineImpl>(
+ name, filter_description_list, num_channels);
+}
+
+PostProcessingPipelineImpl::PostProcessingPipelineImpl(
+ const std::string& name,
const base::ListValue* filter_description_list,
int channels)
- : sample_rate_(kNoSampleRate) {
+ : name_(name), sample_rate_(kNoSampleRate) {
if (!filter_description_list) {
return; // Warning logged.
}
@@ -37,7 +48,7 @@ PostProcessingPipeline::PostProcessingPipeline(
CHECK(
filter_description_list->GetDictionary(i, &processor_description_dict));
std::string library_path;
- CHECK(processor_description_dict->GetString("processor", &library_path));
+ CHECK(processor_description_dict->GetString(kProcessorKey, &library_path));
if (library_path == "null" || library_path == "none") {
continue;
}
@@ -62,12 +73,12 @@ PostProcessingPipeline::PostProcessingPipeline(
}
}
-PostProcessingPipeline::~PostProcessingPipeline() = default;
+PostProcessingPipelineImpl::~PostProcessingPipelineImpl() = default;
-int PostProcessingPipeline::ProcessFrames(const std::vector<float*>& data,
- int num_frames,
- float current_volume,
- bool is_silence) {
+int PostProcessingPipelineImpl::ProcessFrames(const std::vector<float*>& data,
+ int num_frames,
+ float current_multiplier,
+ bool is_silence) {
DCHECK_NE(sample_rate_, kNoSampleRate);
if (is_silence) {
if (!IsRinging()) {
@@ -78,15 +89,17 @@ int PostProcessingPipeline::ProcessFrames(const std::vector<float*>& data,
silence_frames_processed_ = 0;
}
+ UpdateCastVolume(current_multiplier);
+
total_delay_frames_ = 0;
for (auto& processor : processors_) {
total_delay_frames_ +=
- processor->ProcessFrames(data, num_frames, current_volume);
+ processor->ProcessFrames(data, num_frames, cast_volume_);
}
return total_delay_frames_;
}
-bool PostProcessingPipeline::SetSampleRate(int sample_rate) {
+bool PostProcessingPipelineImpl::SetSampleRate(int sample_rate) {
sample_rate_ = sample_rate;
bool result = true;
for (auto& processor : processors_) {
@@ -97,11 +110,11 @@ bool PostProcessingPipeline::SetSampleRate(int sample_rate) {
return result;
}
-bool PostProcessingPipeline::IsRinging() {
+bool PostProcessingPipelineImpl::IsRinging() {
return silence_frames_processed_ < ringing_time_in_frames_;
}
-int PostProcessingPipeline::GetRingingTimeInFrames() {
+int PostProcessingPipelineImpl::GetRingingTimeInFrames() {
int memory_frames = 0;
for (auto& processor : processors_) {
memory_frames += processor->GetRingingTimeInFrames();
@@ -109,5 +122,17 @@ int PostProcessingPipeline::GetRingingTimeInFrames() {
return memory_frames;
}
+void PostProcessingPipelineImpl::UpdateCastVolume(float multiplier) {
+ DCHECK_GE(multiplier, 0.0);
+
+ if (multiplier == current_multiplier_) {
+ return;
+ }
+ current_multiplier_ = multiplier;
+ float dbfs = std::log10(multiplier) * 20;
+ DCHECK(chromecast::media::VolumeControl::DbFSToVolume);
+ cast_volume_ = chromecast::media::VolumeControl::DbFSToVolume(dbfs);
+}
+
} // namespace media
} // namespace chromecast

Powered by Google App Engine
This is Rietveld 408576698