blob: 6f857fb0b20e86a496101a1bb80eeb3810ede04c [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/media_effects/video_effects_manager_impl.h"
VideoEffectsManagerImpl::VideoEffectsManagerImpl(
PrefService* pref_service,
base::OnceClosure last_receiver_disconnected_handler)
: pref_service_(pref_service),
last_receiver_disconnected_handler_(
std::move(last_receiver_disconnected_handler)) {
configuration_ = media::mojom::VideoEffectsConfiguration::New();
receivers_.set_disconnect_handler(
base::BindRepeating(&VideoEffectsManagerImpl::OnReceiverDisconnected,
base::Unretained(this)));
}
VideoEffectsManagerImpl::~VideoEffectsManagerImpl() = default;
void VideoEffectsManagerImpl::Bind(
mojo::PendingReceiver<media::mojom::ReadonlyVideoEffectsManager> receiver) {
receivers_.Add(this, std::move(receiver));
}
void VideoEffectsManagerImpl::SetConfiguration(
media::mojom::VideoEffectsConfigurationPtr configuration) {
configuration_ = configuration->Clone();
for (const auto& observer : observers_) {
observer->OnConfigurationChanged(configuration_->Clone());
}
}
void VideoEffectsManagerImpl::GetConfiguration(
GetConfigurationCallback callback) {
std::move(callback).Run(configuration_->Clone());
}
void VideoEffectsManagerImpl::AddObserver(
mojo::PendingRemote<media::mojom::VideoEffectsConfigurationObserver>
observer) {
auto id = observers_.Add(std::move(observer));
// Notify new observer of current config state.
observers_.Get(id)->OnConfigurationChanged(configuration_->Clone());
}
void VideoEffectsManagerImpl::OnReceiverDisconnected() {
if (!receivers_.empty()) {
return;
}
std::move(last_receiver_disconnected_handler_).Run();
}