blob: c47ce57fa6492eb96b14dc25bfea2e099245c125 [file] [log] [blame]
Bryant Chandler32ca6382023-08-02 21:52:311// Copyright 2023 The Chromium Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Bryant Chandlerd5890afb2023-09-11 19:12:135#include "components/media_effects/media_effects_service.h"
Bryant Chandler32ca6382023-08-02 21:52:316
Piotr Bialecki7a3cfb22024-07-31 04:53:247#include <memory>
Piotr Bialecki55f635a2025-01-10 20:04:228#include <optional>
Piotr Bialecki7a3cfb22024-07-31 04:53:249
10#include "base/containers/span.h"
11#include "base/files/file_path.h"
12#include "base/files/file_util.h"
13#include "base/files/scoped_temp_dir.h"
14#include "base/files/scoped_temp_file.h"
15#include "base/memory/weak_ptr.h"
16#include "base/observer_list.h"
Bryant Chandler32ca6382023-08-02 21:52:3117#include "base/run_loop.h"
18#include "base/test/test_future.h"
Bryant Chandler2c84a6c2023-09-14 14:23:4319#include "components/user_prefs/test/test_browser_context_with_prefs.h"
Bryant Chandler32ca6382023-08-02 21:52:3120#include "content/public/test/browser_task_environment.h"
Piotr Bialeckic2c709d2024-03-27 21:04:0921#include "mojo/public/cpp/bindings/remote.h"
Piotr Bialeckia7fc11e2025-05-05 19:34:3222#include "services/video_effects/public/cpp/buildflags.h"
23#include "testing/gtest/include/gtest/gtest.h"
24#include "ui/gfx/geometry/insets_f.h"
25
26#if BUILDFLAG(ENABLE_VIDEO_EFFECTS)
27#include "components/media_effects/media_effects_model_provider.h"
Piotr Bialecki5a6c9112024-09-20 01:51:5028#include "services/video_effects/public/cpp/video_effects_service_host.h"
Piotr Bialeckic2c709d2024-03-27 21:04:0929#include "services/video_effects/public/mojom/video_effects_processor.mojom.h"
30#include "services/video_effects/public/mojom/video_effects_service.mojom-forward.h"
31#include "services/video_effects/test/fake_video_effects_service.h"
Piotr Bialeckia7fc11e2025-05-05 19:34:3232#endif
Bryant Chandler32ca6382023-08-02 21:52:3133
34namespace {
35
36constexpr char kDeviceId[] = "test_device";
ahmedmoussae5e4a4202025-01-24 01:16:3637constexpr char kDeviceId1[] = "test_device_1";
38constexpr char kDeviceId2[] = "test_device_2";
Bryant Chandler32ca6382023-08-02 21:52:3139
Bryant Chandler23896e32024-03-06 17:58:0340media::mojom::VideoEffectsConfigurationPtr GetConfigurationSync(
ahmedmoussa1d14f3c2025-01-24 01:17:3641 mojo::Remote<media::mojom::ReadonlyVideoEffectsManager>& effects_manager) {
Bryant Chandler23896e32024-03-06 17:58:0342 base::test::TestFuture<media::mojom::VideoEffectsConfigurationPtr>
Bryant Chandler32ca6382023-08-02 21:52:3143 output_configuration;
44 effects_manager->GetConfiguration(output_configuration.GetCallback());
45 return output_configuration.Take();
46}
47
ahmedmoussae5e4a4202025-01-24 01:16:3648void SetFramingSync(VideoEffectsManagerImpl& effects_manager,
49 float framing_padding_ratio) {
50 effects_manager.SetConfiguration(media::mojom::VideoEffectsConfiguration::New(
51 nullptr, nullptr,
52 media::mojom::Framing::New(gfx::InsetsF{framing_padding_ratio})));
Bryant Chandler32ca6382023-08-02 21:52:3153}
Piotr Bialecki7a3cfb22024-07-31 04:53:2454
Piotr Bialeckia7fc11e2025-05-05 19:34:3255#if BUILDFLAG(ENABLE_VIDEO_EFFECTS)
Piotr Bialecki7a3cfb22024-07-31 04:53:2456class FakeModelProvider : public MediaEffectsModelProvider {
57 public:
58 ~FakeModelProvider() override = default;
59
60 // MediaEffectsModelProvider:
61 void AddObserver(Observer* observer) override {
62 observers_.AddObserver(observer);
63 if (model_path_) {
Piotr Bialecki55f635a2025-01-10 20:04:2264 observer->OnBackgroundSegmentationModelUpdated(model_path_);
Piotr Bialecki7a3cfb22024-07-31 04:53:2465 }
66 }
67
68 void RemoveObserver(Observer* observer) override {
69 observers_.RemoveObserver(observer);
70 }
71
72 // Sets the model path and notifies observers about it:
Piotr Bialecki55f635a2025-01-10 20:04:2273 void SetModelPath(std::optional<base::FilePath> model_path) {
Piotr Bialecki7a3cfb22024-07-31 04:53:2474 model_path_ = std::move(model_path);
75 for (auto& observer : observers_) {
Piotr Bialecki55f635a2025-01-10 20:04:2276 observer.OnBackgroundSegmentationModelUpdated(model_path_);
Piotr Bialecki7a3cfb22024-07-31 04:53:2477 }
78 }
79
80 base::WeakPtr<FakeModelProvider> weak_ptr() {
81 return weak_ptr_factory_.GetWeakPtr();
82 }
83
84 private:
85 base::ObserverList<Observer> observers_;
86 std::optional<base::FilePath> model_path_;
87
88 // Must be last:
89 base::WeakPtrFactory<FakeModelProvider> weak_ptr_factory_{this};
90};
Piotr Bialeckia7fc11e2025-05-05 19:34:3291#endif
Piotr Bialecki7a3cfb22024-07-31 04:53:2492
Bryant Chandler32ca6382023-08-02 21:52:3193} // namespace
94
95class MediaEffectsServiceTest : public testing::Test {
Piotr Bialecki7a3cfb22024-07-31 04:53:2496 public:
97 MediaEffectsServiceTest() {
Piotr Bialeckia7fc11e2025-05-05 19:34:3298#if BUILDFLAG(ENABLE_VIDEO_EFFECTS)
Piotr Bialecki7a3cfb22024-07-31 04:53:2499 auto model_provider = std::make_unique<FakeModelProvider>();
100 model_provider_ = model_provider->weak_ptr();
Piotr Bialecki7a3cfb22024-07-31 04:53:24101 service_.emplace(browser_context_.prefs(), std::move(model_provider));
Piotr Bialeckia7fc11e2025-05-05 19:34:32102#else
103 service_.emplace(browser_context_.prefs());
104#endif
Piotr Bialecki7a3cfb22024-07-31 04:53:24105 }
106
Bryant Chandler32ca6382023-08-02 21:52:31107 protected:
Bryant Chandler32ca6382023-08-02 21:52:31108 content::BrowserTaskEnvironment task_environment_;
Bryant Chandler2c84a6c2023-09-14 14:23:43109 user_prefs::TestBrowserContextWithPrefs browser_context_;
Piotr Bialecki7a3cfb22024-07-31 04:53:24110 std::optional<MediaEffectsService> service_;
Piotr Bialeckia7fc11e2025-05-05 19:34:32111#if BUILDFLAG(ENABLE_VIDEO_EFFECTS)
Piotr Bialecki7a3cfb22024-07-31 04:53:24112 base::WeakPtr<FakeModelProvider> model_provider_;
Piotr Bialeckia7fc11e2025-05-05 19:34:32113#endif
Bryant Chandler32ca6382023-08-02 21:52:31114};
115
ahmedmoussa1d14f3c2025-01-24 01:17:36116TEST_F(MediaEffectsServiceTest, BindReadonlyVideoEffectsManager) {
117 mojo::Remote<media::mojom::ReadonlyVideoEffectsManager> effects_manager;
118 service_->BindReadonlyVideoEffectsManager(
Bryant Chandler32ca6382023-08-02 21:52:31119 kDeviceId, effects_manager.BindNewPipeAndPassReceiver());
120
121 EXPECT_TRUE(GetConfigurationSync(effects_manager)->framing.is_null());
122
123 const float kFramingPaddingRatio = 0.2;
ahmedmoussae5e4a4202025-01-24 01:16:36124 SetFramingSync(service_->GetOrCreateVideoEffectsManager(kDeviceId),
125 kFramingPaddingRatio);
Bryant Chandler32ca6382023-08-02 21:52:31126
127 auto configuration = GetConfigurationSync(effects_manager);
128 EXPECT_EQ(gfx::InsetsF{kFramingPaddingRatio},
129 configuration->framing->padding_ratios);
130}
131
ahmedmoussa1d14f3c2025-01-24 01:17:36132TEST_F(
133 MediaEffectsServiceTest,
134 BindReadonlyVideoEffectsManager_TwoRegistrantsWithSameIdConnectToSameManager) {
135 mojo::Remote<media::mojom::ReadonlyVideoEffectsManager> effects_manager1;
136 service_->BindReadonlyVideoEffectsManager(
Bryant Chandler32ca6382023-08-02 21:52:31137 kDeviceId, effects_manager1.BindNewPipeAndPassReceiver());
138
139 const float kFramingPaddingRatio = 0.234;
ahmedmoussae5e4a4202025-01-24 01:16:36140 SetFramingSync(service_->GetOrCreateVideoEffectsManager(kDeviceId),
141 kFramingPaddingRatio);
Bryant Chandler32ca6382023-08-02 21:52:31142
143 EXPECT_EQ(gfx::InsetsF{kFramingPaddingRatio},
144 GetConfigurationSync(effects_manager1)->framing->padding_ratios);
145
ahmedmoussa1d14f3c2025-01-24 01:17:36146 mojo::Remote<media::mojom::ReadonlyVideoEffectsManager> effects_manager2;
147 service_->BindReadonlyVideoEffectsManager(
Bryant Chandler32ca6382023-08-02 21:52:31148 kDeviceId, effects_manager2.BindNewPipeAndPassReceiver());
149
150 EXPECT_EQ(gfx::InsetsF{kFramingPaddingRatio},
151 GetConfigurationSync(effects_manager2)->framing->padding_ratios);
152}
153
154TEST_F(
155 MediaEffectsServiceTest,
ahmedmoussa1d14f3c2025-01-24 01:17:36156 BindReadonlyVideoEffectsManager_TwoRegistrantsWithDifferentIdConnectToDifferentManager) {
157 mojo::Remote<media::mojom::ReadonlyVideoEffectsManager> effects_manager1;
158 service_->BindReadonlyVideoEffectsManager(
ahmedmoussae5e4a4202025-01-24 01:16:36159 kDeviceId1, effects_manager1.BindNewPipeAndPassReceiver());
Bryant Chandler32ca6382023-08-02 21:52:31160
161 const float kFramingPaddingRatio = 0.234;
ahmedmoussae5e4a4202025-01-24 01:16:36162 SetFramingSync(service_->GetOrCreateVideoEffectsManager(kDeviceId1),
163 kFramingPaddingRatio);
Bryant Chandler32ca6382023-08-02 21:52:31164
165 EXPECT_EQ(gfx::InsetsF{kFramingPaddingRatio},
166 GetConfigurationSync(effects_manager1)->framing->padding_ratios);
167
ahmedmoussa1d14f3c2025-01-24 01:17:36168 mojo::Remote<media::mojom::ReadonlyVideoEffectsManager> effects_manager2;
169 service_->BindReadonlyVideoEffectsManager(
ahmedmoussae5e4a4202025-01-24 01:16:36170 kDeviceId2, effects_manager2.BindNewPipeAndPassReceiver());
Bryant Chandler32ca6382023-08-02 21:52:31171
172 // Expect `framing` to be unset because it is a separate instance of
173 // `VideoEffectsManager`.
174 auto framing = std::move(GetConfigurationSync(effects_manager2)->framing);
175 EXPECT_TRUE(framing.is_null());
176}
177
178TEST_F(
179 MediaEffectsServiceTest,
180 OnLastReceiverDisconnected_ErasesTheManagerWhenAllReceiversAreDisconnected) {
Piotr Bialeckia7fc11e2025-05-05 19:34:32181 mojo::Remote<media::mojom::ReadonlyVideoEffectsManager> effects_manager1;
182 service_->BindReadonlyVideoEffectsManager(
183 kDeviceId, effects_manager1.BindNewPipeAndPassReceiver());
184 mojo::Remote<media::mojom::ReadonlyVideoEffectsManager> effects_manager2;
185 service_->BindReadonlyVideoEffectsManager(
186 kDeviceId, effects_manager2.BindNewPipeAndPassReceiver());
187
188 const float kFramingPaddingRatio = 0.234;
189
190 SetFramingSync(service_->GetOrCreateVideoEffectsManager(kDeviceId),
191 kFramingPaddingRatio);
192
193 EXPECT_EQ(gfx::InsetsF{kFramingPaddingRatio},
194 GetConfigurationSync(effects_manager1)->framing->padding_ratios);
195
196 EXPECT_EQ(gfx::InsetsF{kFramingPaddingRatio},
197 GetConfigurationSync(effects_manager2)->framing->padding_ratios);
198
199 effects_manager1.reset();
200 effects_manager2.reset();
201 // Wait for the reset to complete
202 base::RunLoop().RunUntilIdle();
203
204 mojo::Remote<media::mojom::ReadonlyVideoEffectsManager> effects_manager3;
205 service_->BindReadonlyVideoEffectsManager(
206 kDeviceId, effects_manager3.BindNewPipeAndPassReceiver());
207
208 // Expect `framing` to be unset because it is a new instance of
209 // `VideoEffectsManager`.
210 EXPECT_TRUE(GetConfigurationSync(effects_manager3)->framing.is_null());
211}
212
213#if BUILDFLAG(ENABLE_VIDEO_EFFECTS)
214TEST_F(
215 MediaEffectsServiceTest,
216 OnLastReceiverDisconnected_ErasesTheManagerWhenAllReceiversAreDisconnectedWithEffects) {
Piotr Bialeckic2c709d2024-03-27 21:04:09217 mojo::Remote<video_effects::mojom::VideoEffectsService> service;
218 video_effects::FakeVideoEffectsService fake_effects_service(
219 service.BindNewPipeAndPassReceiver());
Piotr Bialecki5a6c9112024-09-20 01:51:50220 auto service_reset =
221 video_effects::SetVideoEffectsServiceRemoteForTesting(&service);
Piotr Bialeckic2c709d2024-03-27 21:04:09222
ahmedmoussa1d14f3c2025-01-24 01:17:36223 mojo::Remote<media::mojom::ReadonlyVideoEffectsManager> effects_manager1;
224 service_->BindReadonlyVideoEffectsManager(
Bryant Chandler32ca6382023-08-02 21:52:31225 kDeviceId, effects_manager1.BindNewPipeAndPassReceiver());
ahmedmoussa1d14f3c2025-01-24 01:17:36226 mojo::Remote<media::mojom::ReadonlyVideoEffectsManager> effects_manager2;
227 service_->BindReadonlyVideoEffectsManager(
Bryant Chandler32ca6382023-08-02 21:52:31228 kDeviceId, effects_manager2.BindNewPipeAndPassReceiver());
229
Piotr Bialeckic2c709d2024-03-27 21:04:09230 auto effects_processor_future =
231 fake_effects_service.GetEffectsProcessorCreationFuture();
232
233 mojo::Remote<video_effects::mojom::VideoEffectsProcessor> effects_processor;
Piotr Bialecki7a3cfb22024-07-31 04:53:24234 service_->BindVideoEffectsProcessor(
Piotr Bialeckic2c709d2024-03-27 21:04:09235 kDeviceId, effects_processor.BindNewPipeAndPassReceiver());
236
Bryant Chandler32ca6382023-08-02 21:52:31237 const float kFramingPaddingRatio = 0.234;
238
ahmedmoussae5e4a4202025-01-24 01:16:36239 SetFramingSync(service_->GetOrCreateVideoEffectsManager(kDeviceId),
240 kFramingPaddingRatio);
Bryant Chandler32ca6382023-08-02 21:52:31241
242 EXPECT_EQ(gfx::InsetsF{kFramingPaddingRatio},
243 GetConfigurationSync(effects_manager1)->framing->padding_ratios);
244
245 EXPECT_EQ(gfx::InsetsF{kFramingPaddingRatio},
246 GetConfigurationSync(effects_manager2)->framing->padding_ratios);
247
Piotr Bialeckic2c709d2024-03-27 21:04:09248 // Wait for the fake effects service to create the processor:
Mikel Astiz3c138fa2025-03-10 13:37:19249 EXPECT_TRUE(effects_processor_future.Wait());
Piotr Bialeckic2c709d2024-03-27 21:04:09250 ASSERT_EQ(fake_effects_service.GetProcessors().size(), 1u);
251 EXPECT_EQ(
252 gfx::InsetsF{kFramingPaddingRatio},
253 GetConfigurationSync(fake_effects_service.GetProcessors()[kDeviceId]
254 ->GetVideoEffectsManager())
255 ->framing->padding_ratios);
256
Bryant Chandler32ca6382023-08-02 21:52:31257 effects_manager1.reset();
258 effects_manager2.reset();
Piotr Bialeckic2c709d2024-03-27 21:04:09259 fake_effects_service.GetProcessors().erase(kDeviceId);
Bryant Chandler32ca6382023-08-02 21:52:31260 // Wait for the reset to complete
261 base::RunLoop().RunUntilIdle();
262
ahmedmoussa1d14f3c2025-01-24 01:17:36263 mojo::Remote<media::mojom::ReadonlyVideoEffectsManager> effects_manager3;
264 service_->BindReadonlyVideoEffectsManager(
Bryant Chandler32ca6382023-08-02 21:52:31265 kDeviceId, effects_manager3.BindNewPipeAndPassReceiver());
266
267 // Expect `framing` to be unset because it is a new instance of
268 // `VideoEffectsManager`.
269 EXPECT_TRUE(GetConfigurationSync(effects_manager3)->framing.is_null());
270}
Piotr Bialeckic2c709d2024-03-27 21:04:09271
272TEST_F(MediaEffectsServiceTest, BindVideoEffectsProcessor) {
273 // Tests that `MediaEffectsService::BindVideoEffectsProcessor()` works, i.e.
274 // causes the passed in remote to be connected.
275
276 mojo::Remote<video_effects::mojom::VideoEffectsService> service;
277 video_effects::FakeVideoEffectsService fake_effects_service(
278 service.BindNewPipeAndPassReceiver());
Piotr Bialecki5a6c9112024-09-20 01:51:50279 auto service_reset =
280 video_effects::SetVideoEffectsServiceRemoteForTesting(&service);
Piotr Bialeckic2c709d2024-03-27 21:04:09281
282 auto effects_processor_future =
283 fake_effects_service.GetEffectsProcessorCreationFuture();
284
285 mojo::Remote<video_effects::mojom::VideoEffectsProcessor> effects_processor;
Piotr Bialecki7a3cfb22024-07-31 04:53:24286 service_->BindVideoEffectsProcessor(
Piotr Bialeckic2c709d2024-03-27 21:04:09287 kDeviceId, effects_processor.BindNewPipeAndPassReceiver());
288
Mikel Astiz3c138fa2025-03-10 13:37:19289 EXPECT_TRUE(effects_processor_future.Wait());
Piotr Bialeckic2c709d2024-03-27 21:04:09290 EXPECT_TRUE(effects_processor.is_connected());
291 EXPECT_EQ(fake_effects_service.GetProcessors().size(), 1u);
292}
293
294TEST_F(
295 MediaEffectsServiceTest,
296 BindVideoEffectsProcessor_TwoProcessorsWithDifferentIdConnectToDifferentManager) {
Piotr Bialeckia7fc11e2025-05-05 19:34:32297 constexpr char kDeviceId3[] = "test_device_3";
298
Piotr Bialeckic2c709d2024-03-27 21:04:09299 // Tests that `MediaEffectsService::BindVideoEffectsProcessor()` connects to
300 // a different manager if a different ID was used. This is validated by
301 // checking that the managers return different configurations. We also set a
302 // different config directly via effects manager interface (originating from
ahmedmoussa1d14f3c2025-01-24 01:17:36303 // a call to `MediaEffectsService::BindReadonlyVideoEffectsManager()`) so this
304 // test also checks that a correct relationship is established between manager
Piotr Bialeckic2c709d2024-03-27 21:04:09305 // and processor.
306
307 mojo::Remote<video_effects::mojom::VideoEffectsService> service;
308 video_effects::FakeVideoEffectsService fake_effects_service(
309 service.BindNewPipeAndPassReceiver());
Piotr Bialecki5a6c9112024-09-20 01:51:50310 auto service_reset =
311 video_effects::SetVideoEffectsServiceRemoteForTesting(&service);
Piotr Bialeckic2c709d2024-03-27 21:04:09312
ahmedmoussa1d14f3c2025-01-24 01:17:36313 mojo::Remote<media::mojom::ReadonlyVideoEffectsManager> effects_manager;
314 service_->BindReadonlyVideoEffectsManager(
ahmedmoussae5e4a4202025-01-24 01:16:36315 kDeviceId1, effects_manager.BindNewPipeAndPassReceiver());
Piotr Bialeckic2c709d2024-03-27 21:04:09316
317 constexpr float kFramingPaddingRatio1 = 0.234;
ahmedmoussae5e4a4202025-01-24 01:16:36318 SetFramingSync(service_->GetOrCreateVideoEffectsManager(kDeviceId1),
319 kFramingPaddingRatio1);
Piotr Bialeckic2c709d2024-03-27 21:04:09320
321 EXPECT_EQ(gfx::InsetsF{kFramingPaddingRatio1},
322 GetConfigurationSync(effects_manager)->framing->padding_ratios);
323
324 auto effects_processor_future1 =
325 fake_effects_service.GetEffectsProcessorCreationFuture();
326
327 mojo::Remote<video_effects::mojom::VideoEffectsProcessor> effects_processor1;
Piotr Bialecki7a3cfb22024-07-31 04:53:24328 service_->BindVideoEffectsProcessor(
ahmedmoussae5e4a4202025-01-24 01:16:36329 kDeviceId2, effects_processor1.BindNewPipeAndPassReceiver());
Mikel Astiz3c138fa2025-03-10 13:37:19330 EXPECT_TRUE(effects_processor_future1.Wait());
Piotr Bialeckic2c709d2024-03-27 21:04:09331 ASSERT_EQ(fake_effects_service.GetProcessors().size(), 1u);
332
333 constexpr float kFramingPaddingRatio2 = 0.345;
ahmedmoussae5e4a4202025-01-24 01:16:36334 SetFramingSync(service_->GetOrCreateVideoEffectsManager(kDeviceId2),
Piotr Bialeckic2c709d2024-03-27 21:04:09335 kFramingPaddingRatio2);
336
ahmedmoussae5e4a4202025-01-24 01:16:36337 EXPECT_EQ(
338 gfx::InsetsF{kFramingPaddingRatio2},
339 GetConfigurationSync(fake_effects_service.GetProcessors()[kDeviceId2]
340 ->GetVideoEffectsManager())
341 ->framing->padding_ratios);
Piotr Bialeckic2c709d2024-03-27 21:04:09342
343 auto effects_processor_future2 =
344 fake_effects_service.GetEffectsProcessorCreationFuture();
345
346 mojo::Remote<video_effects::mojom::VideoEffectsProcessor> effects_processor2;
Piotr Bialecki7a3cfb22024-07-31 04:53:24347 service_->BindVideoEffectsProcessor(
ahmedmoussae5e4a4202025-01-24 01:16:36348 kDeviceId3, effects_processor2.BindNewPipeAndPassReceiver());
Mikel Astiz3c138fa2025-03-10 13:37:19349 EXPECT_TRUE(effects_processor_future2.Wait());
Piotr Bialeckic2c709d2024-03-27 21:04:09350 ASSERT_EQ(fake_effects_service.GetProcessors().size(), 2u);
351
352 constexpr float kFramingPaddingRatio3 = 0.456;
ahmedmoussae5e4a4202025-01-24 01:16:36353 SetFramingSync(service_->GetOrCreateVideoEffectsManager(kDeviceId3),
Piotr Bialeckic2c709d2024-03-27 21:04:09354 kFramingPaddingRatio3);
355
ahmedmoussae5e4a4202025-01-24 01:16:36356 auto padding2 = std::move(
357 GetConfigurationSync(fake_effects_service.GetProcessors()[kDeviceId2]
358 ->GetVideoEffectsManager())
359 ->framing->padding_ratios);
360 auto padding3 = std::move(
361 GetConfigurationSync(fake_effects_service.GetProcessors()[kDeviceId3]
362 ->GetVideoEffectsManager())
363 ->framing->padding_ratios);
Piotr Bialeckic2c709d2024-03-27 21:04:09364
365 EXPECT_NE(padding2, padding3);
366 EXPECT_EQ(gfx::InsetsF{kFramingPaddingRatio2}, padding2);
367 EXPECT_EQ(gfx::InsetsF{kFramingPaddingRatio3}, padding3);
368}
Piotr Bialecki7a3cfb22024-07-31 04:53:24369
370TEST_F(MediaEffectsServiceTest, ModelFileIsOpenedAndSentToVideoEffects) {
371 constexpr char kFirstModelBytes[] = "abcdefgh";
372 constexpr char kSecondModelBytes[] = "ijklmnop";
373
374 mojo::Remote<video_effects::mojom::VideoEffectsService> service;
375 video_effects::FakeVideoEffectsService fake_effects_service(
376 service.BindNewPipeAndPassReceiver());
Piotr Bialecki5a6c9112024-09-20 01:51:50377 auto service_reset =
378 video_effects::SetVideoEffectsServiceRemoteForTesting(&service);
Piotr Bialecki7a3cfb22024-07-31 04:53:24379
380 // Setting the model file path for the first time propagates the model file to
381 // Video Effects Service: Prepare model file:
382 base::ScopedTempFile temporary_model_file_path1;
383 ASSERT_TRUE(temporary_model_file_path1.Create());
384 ASSERT_TRUE(
385 base::WriteFile(temporary_model_file_path1.path(), kFirstModelBytes));
386
387 // Set it on Media Effects Service:
388 auto model_opened_future =
389 fake_effects_service.GetBackgroundSegmentationModelFuture();
390 model_provider_->SetModelPath(temporary_model_file_path1.path());
391
Mikel Astiz3c138fa2025-03-10 13:37:19392 auto model_file = model_opened_future.Take();
Piotr Bialecki7a3cfb22024-07-31 04:53:24