Merge ~abreu-alexandre/oxide:video-capture-name-fix into oxide:master

Proposed by Alexandre Abreu
Status: Merged
Merged at revision: dbe5619f92e619f2c168011f65abcbbd8c245d80
Proposed branch: ~abreu-alexandre/oxide:video-capture-name-fix
Merge into: oxide:master
Diff against target: 206 lines (+86/-14)
5 files modified
qt/quick/api/oxideqquickglobal.cc (+2/-0)
shared/browser/media/oxide_media_capture_devices_dispatcher.cc (+65/-1)
shared/browser/media/oxide_media_capture_devices_dispatcher.h (+2/-0)
shared/browser/media/oxide_video_capture_device_hybris.cc (+16/-13)
shared/browser/media/oxide_video_capture_device_hybris.h (+1/-0)
Reviewer Review Type Date Requested Status
Chris Coulson Approve
Review via email: mp+296430@code.launchpad.net

Commit message

Fix video capture device name used internally to determine the facing/position

Description of the change

Fix video capture device name used internally to determine the facing/position

To post a comment you must log in.
Revision history for this message
Chris Coulson (chrisccoulson) wrote :

Thanks, I've left some comments inline

review: Needs Fixing
78fffe5... by Alexandre Abreu

Fix video capture device name used internally to determine the facing/position

Revision history for this message
Alexandre Abreu (abreu-alexandre) wrote :

updated,

Revision history for this message
Chris Coulson (chrisccoulson) wrote :

Almost there - just a few remaining / additional style issues, and a runtime check is needed too.

review: Needs Fixing
7d07eda... by Alexandre Abreu

Fix spacing; make sure that hybris prefix is there when enumerating camera device ids

Revision history for this message
Alexandre Abreu (abreu-alexandre) wrote :

updated

Revision history for this message
Chris Coulson (chrisccoulson) wrote :

It looks ok now, bar one small nit

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/qt/quick/api/oxideqquickglobal.cc b/qt/quick/api/oxideqquickglobal.cc
2index 0c4d825..97681c0 100644
3--- a/qt/quick/api/oxideqquickglobal.cc
4+++ b/qt/quick/api/oxideqquickglobal.cc
5@@ -43,8 +43,10 @@ QVariant VideoCaptureDeviceToVariant(const OxideQVideoCaptureDevice& device) {
6 switch (device.position()) {
7 case OxideQVideoCaptureDevice::PositionFrontFace:
8 rv["position"] = "frontface";
9+ break;
10 case OxideQVideoCaptureDevice::PositionBackFace:
11 rv["position"] = "backface";
12+ break;
13 default:
14 rv["position"] = "unspecified";
15 }
16diff --git a/shared/browser/media/oxide_media_capture_devices_dispatcher.cc b/shared/browser/media/oxide_media_capture_devices_dispatcher.cc
17index 0fb4f1e..79c9cae 100644
18--- a/shared/browser/media/oxide_media_capture_devices_dispatcher.cc
19+++ b/shared/browser/media/oxide_media_capture_devices_dispatcher.cc
20@@ -17,6 +17,10 @@
21
22 #include "oxide_media_capture_devices_dispatcher.h"
23
24+#if defined(ENABLE_HYBRIS_CAMERA)
25+#include <hybris/camera/camera_compatibility_layer_capabilities.h>
26+#endif
27+
28 #include "base/bind.h"
29 #include "base/callback.h"
30 #include "base/location.h"
31@@ -29,6 +33,9 @@
32
33 #include "shared/browser/oxide_browser_context.h"
34 #include "shared/browser/oxide_browser_process_main.h"
35+#if defined(ENABLE_HYBRIS_CAMERA)
36+#include "shared/browser/oxide_hybris_utils.h"
37+#endif
38 #include "shared/browser/permissions/oxide_permission_request_dispatcher.h"
39 #include "shared/browser/permissions/oxide_permission_request_response.h"
40 #include "shared/browser/permissions/oxide_temporary_saved_permission_context.h"
41@@ -36,6 +43,10 @@
42 #include "oxide_media_capture_devices_context.h"
43 #include "oxide_media_capture_devices_dispatcher_observer.h"
44
45+#if defined(ENABLE_HYBRIS_CAMERA)
46+#include "oxide_video_capture_device_hybris.h"
47+#endif
48+
49 namespace oxide {
50
51 namespace {
52@@ -197,6 +208,47 @@ PermissionRequestCallback WrapMediaResponseCallback(
53 embedding_origin);
54 }
55
56+void UpdateMediaStreamDeviceFacing(
57+ content::MediaStreamDevices & devices) {
58+#ifdef ENABLE_HYBRIS_CAMERA
59+ if (!HybrisUtils::IsCameraCompatAvailable()) {
60+ return;
61+ }
62+
63+ for (auto& device : devices) {
64+ if (device.id.find(
65+ VideoCaptureDeviceHybris::GetDeviceIdPrefix()) != 0) {
66+ continue;
67+ }
68+
69+ int32_t camera_id =
70+ oxide::VideoCaptureDeviceHybris::GetCameraIdfromDeviceId(
71+ device.id);
72+
73+ CameraType type;
74+ int orientation;
75+ if (android_camera_get_device_info(camera_id,
76+ reinterpret_cast<int*>(&type),
77+ &orientation) != 0) {
78+ LOG(ERROR) << "Failed to get device info for camera with ID "
79+ << camera_id;
80+ continue;
81+ }
82+
83+ switch(type) {
84+ case BACK_FACING_CAMERA_TYPE:
85+ device.video_facing = content::MEDIA_VIDEO_FACING_ENVIRONMENT;
86+ break;
87+ case FRONT_FACING_CAMERA_TYPE:
88+ device.video_facing = content::MEDIA_VIDEO_FACING_USER;
89+ break;
90+ default:
91+ break;
92+ }
93+ }
94+#endif
95+}
96+
97 }
98
99 MediaCaptureDevicesDispatcher::MediaCaptureDevicesDispatcher() {}
100@@ -237,6 +289,11 @@ void MediaCaptureDevicesDispatcher::OnAudioCaptureDevicesChanged() {
101 }
102
103 void MediaCaptureDevicesDispatcher::OnVideoCaptureDevicesChanged() {
104+ current_video_capture_devices_ =
105+ content::MediaCaptureDevices::GetInstance()->GetVideoCaptureDevices();
106+
107+ UpdateMediaStreamDeviceFacing(current_video_capture_devices_);
108+
109 content::BrowserThread::PostTask(
110 content::BrowserThread::UI,
111 FROM_HERE,
112@@ -290,7 +347,14 @@ MediaCaptureDevicesDispatcher::GetVideoCaptureDevices() {
113 return EmptyDevices();
114 }
115
116- return content::MediaCaptureDevices::GetInstance()->GetVideoCaptureDevices();
117+ if (current_video_capture_devices_.empty()) {
118+ current_video_capture_devices_ =
119+ content::MediaCaptureDevices::GetInstance()->GetVideoCaptureDevices();
120+
121+ UpdateMediaStreamDeviceFacing(current_video_capture_devices_);
122+ }
123+
124+ return current_video_capture_devices_;
125 }
126
127 const content::MediaStreamDevice*
128diff --git a/shared/browser/media/oxide_media_capture_devices_dispatcher.h b/shared/browser/media/oxide_media_capture_devices_dispatcher.h
129index 6551fc3..700991d 100644
130--- a/shared/browser/media/oxide_media_capture_devices_dispatcher.h
131+++ b/shared/browser/media/oxide_media_capture_devices_dispatcher.h
132@@ -117,6 +117,8 @@ class OXIDE_SHARED_EXPORT MediaCaptureDevicesDispatcher
133
134 base::ObserverList<MediaCaptureDevicesDispatcherObserver> observers_;
135
136+ content::MediaStreamDevices current_video_capture_devices_;
137+
138 DISALLOW_COPY_AND_ASSIGN(MediaCaptureDevicesDispatcher);
139 };
140
141diff --git a/shared/browser/media/oxide_video_capture_device_hybris.cc b/shared/browser/media/oxide_video_capture_device_hybris.cc
142index bfd23f4..0d9264a 100644
143--- a/shared/browser/media/oxide_video_capture_device_hybris.cc
144+++ b/shared/browser/media/oxide_video_capture_device_hybris.cc
145@@ -43,18 +43,6 @@ namespace {
146
147 void DummyOnPreviewTextureNeedsUpdateCallback(void* context) {}
148
149-int32_t GetCameraId(const media::VideoCaptureDevice::Name& device_name) {
150- std::string device_id_format =
151- base::StringPrintf("%s%%d",
152- VideoCaptureDeviceHybris::GetDeviceIdPrefix());
153- int32_t camera_id = -1;
154- int rv =
155- sscanf(device_name.id().c_str(), device_id_format.c_str(), &camera_id);
156- CHECK_EQ(rv, 1);
157-
158- return camera_id;
159-}
160-
161 int GetRotation(CameraType position, int orientation) {
162 int display_rotation =
163 BrowserPlatformIntegration::GetInstance()
164@@ -80,6 +68,21 @@ int GetRotation(CameraType position, int orientation) {
165 }
166
167 // static
168+int32_t VideoCaptureDeviceHybris::GetCameraIdfromDeviceId(
169+ const std::string& device_id) {
170+ std::string device_id_format =
171+ base::StringPrintf("%s%%d",
172+ VideoCaptureDeviceHybris::GetDeviceIdPrefix());
173+
174+ int32_t camera_id = -1;
175+ int rv =
176+ sscanf(device_id.c_str(), device_id_format.c_str(), &camera_id);
177+ CHECK_EQ(rv, 1);
178+
179+ return camera_id;
180+}
181+
182+// static
183 void VideoCaptureDeviceHybris::OnMsgErrorCallback(void* context) {
184 reinterpret_cast<VideoCaptureDeviceHybris*>(context)->OnError();
185 }
186@@ -137,7 +140,7 @@ void VideoCaptureDeviceHybris::AllocateAndStart(
187 &DummyOnPreviewTextureNeedsUpdateCallback;
188 listener_->on_preview_frame_cb = &OnPreviewFrameCallback;
189
190- int32_t camera_id = GetCameraId(device_name_);
191+ int32_t camera_id = GetCameraIdfromDeviceId(device_name_.id());
192
193 if (android_camera_get_device_info(camera_id,
194 reinterpret_cast<int*>(&position_),
195diff --git a/shared/browser/media/oxide_video_capture_device_hybris.h b/shared/browser/media/oxide_video_capture_device_hybris.h
196index ba9280f..fb76f59 100644
197--- a/shared/browser/media/oxide_video_capture_device_hybris.h
198+++ b/shared/browser/media/oxide_video_capture_device_hybris.h
199@@ -47,6 +47,7 @@ class VideoCaptureDeviceHybris : public media::VideoCaptureDevice {
200 ~VideoCaptureDeviceHybris() override;
201
202 static const char* GetDeviceIdPrefix();
203+ static int32_t GetCameraIdfromDeviceId(const std::string& device_id);
204
205 private:
206 static void OnMsgErrorCallback(void* context);

Subscribers

People subscribed via source and target branches