forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
browser_exposed_gpu_interfaces.cc
90 lines (80 loc) · 3.52 KB
/
browser_exposed_gpu_interfaces.cc
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/gpu/browser_exposed_gpu_interfaces.h"
#include "base/memory/scoped_refptr.h"
#include "base/no_destructor.h"
#include "build/build_config.h"
#include "chrome/gpu/chrome_content_gpu_client.h"
#include "mojo/public/cpp/bindings/binder_map.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/self_owned_receiver.h"
#if defined(OS_CHROMEOS)
#include "components/arc/mojom/protected_buffer_manager.mojom.h"
#include "components/arc/mojom/video_decode_accelerator.mojom.h"
#include "components/arc/mojom/video_encode_accelerator.mojom.h"
#include "components/arc/mojom/video_protected_buffer_allocator.mojom.h"
#include "components/arc/video_accelerator/gpu_arc_video_decode_accelerator.h"
#include "components/arc/video_accelerator/gpu_arc_video_encode_accelerator.h"
#include "components/arc/video_accelerator/gpu_arc_video_protected_buffer_allocator.h"
#include "components/arc/video_accelerator/protected_buffer_manager.h"
#include "components/arc/video_accelerator/protected_buffer_manager_proxy.h"
#endif // defined(OS_CHROMEOS)
namespace {
#if defined(OS_CHROMEOS)
void CreateArcVideoDecodeAccelerator(
ChromeContentGpuClient* client,
const gpu::GpuPreferences& gpu_preferences,
mojo::PendingReceiver<::arc::mojom::VideoDecodeAccelerator> receiver) {
mojo::MakeSelfOwnedReceiver(
std::make_unique<arc::GpuArcVideoDecodeAccelerator>(
gpu_preferences, client->GetProtectedBufferManager()),
std::move(receiver));
}
void CreateArcVideoEncodeAccelerator(
const gpu::GpuPreferences& gpu_preferences,
mojo::PendingReceiver<::arc::mojom::VideoEncodeAccelerator> receiver) {
mojo::MakeSelfOwnedReceiver(
std::make_unique<arc::GpuArcVideoEncodeAccelerator>(gpu_preferences),
std::move(receiver));
}
void CreateArcVideoProtectedBufferAllocator(
ChromeContentGpuClient* client,
mojo::PendingReceiver<::arc::mojom::VideoProtectedBufferAllocator>
receiver) {
auto gpu_arc_video_protected_buffer_allocator =
arc::GpuArcVideoProtectedBufferAllocator::Create(
client->GetProtectedBufferManager());
if (!gpu_arc_video_protected_buffer_allocator)
return;
mojo::MakeSelfOwnedReceiver(
std::move(gpu_arc_video_protected_buffer_allocator), std::move(receiver));
}
void CreateProtectedBufferManager(
ChromeContentGpuClient* client,
mojo::PendingReceiver<::arc::mojom::ProtectedBufferManager> receiver) {
mojo::MakeSelfOwnedReceiver(
std::make_unique<arc::GpuArcProtectedBufferManagerProxy>(
client->GetProtectedBufferManager()),
std::move(receiver));
}
#endif
} // namespace
void ExposeChromeGpuInterfacesToBrowser(
ChromeContentGpuClient* client,
const gpu::GpuPreferences& gpu_preferences,
mojo::BinderMap* binders) {
#if defined(OS_CHROMEOS)
binders->Add(base::BindRepeating(&CreateArcVideoDecodeAccelerator, client,
gpu_preferences),
base::ThreadTaskRunnerHandle::Get());
binders->Add(
base::BindRepeating(&CreateArcVideoEncodeAccelerator, gpu_preferences),
base::ThreadTaskRunnerHandle::Get());
binders->Add(
base::BindRepeating(&CreateArcVideoProtectedBufferAllocator, client),
base::ThreadTaskRunnerHandle::Get());
binders->Add(base::BindRepeating(&CreateProtectedBufferManager, client),
base::ThreadTaskRunnerHandle::Get());
#endif
}