Commit 0e233a30 authored by Junbo Ke's avatar Junbo Ke Committed by Commit Bot

[Chromecast] Add an interface for MediaPipelineBackendManager to set

global volume multiplier for extra audio streams.

Bug: b/134381697
Test: On device
Change-Id: Idbabbfef0381f00d330263d721c6da0fc4c752ad
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1681384
Commit-Queue: Junbo Ke <juke@chromium.org>
Reviewed-by: default avatarKenneth MacKay <kmackay@chromium.org>
Cr-Commit-Position: refs/heads/master@{#673399}
parent 5dc41fda
......@@ -24,6 +24,7 @@ cast_source_set("backend") {
"cma_backend_factory.h",
"cma_backend_factory_impl.cc",
"cma_backend_factory_impl.h",
"extra_audio_stream.h",
"media_pipeline_backend_manager.cc",
"media_pipeline_backend_manager.h",
"media_pipeline_backend_wrapper.cc",
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROMECAST_MEDIA_CMA_BACKEND_EXTRA_AUDIO_STREAM_H_
#define CHROMECAST_MEDIA_CMA_BACKEND_EXTRA_AUDIO_STREAM_H_
namespace chromecast {
namespace media {
class ExtraAudioStream {
public:
virtual void SetGlobalVolumeMultiplier(float multiplier) = 0;
protected:
virtual ~ExtraAudioStream() = default;
};
} // namespace media
} // namespace chromecast
#endif // CHROMECAST_MEDIA_CMA_BACKEND_EXTRA_AUDIO_STREAM_H_
......@@ -15,6 +15,7 @@
#include "chromecast/chromecast_buildflags.h"
#include "chromecast/media/cma/backend/audio_decoder_wrapper.h"
#include "chromecast/media/cma/backend/cma_backend.h"
#include "chromecast/media/cma/backend/extra_audio_stream.h"
#include "chromecast/media/cma/backend/media_pipeline_backend_wrapper.h"
#include "chromecast/public/volume_control.h"
......@@ -209,16 +210,23 @@ void MediaPipelineBackendManager::RemoveAllowVolumeFeedbackObserver(
void MediaPipelineBackendManager::AddExtraPlayingStream(
bool sfx,
const AudioContentType type) {
MAKE_SURE_MEDIA_THREAD(AddExtraPlayingStream, sfx, type);
const AudioContentType type,
ExtraAudioStream* extra_audio_stream) {
MAKE_SURE_MEDIA_THREAD(AddExtraPlayingStream, sfx, type, extra_audio_stream);
UpdatePlayingAudioCount(sfx, type, 1);
if (extra_audio_stream)
extra_audio_streams_[type].emplace(extra_audio_stream);
}
void MediaPipelineBackendManager::RemoveExtraPlayingStream(
bool sfx,
const AudioContentType type) {
MAKE_SURE_MEDIA_THREAD(RemoveExtraPlayingStream, sfx, type);
const AudioContentType type,
ExtraAudioStream* extra_audio_stream) {
MAKE_SURE_MEDIA_THREAD(RemoveExtraPlayingStream, sfx, type,
extra_audio_stream);
UpdatePlayingAudioCount(sfx, type, -1);
if (extra_audio_stream)
extra_audio_streams_[type].erase(extra_audio_stream);
}
void MediaPipelineBackendManager::SetGlobalVolumeMultiplier(
......@@ -232,6 +240,9 @@ void MediaPipelineBackendManager::SetGlobalVolumeMultiplier(
a->SetGlobalVolumeMultiplier(multiplier);
}
}
for (auto* extra_audio_stream : extra_audio_streams_[type]) {
extra_audio_stream->SetGlobalVolumeMultiplier(multiplier);
}
}
void MediaPipelineBackendManager::SetBufferDelegate(
......
......@@ -26,6 +26,7 @@ namespace media {
enum class AudioContentType;
class CastDecoderBuffer;
class CmaBackend;
class ExtraAudioStream;
class MediaPipelineBackendWrapper;
class ActiveAudioDecoderWrapper;
class ActiveMediaPipelineBackendWrapper;
......@@ -115,8 +116,12 @@ class MediaPipelineBackendManager {
// CmaBackend instance (for example, direct audio output using
// CastMediaShlib::AddDirectAudioSource()). |sfx| indicates whether or not
// the stream is a sound effects stream (has no effect on volume feedback).
void AddExtraPlayingStream(bool sfx, const AudioContentType type);
void RemoveExtraPlayingStream(bool sfx, const AudioContentType type);
void AddExtraPlayingStream(bool sfx,
const AudioContentType type,
ExtraAudioStream* extra_audio_stream = nullptr);
void RemoveExtraPlayingStream(bool sfx,
const AudioContentType type,
ExtraAudioStream* extra_audio_stream = nullptr);
// Sets a global multiplier for output volume for streams of the given |type|.
// The multiplier may be any value >= 0; if the resulting volume for an
......@@ -173,6 +178,8 @@ class MediaPipelineBackendManager {
allow_volume_feedback_observers_;
base::flat_set<ActiveAudioDecoderWrapper*> audio_decoders_;
base::flat_map<AudioContentType, base::flat_set<ExtraAudioStream*>>
extra_audio_streams_;
base::flat_map<AudioContentType, float> global_volume_multipliers_;
// Previously issued MediaPipelineBackendWrapper that uses a video decoder.
......
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