1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
// 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.
#ifndef COMPONENTS_MEDIA_EFFECTS_MEDIA_EFFECTS_SERVICE_H_
#define COMPONENTS_MEDIA_EFFECTS_MEDIA_EFFECTS_SERVICE_H_
#include "components/keyed_service/core/keyed_service.h"
#include "components/media_effects/video_effects_manager_impl.h"
#include "content/public/browser/browser_context.h"
#include "services/video_capture/public/mojom/video_effects_manager.mojom.h"
class MediaEffectsService : public KeyedService {
public:
explicit MediaEffectsService(PrefService* prefs);
MediaEffectsService(const MediaEffectsService&) = delete;
MediaEffectsService& operator=(const MediaEffectsService&) = delete;
MediaEffectsService(MediaEffectsService&&) = delete;
MediaEffectsService& operator=(MediaEffectsService&&) = delete;
~MediaEffectsService() override;
// Connects a `VideoEffectsManagerImpl` to the provided
// `effects_manager_receiver`. If the keyd profile already has a manager for
// the passed `device_id`, then it will be used. Otherwise, a new manager will
// be created.
//
// The device id must be the raw string from
// `media::mojom::VideoCaptureDeviceDescriptor::device_id`.
//
// Note that this API only allows interacting with the manager via mojo in
// order to support communication with the VideoCaptureService in a different
// process. The usages in Browser UI could potentially directly interact with
// a manager instance in order to avoid the mojo overhead, interactions
// are expected to be very low frequency and this approach is worth that
// tradeoff given the benefits:
// * A consistent interaction mechanism for both in-process and
// out-of-process clients
// * Automatic cleanup when all remotes are disconnected
void BindVideoEffectsManager(
const std::string& device_id,
mojo::PendingReceiver<video_capture::mojom::VideoEffectsManager>
effects_manager_receiver);
private:
VideoEffectsManagerImpl& GetOrCreateVideoEffectsManager(
const std::string& device_id);
void OnLastReceiverDisconnected(const std::string& device_id);
raw_ptr<PrefService> prefs_;
// Device ID strings mapped to effects manager instances.
base::flat_map<std::string, std::unique_ptr<VideoEffectsManagerImpl>>
video_effects_managers_;
};
#endif // COMPONENTS_MEDIA_EFFECTS_MEDIA_EFFECTS_SERVICE_H_
|