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(
UpdateMediaState();
}
void AssistantManagerServiceImpl::OnPlaybackStateChange(
const MediaStatus& status) {
if (media_session_)
......
......@@ -4,10 +4,7 @@
#include "chromeos/services/assistant/media_session/assistant_media_session.h"
#include <utility>
#include "base/bind.h"
#include "base/memory/scoped_refptr.h"
#include "base/strings/utf_string_conversions.h"
#include "chromeos/services/assistant/assistant_manager_service_impl.h"
#include "services/media_session/public/cpp/features.h"
......@@ -28,10 +25,7 @@ const char kAudioFocusSourceName[] = "assistant";
AssistantMediaSession::AssistantMediaSession(
mojom::Client* client,
AssistantManagerServiceImpl* assistant_manager)
: assistant_manager_service_(assistant_manager),
client_(client),
ducking_observers_(base::MakeRefCounted<
base::ObserverListThreadSafe<DuckingObserver>>()) {}
: assistant_manager_service_(assistant_manager), client_(client) {}
AssistantMediaSession::~AssistantMediaSession() {
AbandonAudioFocusIfNeeded();
......@@ -58,18 +52,20 @@ void AssistantMediaSession::GetDebugInfo(GetDebugInfoCallback callback) {
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() {
if (is_ducking_)
return;
is_ducking_ = true;
NotifyDucking(FROM_HERE);
Suspend(SuspendType::kSystem);
}
void AssistantMediaSession::StopDucking() {
if (!is_ducking_)
return;
is_ducking_ = false;
NotifyDucking(FROM_HERE);
Resume(SuspendType::kSystem);
}
void AssistantMediaSession::Suspend(SuspendType suspend_type) {
......@@ -137,40 +133,6 @@ void AssistantMediaSession::AbandonAudioFocusIfNeeded() {
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() {
DCHECK(base::FeatureList::IsEnabled(
media_session::features::kMediaSessionService));
......@@ -212,6 +174,26 @@ void AssistantMediaSession::SetAudioFocusInfo(State audio_focus_state,
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
AssistantMediaSession::GetMediaSessionInfoInternal() {
media_session::mojom::MediaSessionInfoPtr info(
......@@ -258,10 +240,8 @@ bool AssistantMediaSession::IsSuspended() const {
return audio_focus_state_ == State::SUSPENDED;
}
void AssistantMediaSession::NotifyDucking(const base::Location& location) {
ducking_observers_->Notify(
location, &AssistantMediaSession::DuckingObserver::SetDucking,
is_ducking_);
base::WeakPtr<AssistantMediaSession> AssistantMediaSession::GetWeakPtr() {
return weak_factory_.GetWeakPtr();
}
} // namespace assistant
......
......@@ -6,8 +6,6 @@
#define CHROMEOS_SERVICES_ASSISTANT_MEDIA_SESSION_ASSISTANT_MEDIA_SESSION_H_
#include "base/macros.h"
#include "base/memory/scoped_refptr.h"
#include "base/observer_list_threadsafe.h"
#include "base/timer/timer.h"
#include "base/unguessable_token.h"
#include "chromeos/services/assistant/public/mojom/assistant.mojom.h"
......@@ -34,12 +32,6 @@ class AssistantMediaSession : public media_session::mojom::MediaSession {
public:
enum class State { ACTIVE, SUSPENDED, INACTIVE };
class DuckingObserver {
public:
virtual ~DuckingObserver() = default;
virtual void SetDucking(bool is_ducking) = 0;
};
explicit AssistantMediaSession(
mojom::Client* client,
AssistantManagerServiceImpl* assistant_manager);
......@@ -57,6 +49,8 @@ class AssistantMediaSession : public media_session::mojom::MediaSession {
override;
void PreviousTrack() override {}
void NextTrack() override {}
void NotifyMediaSessionMetadataChanged(
const assistant_client::MediaStatus& status);
void SkipAd() override {}
void Seek(base::TimeDelta seek_time) override {}
void Stop(SuspendType suspend_type) override {}
......@@ -71,12 +65,6 @@ class AssistantMediaSession : public media_session::mojom::MediaSession {
void RequestAudioFocus(media_session::mojom::AudioFocusType audio_focus_type);
void AbandonAudioFocusIfNeeded();
void NotifyMediaSessionMetadataChanged(
const assistant_client::MediaStatus& status);
void AddDuckingObserver(DuckingObserver* observer);
void RemoveDuckingObserver(DuckingObserver* observer);
base::WeakPtr<AssistantMediaSession> GetWeakPtr();
// Returns internal audio focus id.
......@@ -110,8 +98,6 @@ class AssistantMediaSession : public media_session::mojom::MediaSession {
// Returns if the session is currently suspended.
bool IsSuspended() const;
void NotifyDucking(const base::Location& from_here);
// The current metadata associated with the current media session.
media_session::MediaMetadata metadata_;
......@@ -133,9 +119,6 @@ class AssistantMediaSession : public media_session::mojom::MediaSession {
// StopDucking().
bool is_ducking_ = false;
scoped_refptr<base::ObserverListThreadSafe<DuckingObserver>>
ducking_observers_;
// If the media session has acquired audio focus then this will contain a
// pointer to that requests AudioFocusRequestClient.
mojo::Remote<media_session::mojom::AudioFocusRequestClient>
......
......@@ -7,7 +7,6 @@
#include <algorithm>
#include <utility>
#include "chromeos/services/assistant/media_session/assistant_media_session.h"
#include "media/audio/audio_device_description.h"
#include "media/base/limits.h"
#include "services/media_session/public/mojom/media_session.mojom.h"
......@@ -71,17 +70,13 @@ media::AudioParameters GetAudioParametersFromBufferFormat(
AudioDeviceOwner::AudioDeviceOwner(
scoped_refptr<base::SequencedTaskRunner> task_runner,
scoped_refptr<base::SequencedTaskRunner> background_task_runner,
const std::string& device_id,
AssistantMediaSession* media_session)
const std::string& device_id)
: main_task_runner_(task_runner),
background_task_runner_(background_task_runner),
device_id_(device_id),
media_session_(media_session) {}
device_id_(device_id) {}
AudioDeviceOwner::~AudioDeviceOwner() {
DCHECK(background_task_runner_->RunsTasksInCurrentSequence());
if (output_device_)
media_session_->RemoveDuckingObserver(this);
}
void AudioDeviceOwner::StartOnMainThread(
......@@ -126,34 +121,20 @@ void AudioDeviceOwner::StartOnMainThread(
void AudioDeviceOwner::StopOnBackgroundThread() {
DCHECK(background_task_runner_->RunsTasksInCurrentSequence());
media_session_->RemoveDuckingObserver(this);
base::AutoLock lock(lock_);
output_device_.reset();
{
base::AutoLock lock(lock_);
if (delegate_) {
delegate_->OnStopped();
delegate_ = nullptr;
}
if (delegate_) {
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(
mojo::PendingRemote<audio::mojom::StreamFactory> stream_factory) {
DCHECK(background_task_runner_->RunsTasksInCurrentSequence());
output_device_ = std::make_unique<audio::OutputDevice>(
std::move(stream_factory), audio_param_, this, device_id_);
output_device_->Play();
media_session_->AddDuckingObserver(this);
}
int AudioDeviceOwner::Render(base::TimeDelta delay,
......
......@@ -11,7 +11,6 @@
#include "base/component_export.h"
#include "base/macros.h"
#include "chromeos/services/assistant/media_session/assistant_media_session.h"
#include "libassistant/shared/public/platform_audio_output.h"
#include "media/base/audio_block_fifo.h"
#include "media/base/audio_parameters.h"
......@@ -24,14 +23,12 @@ namespace chromeos {
namespace assistant {
class COMPONENT_EXPORT(ASSISTANT_SERVICE) AudioDeviceOwner
: public media::AudioRendererSink::RenderCallback,
AssistantMediaSession::DuckingObserver {
: public media::AudioRendererSink::RenderCallback {
public:
AudioDeviceOwner(
scoped_refptr<base::SequencedTaskRunner> task_runner,
scoped_refptr<base::SequencedTaskRunner> background_task_runner,
const std::string& device_id,
AssistantMediaSession* media_session);
const std::string& device_id);
~AudioDeviceOwner() override;
void StartOnMainThread(
......@@ -41,9 +38,6 @@ class COMPONENT_EXPORT(ASSISTANT_SERVICE) AudioDeviceOwner
void StopOnBackgroundThread();
// AssistantMediaSession::DuckingObserver overrides:
void SetDucking(bool is_ducking) override;
// media::AudioRenderSink::RenderCallback overrides:
int Render(base::TimeDelta delay,
base::TimeTicks delay_timestamp,
......@@ -84,8 +78,6 @@ class COMPONENT_EXPORT(ASSISTANT_SERVICE) AudioDeviceOwner
assistant_client::OutputStreamFormat format_;
media::AudioParameters audio_param_;
AssistantMediaSession* media_session_;
DISALLOW_COPY_AND_ASSIGN(AudioDeviceOwner);
};
......
......@@ -48,8 +48,7 @@ class AudioOutputImpl : public assistant_client::AudioOutput {
std::make_unique<AudioStreamHandler>(task_runner)),
device_owner_(std::make_unique<AudioDeviceOwner>(task_runner,
background_task_runner,
device_id,
media_session)) {}
device_id)) {}
~AudioOutputImpl() override {
// 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