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

Unified Diff: services/video_capture/device_factory_media_to_mojo_adapter.cc

Issue 2818513003: [Mojo Video Capture] Adapt video_capture service to refactored video capture stack (Closed)
Patch Set: Fix compile errors Created 3 years, 8 months 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 side-by-side diff with in-line comments
Download patch
Index: services/video_capture/device_factory_media_to_mojo_adapter.cc
diff --git a/services/video_capture/device_factory_media_to_mojo_adapter.cc b/services/video_capture/device_factory_media_to_mojo_adapter.cc
index 07f6db53a083b031d6328c789efc2a6160952d78..12b3a0083c4abe9265745da573b968be3e3be1f1 100644
--- a/services/video_capture/device_factory_media_to_mojo_adapter.cc
+++ b/services/video_capture/device_factory_media_to_mojo_adapter.cc
@@ -15,6 +15,54 @@
#include "mojo/public/cpp/bindings/strong_binding.h"
#include "services/video_capture/device_media_to_mojo_adapter.h"
+namespace {
+
+// Translates a set of device infos reported by a VideoCaptureSystem to a set
+// of device infos that the video capture service exposes to its client.
+// The Video Capture Service instances of VideoCaptureDeviceClient to
+// convert the formats provided by the VideoCaptureDevice instances. Here, we
+// translate the set of supported formats as reported by the |device_factory_|
+// to what will be output by the VideoCaptureDeviceClient we connect to it.
+// TODO(chfremer): A cleaner design would be to have this translation
+// happen in VideoCaptureDeviceClient, and talk only to VideoCaptureDeviceClient
+// instead of VideoCaptureSystem.
+static void TranslateDeviceInfos(
+ const video_capture::mojom::DeviceFactory::GetDeviceInfosCallback& callback,
+ const std::vector<media::VideoCaptureDeviceInfo>& device_infos) {
+ std::vector<media::VideoCaptureDeviceInfo> translated_device_infos;
+ for (const auto& device_info : device_infos) {
+ media::VideoCaptureDeviceInfo translated_device_info;
+ translated_device_info.descriptor = device_info.descriptor;
+ for (const auto& format : device_info.supported_formats) {
+ media::VideoCaptureFormat translated_format;
+ switch (format.pixel_format) {
+ case media::PIXEL_FORMAT_I420:
+ case media::PIXEL_FORMAT_MJPEG:
+ translated_format.pixel_format = media::PIXEL_FORMAT_I420;
+ break;
+ case media::PIXEL_FORMAT_Y16:
+ translated_format.pixel_format = media::PIXEL_FORMAT_Y16;
+ default:
+ // Any other format cannot be consumed by VideoCaptureDeviceClient.
+ continue;
+ }
+ translated_format.frame_size = format.frame_size;
+ translated_format.frame_rate = format.frame_rate;
+ translated_format.pixel_storage = media::PIXEL_STORAGE_CPU;
+ if (base::ContainsValue(translated_device_info.supported_formats,
+ translated_format))
+ continue;
+ translated_device_info.supported_formats.push_back(translated_format);
+ }
+ if (translated_device_info.supported_formats.empty())
+ continue;
+ translated_device_infos.push_back(translated_device_info);
+ }
+ callback.Run(translated_device_infos);
+}
+
+} // anonymous namespace
+
namespace video_capture {
DeviceFactoryMediaToMojoAdapter::ActiveDeviceEntry::ActiveDeviceEntry() =
@@ -31,17 +79,18 @@ DeviceFactoryMediaToMojoAdapter::ActiveDeviceEntry::operator=(
DeviceFactoryMediaToMojoAdapter::ActiveDeviceEntry&& other) = default;
DeviceFactoryMediaToMojoAdapter::DeviceFactoryMediaToMojoAdapter(
- std::unique_ptr<media::VideoCaptureDeviceFactory> device_factory,
+ std::unique_ptr<media::VideoCaptureSystem> capture_system,
const media::VideoCaptureJpegDecoderFactoryCB&
jpeg_decoder_factory_callback)
- : device_factory_(std::move(device_factory)),
+ : capture_system_(std::move(capture_system)),
jpeg_decoder_factory_callback_(jpeg_decoder_factory_callback) {}
DeviceFactoryMediaToMojoAdapter::~DeviceFactoryMediaToMojoAdapter() = default;
void DeviceFactoryMediaToMojoAdapter::GetDeviceInfos(
const GetDeviceInfosCallback& callback) {
- NOTIMPLEMENTED();
+ capture_system_->GetDeviceInfosAsync(
+ base::Bind(&TranslateDeviceInfos, callback));
}
void DeviceFactoryMediaToMojoAdapter::CreateDevice(
@@ -63,14 +112,8 @@ void DeviceFactoryMediaToMojoAdapter::CreateDevice(
return;
}
- // Create device
- media::VideoCaptureDeviceDescriptor descriptor;
- if (LookupDescriptorFromId(device_id, &descriptor) == false) {
- callback.Run(mojom::DeviceAccessResultCode::ERROR_DEVICE_NOT_FOUND);
- return;
- }
std::unique_ptr<media::VideoCaptureDevice> media_device =
- device_factory_->CreateDevice(descriptor);
+ capture_system_->CreateDevice(device_id);
if (media_device == nullptr) {
callback.Run(mojom::DeviceAccessResultCode::ERROR_DEVICE_NOT_FOUND);
return;
@@ -96,20 +139,4 @@ void DeviceFactoryMediaToMojoAdapter::OnClientConnectionErrorOrClose(
active_devices_by_id_.erase(device_id);
}
-bool DeviceFactoryMediaToMojoAdapter::LookupDescriptorFromId(
- const std::string& device_id,
- media::VideoCaptureDeviceDescriptor* descriptor) {
- media::VideoCaptureDeviceDescriptors descriptors;
- device_factory_->GetDeviceDescriptors(&descriptors);
- auto descriptor_iter = std::find_if(
- descriptors.begin(), descriptors.end(),
- [&device_id](const media::VideoCaptureDeviceDescriptor& descriptor) {
- return descriptor.device_id == device_id;
- });
- if (descriptor_iter == descriptors.end())
- return false;
- *descriptor = *descriptor_iter;
- return true;
-}
-
} // namespace video_capture
« no previous file with comments | « services/video_capture/device_factory_media_to_mojo_adapter.h ('k') | services/video_capture/device_media_to_mojo_adapter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698