Chromium Code Reviews| Index: chromecast/media/cma/backend/media_pipeline_backend_manager.h |
| diff --git a/chromecast/media/cma/backend/media_pipeline_backend_manager.h b/chromecast/media/cma/backend/media_pipeline_backend_manager.h |
| index 3cb327609c5321642c77e1baca888dcec900ece5..622c0ef97c2b4f05ef69b6cd1936a03cfb7ec3f7 100644 |
| --- a/chromecast/media/cma/backend/media_pipeline_backend_manager.h |
| +++ b/chromecast/media/cma/backend/media_pipeline_backend_manager.h |
| @@ -11,6 +11,7 @@ |
| #include "base/macros.h" |
| #include "base/memory/ref_counted.h" |
| +#include "base/observer_list_threadsafe.h" |
| #include "base/single_thread_task_runner.h" |
| #include "chromecast/public/media/media_pipeline_backend.h" |
| #include "chromecast/public/media/media_pipeline_device_params.h" |
| @@ -18,36 +19,45 @@ |
| namespace chromecast { |
| namespace media { |
| -// This class manages created media pipelines, and provides volume control by |
| -// stream type. |
| -// All functions in this class should be called on the media thread. |
| +// This class tracks all created media backends, tracking whether or not volume |
| +// feedback sounds should be enabled based on the currently active backends. |
| +// Volume feedback sounds are only enabled when there are no active audio |
| +// streams (apart from sound-effects streams). |
| class MediaPipelineBackendManager { |
| public: |
| - enum DecoderType { AUDIO_DECODER, VIDEO_DECODER, NUM_DECODER_TYPES }; |
| + class AllowVolumeFeedbackObserver { |
| + public: |
| + virtual void AllowVolumeFeedbackSounds(bool allow) = 0; |
| + |
| + protected: |
| + virtual ~AllowVolumeFeedbackObserver() = default; |
| + }; |
| + |
| + enum DecoderType { |
| + AUDIO_DECODER, |
| + VIDEO_DECODER, |
| + SFX_DECODER, |
| + NUM_DECODER_TYPES |
| + }; |
| explicit MediaPipelineBackendManager( |
| scoped_refptr<base::SingleThreadTaskRunner> media_task_runner); |
| ~MediaPipelineBackendManager(); |
| - // Create media pipeline backend. |
| + // Creates a media pipeline backend. Must be called on the same thread as |
| + // |media_task_runner_|. |
| std::unique_ptr<MediaPipelineBackend> CreateMediaPipelineBackend( |
| const MediaPipelineDeviceParams& params); |
| - // Create media pipeline backend with a specific stream_type. |
| - std::unique_ptr<MediaPipelineBackend> CreateMediaPipelineBackend( |
| - const MediaPipelineDeviceParams& params, |
| - int stream_type); |
| - |
| - // Sets the relative volume for a specified stream type, |
| - // with range [0.0, 1.0] inclusive. If |multiplier| is outside the |
| - // range [0.0, 1.0], it is clamped to that range. |
| - // TODO(tianyuwang): change stream_type to use a enum. |
| - void SetVolumeMultiplier(int stream_type, float volume); |
| - |
| base::SingleThreadTaskRunner* task_runner() const { |
| return media_task_runner_.get(); |
| } |
| + // Adds/removes an observer for when folume feedback sounds are allowed. |
|
halliwell
2017/02/24 21:37:21
"folume"
kmackay
2017/02/24 23:53:29
Done.
|
| + // An observer must be removed on the same thread that added it. |
| + void AddAllowVolumeFeedbackObserver(AllowVolumeFeedbackObserver* observer); |
| + void RemoveAllowVolumeFeedbackObserver(AllowVolumeFeedbackObserver* observer); |
| + |
| private: |
| friend class MediaPipelineBackendWrapper; |
| @@ -56,21 +66,19 @@ class MediaPipelineBackendManager { |
| bool IncrementDecoderCount(DecoderType type); |
| void DecrementDecoderCount(DecoderType type); |
| - // Internal clean up when a new media pipeline backend is destroyed. |
| - void OnMediaPipelineBackendDestroyed(const MediaPipelineBackend* backend); |
| - |
| - float GetVolumeMultiplier(int stream_type); |
| + // Update the count of playing non-effects audio streams. |
| + void UpdatePlayingAudioCount(int change); |
| const scoped_refptr<base::SingleThreadTaskRunner> media_task_runner_; |
| - // A vector that stores all of the existing media_pipeline_backends_. |
| - std::vector<MediaPipelineBackend*> media_pipeline_backends_; |
| - |
| // Total count of decoders created |
| int decoder_count_[NUM_DECODER_TYPES]; |
| - // Volume multiplier for each type of audio streams. |
| - std::map<int, float> volume_by_stream_type_; |
| + // Total number of playing non-effects streams. |
| + int playing_noneffects_audio_streams_count_; |
| + |
| + scoped_refptr<base::ObserverListThreadSafe<AllowVolumeFeedbackObserver>> |
| + allow_volume_feedback_observers_; |
| DISALLOW_COPY_AND_ASSIGN(MediaPipelineBackendManager); |
| }; |