Commit ac3eaeee authored by Takashi Sakamoto's avatar Takashi Sakamoto Committed by Commit Bot

Revert "assistant: add audio ducking for internal media"

This reverts commit f7860793.

Reason for revert: suspect causing compile failure on linux-chromeos-google-rel.

Sample build: https://ci.chromium.org/p/chrome/builders/ci/linux-chromeos-google-rel/8776

Original change's description:
> assistant: add audio ducking for internal media
> 
> Bug: b/135064564
> Test: locally build and run with multiple media playing
> Change-Id: I3814cfc3bc619077ca6781493fd369c27d50eb4e
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1899184
> Commit-Queue: Xiaohui Chen <xiaohuic@chromium.org>
> Reviewed-by: Tao Wu <wutao@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#713200}

TBR=xiaohuic@chromium.org,wutao@chromium.org

Change-Id: I6595ecc2d3ea93a762996386f3af9bf297daed70
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: b/135064564
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1902180Reviewed-by: default avatarTakashi Sakamoto <tasak@google.com>
Commit-Queue: Takashi Sakamoto <tasak@google.com>
Cr-Commit-Position: refs/heads/master@{#713292}
parent 99a5bab9
...@@ -1357,6 +1357,7 @@ void AssistantManagerServiceImpl::MediaSessionMetadataChanged( ...@@ -1357,6 +1357,7 @@ void AssistantManagerServiceImpl::MediaSessionMetadataChanged(
UpdateMediaState(); UpdateMediaState();
} }
void AssistantManagerServiceImpl::OnPlaybackStateChange( void AssistantManagerServiceImpl::OnPlaybackStateChange(
const MediaStatus& status) { const MediaStatus& status) {
if (media_session_) if (media_session_)
......
...@@ -4,10 +4,7 @@ ...@@ -4,10 +4,7 @@
#include "chromeos/services/assistant/media_session/assistant_media_session.h" #include "chromeos/services/assistant/media_session/assistant_media_session.h"
#include <utility>
#include "base/bind.h" #include "base/bind.h"
#include "base/memory/scoped_refptr.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "chromeos/services/assistant/assistant_manager_service_impl.h" #include "chromeos/services/assistant/assistant_manager_service_impl.h"
#include "services/media_session/public/cpp/features.h" #include "services/media_session/public/cpp/features.h"
...@@ -28,10 +25,7 @@ const char kAudioFocusSourceName[] = "assistant"; ...@@ -28,10 +25,7 @@ const char kAudioFocusSourceName[] = "assistant";
AssistantMediaSession::AssistantMediaSession( AssistantMediaSession::AssistantMediaSession(
mojom::Client* client, mojom::Client* client,
AssistantManagerServiceImpl* assistant_manager) AssistantManagerServiceImpl* assistant_manager)
: assistant_manager_service_(assistant_manager), : assistant_manager_service_(assistant_manager), client_(client) {}
client_(client),
ducking_observers_(base::MakeRefCounted<
base::ObserverListThreadSafe<DuckingObserver>>()) {}
AssistantMediaSession::~AssistantMediaSession() { AssistantMediaSession::~AssistantMediaSession() {
AbandonAudioFocusIfNeeded(); AbandonAudioFocusIfNeeded();
...@@ -58,18 +52,20 @@ void AssistantMediaSession::GetDebugInfo(GetDebugInfoCallback callback) { ...@@ -58,18 +52,20 @@ void AssistantMediaSession::GetDebugInfo(GetDebugInfoCallback callback) {
std::move(callback).Run(std::move(info)); std::move(callback).Run(std::move(info));
} }
// TODO(b/135064564): Update StartDucking() and StopDucking() after volume
// control API for media streams is implemented.
void AssistantMediaSession::StartDucking() { void AssistantMediaSession::StartDucking() {
if (is_ducking_) if (is_ducking_)
return; return;
is_ducking_ = true; is_ducking_ = true;
NotifyDucking(FROM_HERE); Suspend(SuspendType::kSystem);
} }
void AssistantMediaSession::StopDucking() { void AssistantMediaSession::StopDucking() {
if (!is_ducking_) if (!is_ducking_)
return; return;
is_ducking_ = false; is_ducking_ = false;
NotifyDucking(FROM_HERE); Resume(SuspendType::kSystem);
} }
void AssistantMediaSession::Suspend(SuspendType suspend_type) { void AssistantMediaSession::Suspend(SuspendType suspend_type) {
...@@ -137,40 +133,6 @@ void AssistantMediaSession::AbandonAudioFocusIfNeeded() { ...@@ -137,40 +133,6 @@ void AssistantMediaSession::AbandonAudioFocusIfNeeded() {
internal_audio_focus_id_ = base::UnguessableToken::Null(); internal_audio_focus_id_ = base::UnguessableToken::Null();
} }
void AssistantMediaSession::NotifyMediaSessionMetadataChanged(
const assistant_client::MediaStatus& status) {
media_session::MediaMetadata metadata;
metadata.title = base::UTF8ToUTF16(status.metadata.title);
metadata.artist = base::UTF8ToUTF16(status.metadata.artist);
metadata.album = base::UTF8ToUTF16(status.metadata.album);
bool metadata_changed = metadata_ != metadata;
if (!metadata_changed)
return;
metadata_ = metadata;
current_track_ = status.track_type;
for (auto& observer : observers_)
observer->MediaSessionMetadataChanged(this->metadata_);
}
void AssistantMediaSession::AddDuckingObserver(DuckingObserver* observer) {
ducking_observers_->AddObserver(observer);
if (is_ducking_)
observer->SetDucking(is_ducking_);
}
void AssistantMediaSession::RemoveDuckingObserver(DuckingObserver* observer) {
ducking_observers_->RemoveObserver(observer);
}
base::WeakPtr<AssistantMediaSession> AssistantMediaSession::GetWeakPtr() {
return weak_factory_.GetWeakPtr();
}
void AssistantMediaSession::EnsureServiceConnection() { void AssistantMediaSession::EnsureServiceConnection() {
DCHECK(base::FeatureList::IsEnabled( DCHECK(base::FeatureList::IsEnabled(
media_session::features::kMediaSessionService)); media_session::features::kMediaSessionService));
...@@ -212,6 +174,26 @@ void AssistantMediaSession::SetAudioFocusInfo(State audio_focus_state, ...@@ -212,6 +174,26 @@ void AssistantMediaSession::SetAudioFocusInfo(State audio_focus_state,
NotifyMediaSessionInfoChanged(); NotifyMediaSessionInfoChanged();
} }
void AssistantMediaSession::NotifyMediaSessionMetadataChanged(
const assistant_client::MediaStatus& status) {
media_session::MediaMetadata metadata;
metadata.title = base::UTF8ToUTF16(status.metadata.title);
metadata.artist = base::UTF8ToUTF16(status.metadata.artist);
metadata.album = base::UTF8ToUTF16(status.metadata.album);
bool metadata_changed = metadata_ != metadata;
if (!metadata_changed)
return;
metadata_ = metadata;
current_track_ = status.track_type;
for (auto& observer : observers_)
observer->MediaSessionMetadataChanged(this->metadata_);
}
media_session::mojom::MediaSessionInfoPtr media_session::mojom::MediaSessionInfoPtr
AssistantMediaSession::GetMediaSessionInfoInternal() { AssistantMediaSession::GetMediaSessionInfoInternal() {
media_session::mojom::MediaSessionInfoPtr info( media_session::mojom::MediaSessionInfoPtr info(
...@@ -258,10 +240,8 @@ bool AssistantMediaSession::IsSuspended() const { ...@@ -258,10 +240,8 @@ bool AssistantMediaSession::IsSuspended() const {
return audio_focus_state_ == State::SUSPENDED; return audio_focus_state_ == State::SUSPENDED;
} }
void AssistantMediaSession::NotifyDucking(const base::Location& location) { base::WeakPtr<AssistantMediaSession> AssistantMediaSession::GetWeakPtr() {
ducking_observers_->Notify( return weak_factory_.GetWeakPtr();
location, &AssistantMediaSession::DuckingObserver::SetDucking,
is_ducking_);
} }
} // namespace assistant } // namespace assistant
......
...@@ -6,8 +6,6 @@ ...@@ -6,8 +6,6 @@
#define CHROMEOS_SERVICES_ASSISTANT_MEDIA_SESSION_ASSISTANT_MEDIA_SESSION_H_ #define CHROMEOS_SERVICES_ASSISTANT_MEDIA_SESSION_ASSISTANT_MEDIA_SESSION_H_
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/scoped_refptr.h"
#include "base/observer_list_threadsafe.h"
#include "base/timer/timer.h" #include "base/timer/timer.h"
#include "base/unguessable_token.h" #include "base/unguessable_token.h"
#include "chromeos/services/assistant/public/mojom/assistant.mojom.h" #include "chromeos/services/assistant/public/mojom/assistant.mojom.h"
...@@ -34,12 +32,6 @@ class AssistantMediaSession : public media_session::mojom::MediaSession { ...@@ -34,12 +32,6 @@ class AssistantMediaSession : public media_session::mojom::MediaSession {
public: public:
enum class State { ACTIVE, SUSPENDED, INACTIVE }; enum class State { ACTIVE, SUSPENDED, INACTIVE };
class DuckingObserver {
public:
virtual ~DuckingObserver() = default;
virtual void SetDucking(bool is_ducking) = 0;
};
explicit AssistantMediaSession( explicit AssistantMediaSession(
mojom::Client* client, mojom::Client* client,
AssistantManagerServiceImpl* assistant_manager); AssistantManagerServiceImpl* assistant_manager);
...@@ -57,6 +49,8 @@ class AssistantMediaSession : public media_session::mojom::MediaSession { ...@@ -57,6 +49,8 @@ class AssistantMediaSession : public media_session::mojom::MediaSession {
override; override;
void PreviousTrack() override {} void PreviousTrack() override {}
void NextTrack() override {} void NextTrack() override {}
void NotifyMediaSessionMetadataChanged(
const assistant_client::MediaStatus& status);
void SkipAd() override {} void SkipAd() override {}
void Seek(base::TimeDelta seek_time) override {} void Seek(base::TimeDelta seek_time) override {}
void Stop(SuspendType suspend_type) override {} void Stop(SuspendType suspend_type) override {}
...@@ -71,12 +65,6 @@ class AssistantMediaSession : public media_session::mojom::MediaSession { ...@@ -71,12 +65,6 @@ class AssistantMediaSession : public media_session::mojom::MediaSession {
void RequestAudioFocus(media_session::mojom::AudioFocusType audio_focus_type); void RequestAudioFocus(media_session::mojom::AudioFocusType audio_focus_type);
void AbandonAudioFocusIfNeeded(); void AbandonAudioFocusIfNeeded();
void NotifyMediaSessionMetadataChanged(
const assistant_client::MediaStatus& status);
void AddDuckingObserver(DuckingObserver* observer);
void RemoveDuckingObserver(DuckingObserver* observer);
base::WeakPtr<AssistantMediaSession> GetWeakPtr(); base::WeakPtr<AssistantMediaSession> GetWeakPtr();
// Returns internal audio focus id. // Returns internal audio focus id.
...@@ -110,8 +98,6 @@ class AssistantMediaSession : public media_session::mojom::MediaSession { ...@@ -110,8 +98,6 @@ class AssistantMediaSession : public media_session::mojom::MediaSession {
// Returns if the session is currently suspended. // Returns if the session is currently suspended.
bool IsSuspended() const; bool IsSuspended() const;
void NotifyDucking(const base::Location& from_here);
// The current metadata associated with the current media session. // The current metadata associated with the current media session.
media_session::MediaMetadata metadata_; media_session::MediaMetadata metadata_;
...@@ -133,9 +119,6 @@ class AssistantMediaSession : public media_session::mojom::MediaSession { ...@@ -133,9 +119,6 @@ class AssistantMediaSession : public media_session::mojom::MediaSession {
// StopDucking(). // StopDucking().
bool is_ducking_ = false; bool is_ducking_ = false;
scoped_refptr<base::ObserverListThreadSafe<DuckingObserver>>
ducking_observers_;
// If the media session has acquired audio focus then this will contain a // If the media session has acquired audio focus then this will contain a
// pointer to that requests AudioFocusRequestClient. // pointer to that requests AudioFocusRequestClient.
mojo::Remote<media_session::mojom::AudioFocusRequestClient> mojo::Remote<media_session::mojom::AudioFocusRequestClient>
......
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
#include <algorithm> #include <algorithm>
#include <utility> #include <utility>
#include "chromeos/services/assistant/media_session/assistant_media_session.h"
#include "media/audio/audio_device_description.h" #include "media/audio/audio_device_description.h"
#include "media/base/limits.h" #include "media/base/limits.h"
#include "services/media_session/public/mojom/media_session.mojom.h" #include "services/media_session/public/mojom/media_session.mojom.h"
...@@ -71,17 +70,13 @@ media::AudioParameters GetAudioParametersFromBufferFormat( ...@@ -71,17 +70,13 @@ media::AudioParameters GetAudioParametersFromBufferFormat(
AudioDeviceOwner::AudioDeviceOwner( AudioDeviceOwner::AudioDeviceOwner(
scoped_refptr<base::SequencedTaskRunner> task_runner, scoped_refptr<base::SequencedTaskRunner> task_runner,
scoped_refptr<base::SequencedTaskRunner> background_task_runner, scoped_refptr<base::SequencedTaskRunner> background_task_runner,
const std::string& device_id, const std::string& device_id)
AssistantMediaSession* media_session)
: main_task_runner_(task_runner), : main_task_runner_(task_runner),
background_task_runner_(background_task_runner), background_task_runner_(background_task_runner),
device_id_(device_id), device_id_(device_id) {}
media_session_(media_session) {}
AudioDeviceOwner::~AudioDeviceOwner() { AudioDeviceOwner::~AudioDeviceOwner() {
DCHECK(background_task_runner_->RunsTasksInCurrentSequence()); DCHECK(background_task_runner_->RunsTasksInCurrentSequence());
if (output_device_)
media_session_->RemoveDuckingObserver(this);
} }
void AudioDeviceOwner::StartOnMainThread( void AudioDeviceOwner::StartOnMainThread(
...@@ -126,34 +121,20 @@ void AudioDeviceOwner::StartOnMainThread( ...@@ -126,34 +121,20 @@ void AudioDeviceOwner::StartOnMainThread(
void AudioDeviceOwner::StopOnBackgroundThread() { void AudioDeviceOwner::StopOnBackgroundThread() {
DCHECK(background_task_runner_->RunsTasksInCurrentSequence()); DCHECK(background_task_runner_->RunsTasksInCurrentSequence());
media_session_->RemoveDuckingObserver(this); base::AutoLock lock(lock_);
output_device_.reset(); output_device_.reset();
{ if (delegate_) {
base::AutoLock lock(lock_); delegate_->OnStopped();
if (delegate_) { delegate_ = nullptr;
delegate_->OnStopped();
delegate_ = nullptr;
}
} }
} }
void AudioDeviceOwner::SetDucking(bool is_ducking) {
// |output_device_| is only accessed on background thread.
DCHECK(background_task_runner_->RunsTasksInCurrentSequence());
constexpr double kDuckingVolume = 0.2;
if (output_device_)
output_device_->SetVolume(is_ducking ? kDuckingVolume : 1.0);
}
void AudioDeviceOwner::StartDeviceOnBackgroundThread( void AudioDeviceOwner::StartDeviceOnBackgroundThread(
mojo::PendingRemote<audio::mojom::StreamFactory> stream_factory) { mojo::PendingRemote<audio::mojom::StreamFactory> stream_factory) {
DCHECK(background_task_runner_->RunsTasksInCurrentSequence()); DCHECK(background_task_runner_->RunsTasksInCurrentSequence());
output_device_ = std::make_unique<audio::OutputDevice>( output_device_ = std::make_unique<audio::OutputDevice>(
std::move(stream_factory), audio_param_, this, device_id_); std::move(stream_factory), audio_param_, this, device_id_);
output_device_->Play(); output_device_->Play();
media_session_->AddDuckingObserver(this);
} }
int AudioDeviceOwner::Render(base::TimeDelta delay, int AudioDeviceOwner::Render(base::TimeDelta delay,
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
#include "base/component_export.h" #include "base/component_export.h"
#include "base/macros.h" #include "base/macros.h"
#include "chromeos/services/assistant/media_session/assistant_media_session.h"
#include "libassistant/shared/public/platform_audio_output.h" #include "libassistant/shared/public/platform_audio_output.h"
#include "media/base/audio_block_fifo.h" #include "media/base/audio_block_fifo.h"
#include "media/base/audio_parameters.h" #include "media/base/audio_parameters.h"
...@@ -24,14 +23,12 @@ namespace chromeos { ...@@ -24,14 +23,12 @@ namespace chromeos {
namespace assistant { namespace assistant {
class COMPONENT_EXPORT(ASSISTANT_SERVICE) AudioDeviceOwner class COMPONENT_EXPORT(ASSISTANT_SERVICE) AudioDeviceOwner
: public media::AudioRendererSink::RenderCallback, : public media::AudioRendererSink::RenderCallback {
AssistantMediaSession::DuckingObserver {
public: public:
AudioDeviceOwner( AudioDeviceOwner(
scoped_refptr<base::SequencedTaskRunner> task_runner, scoped_refptr<base::SequencedTaskRunner> task_runner,
scoped_refptr<base::SequencedTaskRunner> background_task_runner, scoped_refptr<base::SequencedTaskRunner> background_task_runner,
const std::string& device_id, const std::string& device_id);
AssistantMediaSession* media_session);
~AudioDeviceOwner() override; ~AudioDeviceOwner() override;
void StartOnMainThread( void StartOnMainThread(
...@@ -41,9 +38,6 @@ class COMPONENT_EXPORT(ASSISTANT_SERVICE) AudioDeviceOwner ...@@ -41,9 +38,6 @@ class COMPONENT_EXPORT(ASSISTANT_SERVICE) AudioDeviceOwner
void StopOnBackgroundThread(); void StopOnBackgroundThread();
// AssistantMediaSession::DuckingObserver overrides:
void SetDucking(bool is_ducking) override;
// media::AudioRenderSink::RenderCallback overrides: // media::AudioRenderSink::RenderCallback overrides:
int Render(base::TimeDelta delay, int Render(base::TimeDelta delay,
base::TimeTicks delay_timestamp, base::TimeTicks delay_timestamp,
...@@ -84,8 +78,6 @@ class COMPONENT_EXPORT(ASSISTANT_SERVICE) AudioDeviceOwner ...@@ -84,8 +78,6 @@ class COMPONENT_EXPORT(ASSISTANT_SERVICE) AudioDeviceOwner
assistant_client::OutputStreamFormat format_; assistant_client::OutputStreamFormat format_;
media::AudioParameters audio_param_; media::AudioParameters audio_param_;
AssistantMediaSession* media_session_;
DISALLOW_COPY_AND_ASSIGN(AudioDeviceOwner); DISALLOW_COPY_AND_ASSIGN(AudioDeviceOwner);
}; };
......
...@@ -48,8 +48,7 @@ class AudioOutputImpl : public assistant_client::AudioOutput { ...@@ -48,8 +48,7 @@ class AudioOutputImpl : public assistant_client::AudioOutput {
std::make_unique<AudioStreamHandler>(task_runner)), std::make_unique<AudioStreamHandler>(task_runner)),
device_owner_(std::make_unique<AudioDeviceOwner>(task_runner, device_owner_(std::make_unique<AudioDeviceOwner>(task_runner,
background_task_runner, background_task_runner,
device_id, device_id)) {}
media_session)) {}
~AudioOutputImpl() override { ~AudioOutputImpl() override {
// This ensures that it will be executed after StartOnMainThread. // This ensures that it will be executed after StartOnMainThread.
......
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