Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(229)

Side by Side Diff: services/video_capture/video_capture_service.cc

Issue 2471613005: [Mojo Video Capture] Use actual factory instances implementing media::VideoCaptureDeviceFactory (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "services/video_capture/video_capture_service.h" 5 #include "services/video_capture/video_capture_service.h"
6 6
7 #include "media/capture/video/fake_video_capture_device.h" 7 #include "base/message_loop/message_loop.h"
8 #include "media/capture/video/fake_video_capture_device_factory.h"
9 #include "media/capture/video/video_capture_buffer_pool.h"
10 #include "media/capture/video/video_capture_buffer_tracker.h"
8 #include "media/capture/video/video_capture_jpeg_decoder.h" 11 #include "media/capture/video/video_capture_jpeg_decoder.h"
9 #include "services/video_capture/video_capture_device_factory_impl.h" 12 #include "services/video_capture/device_factory_media_to_mojo_adapter.h"
13 #include "services/video_capture/mock_device_factory.h"
10 14
11 namespace { 15 namespace {
12 static const char kFakeDeviceDisplayName[] = "Fake Video Capture Device";
13 static const char kFakeDeviceId[] = "FakeDeviceId";
14 static const char kFakeModelId[] = "FakeModelId";
15 static const float kFakeCaptureDefaultFrameRate = 20.0f;
16
17 // TODO(chfremer): Replace with an actual decoder factory. 16 // TODO(chfremer): Replace with an actual decoder factory.
18 // https://crbug.com/584797 17 // https://crbug.com/584797
19 std::unique_ptr<media::VideoCaptureJpegDecoder> CreateJpegDecoder() { 18 std::unique_ptr<media::VideoCaptureJpegDecoder> CreateJpegDecoder() {
20 return nullptr; 19 return nullptr;
21 } 20 }
22 21
23 } // anonymous namespace 22 } // anonymous namespace
24 23
25 namespace video_capture { 24 namespace video_capture {
26 25
27 VideoCaptureService::VideoCaptureService() = default; 26 VideoCaptureService::VideoCaptureService() : mock_device_factory_(nullptr) {}
28 27
29 VideoCaptureService::~VideoCaptureService() = default; 28 VideoCaptureService::~VideoCaptureService() = default;
30 29
31 bool VideoCaptureService::OnConnect( 30 bool VideoCaptureService::OnConnect(
32 const service_manager::ServiceInfo& remote_info, 31 const service_manager::ServiceInfo& remote_info,
33 service_manager::InterfaceRegistry* registry) { 32 service_manager::InterfaceRegistry* registry) {
34 registry->AddInterface<mojom::VideoCaptureService>(this); 33 registry->AddInterface<mojom::VideoCaptureService>(this);
35 return true; 34 return true;
36 } 35 }
37 36
(...skipping 12 matching lines...) Expand all
50 void VideoCaptureService::ConnectToFakeDeviceFactory( 49 void VideoCaptureService::ConnectToFakeDeviceFactory(
51 mojom::VideoCaptureDeviceFactoryRequest request) { 50 mojom::VideoCaptureDeviceFactoryRequest request) {
52 LazyInitializeFakeDeviceFactory(); 51 LazyInitializeFakeDeviceFactory();
53 fake_factory_bindings_.AddBinding(fake_device_factory_.get(), 52 fake_factory_bindings_.AddBinding(fake_device_factory_.get(),
54 std::move(request)); 53 std::move(request));
55 } 54 }
56 55
57 void VideoCaptureService::ConnectToMockDeviceFactory( 56 void VideoCaptureService::ConnectToMockDeviceFactory(
58 mojom::VideoCaptureDeviceFactoryRequest request) { 57 mojom::VideoCaptureDeviceFactoryRequest request) {
59 LazyInitializeMockDeviceFactory(); 58 LazyInitializeMockDeviceFactory();
60 mock_factory_bindings_.AddBinding(mock_device_factory_.get(), 59 mock_factory_bindings_.AddBinding(mock_device_factory_adapter_.get(),
61 std::move(request)); 60 std::move(request));
62 } 61 }
63 62
64 void VideoCaptureService::AddDeviceToMockFactory( 63 void VideoCaptureService::AddDeviceToMockFactory(
65 mojom::MockVideoCaptureDevicePtr device, 64 mojom::MockVideoCaptureDevicePtr device,
66 const media::VideoCaptureDeviceDescriptor& descriptor, 65 const media::VideoCaptureDeviceDescriptor& descriptor,
67 const AddDeviceToMockFactoryCallback& callback) { 66 const AddDeviceToMockFactoryCallback& callback) {
68 LazyInitializeMockDeviceFactory(); 67 LazyInitializeMockDeviceFactory();
69 mock_device_factory_->AddMockDevice(std::move(device), std::move(descriptor)); 68 mock_device_factory_->AddMockDevice(std::move(device), std::move(descriptor));
70 callback.Run(); 69 callback.Run();
71 } 70 }
72 71
73 void VideoCaptureService::LazyInitializeDeviceFactory() { 72 void VideoCaptureService::LazyInitializeDeviceFactory() {
74 if (device_factory_) 73 if (device_factory_)
75 return; 74 return;
76 device_factory_ = base::MakeUnique<VideoCaptureDeviceFactoryImpl>( 75
77 base::Bind(CreateJpegDecoder)); 76 // Create the platform-specific device factory.
77 // Task runner does not seem to actually be used.
mcasas 2016/11/04 23:24:29 Nit: it's actually used for CrOs implementation [1
chfremer 2016/11/07 18:42:37 Thanks. I should have seen that. Makes me wonder i
78 std::unique_ptr<media::VideoCaptureDeviceFactory> media_device_factory =
79 media::VideoCaptureDeviceFactory::CreateFactory(
80 base::MessageLoop::current()->task_runner());
81
82 device_factory_ = base::MakeUnique<DeviceFactoryMediaToMojoAdapter>(
83 std::move(media_device_factory), base::Bind(CreateJpegDecoder));
78 } 84 }
79 85
80 void VideoCaptureService::LazyInitializeFakeDeviceFactory() { 86 void VideoCaptureService::LazyInitializeFakeDeviceFactory() {
81 if (fake_device_factory_) 87 if (fake_device_factory_)
82 return; 88 return;
83 fake_device_factory_ = base::MakeUnique<VideoCaptureDeviceFactoryImpl>( 89
84 base::Bind(CreateJpegDecoder)); 90 auto media_fake_device_factory =
85 media::VideoCaptureDeviceDescriptor fake_device_descriptor; 91 base::MakeUnique<media::FakeVideoCaptureDeviceFactory>();
86 fake_device_descriptor.display_name = kFakeDeviceDisplayName; 92
87 fake_device_descriptor.device_id = kFakeDeviceId; 93 fake_device_factory_ = base::MakeUnique<DeviceFactoryMediaToMojoAdapter>(
88 fake_device_descriptor.model_id = kFakeModelId; 94 std::move(media_fake_device_factory), base::Bind(CreateJpegDecoder));
mcasas 2016/11/04 23:24:29 This might work for l.90-94: fake_device_factor
chfremer 2016/11/07 18:42:37 Done.
89 fake_device_descriptor.capture_api = media::VideoCaptureApi::UNKNOWN;
90 fake_device_descriptor.transport_type =
91 media::VideoCaptureTransportType::OTHER_TRANSPORT;
92 fake_device_factory_->AddMediaDevice(
93 base::MakeUnique<media::FakeVideoCaptureDevice>(
94 media::FakeVideoCaptureDevice::BufferOwnership::OWN_BUFFERS,
95 kFakeCaptureDefaultFrameRate),
96 std::move(fake_device_descriptor));
97 } 95 }
98 96
99 void VideoCaptureService::LazyInitializeMockDeviceFactory() { 97 void VideoCaptureService::LazyInitializeMockDeviceFactory() {
100 if (mock_device_factory_) 98 if (mock_device_factory_)
101 return; 99 return;
102 mock_device_factory_ = base::MakeUnique<VideoCaptureDeviceFactoryImpl>( 100
103 base::Bind(CreateJpegDecoder)); 101 auto mock_device_factory = base::MakeUnique<MockDeviceFactory>();
102 // We keep a pointer to the MockDeviceFactory as a member so that we can
103 // invoke its AddMockDevice(). Ownership of the MockDeviceFactory is moved
104 // to the DeviceFactoryMediaToMojoAdapter.
105 mock_device_factory_ = mock_device_factory.get();
106 mock_device_factory_adapter_ =
107 base::MakeUnique<DeviceFactoryMediaToMojoAdapter>(
108 std::move(mock_device_factory), base::Bind(CreateJpegDecoder));
104 } 109 }
105 110
106 } // namespace video_capture 111 } // namespace video_capture
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698