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

Unified Diff: chromecast/media/cma/backend/alsa/filter_group.h

Issue 2847673002: [Chromecast] Complete PostProcessingPipeline changes (Closed)
Patch Set: Add more test 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/filter_group.h
diff --git a/chromecast/media/cma/backend/alsa/filter_group.h b/chromecast/media/cma/backend/alsa/filter_group.h
index cf14fe2918e6da3c16ed888a9e9655f7e964f133..8ff013721a1d00a855f1b180a679151919086c0e 100644
--- a/chromecast/media/cma/backend/alsa/filter_group.h
+++ b/chromecast/media/cma/backend/alsa/filter_group.h
@@ -26,25 +26,35 @@ namespace media {
class PostProcessingPipeline;
-// FilterGroup contains state for an AudioFilter.
-// It takes multiple StreamMixerAlsa::InputQueues,
-// mixes them, and processes them.
+// FilterGroup mixes StreamMixerAlsa::InputQueues and/or FilterGroups,
+// mixes their outputs, and applies DSP to them.
-// ActiveInputs are added with AddActiveInput(), then cleared when
+// FilterGroups are added at construction. These cannot be removed.
+
+// InputQueues are added with AddActiveInput(), then cleared when
// MixAndFilter() is called (they must be added each time data is queried).
class FilterGroup {
public:
// |input_types| is a set of strings that is used as a filter to determine
// if an input belongs to this group (InputQueue->name() must exactly match an
- // entry in |input_types| to be processed by this group.
- // |filter_type| is passed to AudioFilterFactory to create an AudioFilter.
- FilterGroup(const std::unordered_set<std::string>& input_types,
- AudioContentType content_type,
- int channels,
- const base::ListValue* filter_list);
- ~FilterGroup();
+ // entry in |input_types| to be processed by this group).
kmackay 2017/04/28 00:31:42 Could you add comments about the other parameters?
bshaya 2017/04/28 01:37:37 Done.
+ FilterGroup(int channels,
kmackay 2017/04/28 00:31:42 num_channels
bshaya 2017/04/28 01:37:36 Done.
+ const std::string& name,
+ const base::ListValue* filter_list,
+ const std::unordered_set<std::string>& input_types,
+ const std::vector<FilterGroup*>& mixed_inputs);
+
+ FilterGroup(int channels,
+ const std::string& name,
+ const base::ListValue* filter_list,
+ const std::vector<FilterGroup*>& mixed_inputs);
+
+ FilterGroup(int channels,
+ const std::string& name,
+ const base::ListValue* filter_list,
+ const std::unordered_set<std::string>& input_types);
kmackay 2017/04/28 00:31:42 The two extra constructors seem unneccessary; call
bshaya 2017/04/28 01:37:37 Done. Although you do have to pass in std::vector
- AudioContentType content_type() const { return content_type_; }
+ ~FilterGroup();
// Sets the sample rate of the post-processors.
void Initialize(int output_samples_per_second);
@@ -55,40 +65,44 @@ class FilterGroup {
// Adds |input| to |active_inputs_|.
void AddActiveInput(StreamMixerAlsa::InputQueue* input);
- // Retrieves a pointer to the output buffer |interleaved_|.
- std::vector<uint8_t>* GetInterleaved();
-
// Mixes all active inputs and passes them through the audio filter.
kmackay 2017/04/28 00:31:42 comment about return value
bshaya 2017/04/28 01:37:36 Done.
- bool MixAndFilter(int chunk_size);
+ float MixAndFilter(int chunk_size);
- // Overwrites |interleaved_| with 0's, ensuring at least
- // |chunk_size| bytes.
- void ClearInterleaved(int chunk_size);
+ // Gets the current delay of this filter group's AudioPostProcessors.
+ // (Not recursive).
+ int64_t GetRenderingDelayMicroseconds();
// Clear all |active_inputs_|. This should be called before AddActiveInputs
// on each mixing iteration.
void ClearActiveInputs();
- // Resets the PostProcessingPipeline, removing all AudioPostProcessors.
- void DisablePostProcessingForTest();
+ // Retrieves a pointer to the output buffer.
+ ::media::AudioBus* data() { return mixed_.get(); }
+
+ // Get the last used volume.
+ float last_volume() const { return last_volume_; }
+
+ std::string name() const { return name_; }
private:
void ResizeBuffersIfNecessary(int chunk_size);
- int BytesPerOutputFormatSample();
- const std::unordered_set<std::string> input_types_;
- const AudioContentType content_type_;
const int num_channels_;
+ const std::string name_;
+ const std::unordered_set<std::string> input_types_;
+ std::vector<FilterGroup*> mixed_inputs_;
std::vector<StreamMixerAlsa::InputQueue*> active_inputs_;
int output_samples_per_second_;
+ int frames_zeroed_ = 0;
+ float last_volume_ = 0.0f;
+ int64_t delay_frames_ = 0;
// Buffers that hold audio data while it is mixed.
// These are kept as members of this class to minimize copies and
// allocations.
std::unique_ptr<::media::AudioBus> temp_;
std::unique_ptr<::media::AudioBus> mixed_;
- std::vector<uint8_t> interleaved_;
std::vector<float*> channels_;
std::unique_ptr<PostProcessingPipeline> post_processing_pipeline_;

Powered by Google App Engine
This is Rietveld 408576698