OLD | NEW |
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 "content/browser/media/capture/image_capture_impl.h" | 5 #include "content/browser/media/capture/image_capture_impl.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind_helpers.h" | 9 #include "base/bind_helpers.h" |
10 #include "content/browser/browser_main_loop.h" | 10 #include "content/browser/browser_main_loop.h" |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 } | 44 } |
45 | 45 |
46 void RunFailedSetOptionsCallback( | 46 void RunFailedSetOptionsCallback( |
47 const ImageCaptureImpl::SetOptionsCallback& cb) { | 47 const ImageCaptureImpl::SetOptionsCallback& cb) { |
48 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 48 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
49 cb.Run(false); | 49 cb.Run(false); |
50 } | 50 } |
51 | 51 |
52 void RunTakePhotoCallbackOnUIThread( | 52 void RunTakePhotoCallbackOnUIThread( |
53 const ImageCaptureImpl::TakePhotoCallback& callback, | 53 const ImageCaptureImpl::TakePhotoCallback& callback, |
54 mojo::String mime_type, | 54 const std::string& mime_type, |
55 mojo::Array<uint8_t> data) { | 55 const std::vector<uint8_t>& data) { |
| 56 // TODO(mcasas): Use a mojo typemapping instead of const_cast to avoid copying |
| 57 // |data|, https://crbug.com/630040. |
56 BrowserThread::PostTask( | 58 BrowserThread::PostTask( |
57 BrowserThread::UI, FROM_HERE, | 59 BrowserThread::UI, FROM_HERE, |
58 base::Bind(callback, mime_type, base::Passed(std::move(data)))); | 60 base::Bind(callback, mime_type, |
| 61 base::Passed(const_cast<std::vector<uint8_t>*>(&data)))); |
59 } | 62 } |
60 | 63 |
61 void RunFailedTakePhotoCallback(const ImageCaptureImpl::TakePhotoCallback& cb) { | 64 void RunFailedTakePhotoCallback(const ImageCaptureImpl::TakePhotoCallback& cb) { |
62 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 65 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
63 cb.Run("", mojo::Array<uint8_t>()); | 66 cb.Run("", std::vector<uint8_t>()); |
64 } | 67 } |
65 | 68 |
66 void GetCapabilitiesOnIOThread( | 69 void GetCapabilitiesOnIOThread( |
67 const mojo::String& source_id, | 70 const std::string& source_id, |
68 MediaStreamManager* media_stream_manager, | 71 MediaStreamManager* media_stream_manager, |
69 media::ScopedResultCallback<ImageCaptureImpl::GetCapabilitiesCallback> | 72 media::ScopedResultCallback<ImageCaptureImpl::GetCapabilitiesCallback> |
70 callback) { | 73 callback) { |
71 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 74 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
72 | 75 |
73 const int session_id = | 76 const int session_id = |
74 media_stream_manager->VideoDeviceIdToSessionId(source_id); | 77 media_stream_manager->VideoDeviceIdToSessionId(source_id); |
75 | 78 |
76 if (session_id == StreamDeviceInfo::kNoId) | 79 if (session_id == StreamDeviceInfo::kNoId) |
77 return; | 80 return; |
78 media_stream_manager->video_capture_manager()->GetPhotoCapabilities( | 81 media_stream_manager->video_capture_manager()->GetPhotoCapabilities( |
79 session_id, std::move(callback)); | 82 session_id, std::move(callback)); |
80 } | 83 } |
81 | 84 |
82 void SetOptionsOnIOThread( | 85 void SetOptionsOnIOThread( |
83 const mojo::String& source_id, | 86 const std::string& source_id, |
84 MediaStreamManager* media_stream_manager, | 87 MediaStreamManager* media_stream_manager, |
85 media::mojom::PhotoSettingsPtr settings, | 88 media::mojom::PhotoSettingsPtr settings, |
86 media::ScopedResultCallback<ImageCaptureImpl::SetOptionsCallback> | 89 media::ScopedResultCallback<ImageCaptureImpl::SetOptionsCallback> |
87 callback) { | 90 callback) { |
88 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 91 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
89 | 92 |
90 const int session_id = | 93 const int session_id = |
91 media_stream_manager->VideoDeviceIdToSessionId(source_id); | 94 media_stream_manager->VideoDeviceIdToSessionId(source_id); |
92 | 95 |
93 if (session_id == StreamDeviceInfo::kNoId) | 96 if (session_id == StreamDeviceInfo::kNoId) |
94 return; | 97 return; |
95 media_stream_manager->video_capture_manager()->SetPhotoOptions( | 98 media_stream_manager->video_capture_manager()->SetPhotoOptions( |
96 session_id, std::move(settings), std::move(callback)); | 99 session_id, std::move(settings), std::move(callback)); |
97 } | 100 } |
98 | 101 |
99 void TakePhotoOnIOThread( | 102 void TakePhotoOnIOThread( |
100 const mojo::String& source_id, | 103 const std::string& source_id, |
101 MediaStreamManager* media_stream_manager, | 104 MediaStreamManager* media_stream_manager, |
102 media::ScopedResultCallback<ImageCaptureImpl::TakePhotoCallback> callback) { | 105 media::ScopedResultCallback<ImageCaptureImpl::TakePhotoCallback> callback) { |
103 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 106 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
104 | 107 |
105 const int session_id = | 108 const int session_id = |
106 media_stream_manager->VideoDeviceIdToSessionId(source_id); | 109 media_stream_manager->VideoDeviceIdToSessionId(source_id); |
107 | 110 |
108 if (session_id == StreamDeviceInfo::kNoId) | 111 if (session_id == StreamDeviceInfo::kNoId) |
109 return; | 112 return; |
110 media_stream_manager->video_capture_manager()->TakePhoto(session_id, | 113 media_stream_manager->video_capture_manager()->TakePhoto(session_id, |
111 std::move(callback)); | 114 std::move(callback)); |
112 } | 115 } |
113 | 116 |
114 } // anonymous namespace | 117 } // anonymous namespace |
115 | 118 |
116 // static | 119 // static |
117 void ImageCaptureImpl::Create( | 120 void ImageCaptureImpl::Create( |
118 mojo::InterfaceRequest<media::mojom::ImageCapture> request) { | 121 mojo::InterfaceRequest<media::mojom::ImageCapture> request) { |
119 // |binding_| will take ownership of ImageCaptureImpl. | 122 // |binding_| will take ownership of ImageCaptureImpl. |
120 new ImageCaptureImpl(std::move(request)); | 123 new ImageCaptureImpl(std::move(request)); |
121 } | 124 } |
122 | 125 |
123 ImageCaptureImpl::~ImageCaptureImpl() {} | 126 ImageCaptureImpl::~ImageCaptureImpl() {} |
124 | 127 |
125 void ImageCaptureImpl::GetCapabilities( | 128 void ImageCaptureImpl::GetCapabilities( |
126 const mojo::String& source_id, | 129 const std::string& source_id, |
127 const GetCapabilitiesCallback& callback) { | 130 const GetCapabilitiesCallback& callback) { |
128 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 131 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
129 | 132 |
130 media::ScopedResultCallback<GetCapabilitiesCallback> scoped_callback( | 133 media::ScopedResultCallback<GetCapabilitiesCallback> scoped_callback( |
131 base::Bind(&RunGetCapabilitiesCallbackOnUIThread, callback), | 134 base::Bind(&RunGetCapabilitiesCallbackOnUIThread, callback), |
132 media::BindToCurrentLoop(base::Bind(&RunFailedGetCapabilitiesCallback))); | 135 media::BindToCurrentLoop(base::Bind(&RunFailedGetCapabilitiesCallback))); |
133 | 136 |
134 BrowserThread::PostTask( | 137 BrowserThread::PostTask( |
135 BrowserThread::IO, FROM_HERE, | 138 BrowserThread::IO, FROM_HERE, |
136 base::Bind(&GetCapabilitiesOnIOThread, source_id, | 139 base::Bind(&GetCapabilitiesOnIOThread, source_id, |
137 BrowserMainLoop::GetInstance()->media_stream_manager(), | 140 BrowserMainLoop::GetInstance()->media_stream_manager(), |
138 base::Passed(&scoped_callback))); | 141 base::Passed(&scoped_callback))); |
139 } | 142 } |
140 | 143 |
141 void ImageCaptureImpl::SetOptions(const mojo::String& source_id, | 144 void ImageCaptureImpl::SetOptions(const std::string& source_id, |
142 media::mojom::PhotoSettingsPtr settings, | 145 media::mojom::PhotoSettingsPtr settings, |
143 const SetOptionsCallback& callback) { | 146 const SetOptionsCallback& callback) { |
144 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 147 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
145 | 148 |
146 media::ScopedResultCallback<SetOptionsCallback> scoped_callback( | 149 media::ScopedResultCallback<SetOptionsCallback> scoped_callback( |
147 base::Bind(&RunSetOptionsCallbackOnUIThread, callback), | 150 base::Bind(&RunSetOptionsCallbackOnUIThread, callback), |
148 media::BindToCurrentLoop(base::Bind(&RunFailedSetOptionsCallback))); | 151 media::BindToCurrentLoop(base::Bind(&RunFailedSetOptionsCallback))); |
149 | 152 |
150 BrowserThread::PostTask( | 153 BrowserThread::PostTask( |
151 BrowserThread::IO, FROM_HERE, | 154 BrowserThread::IO, FROM_HERE, |
152 base::Bind(&SetOptionsOnIOThread, source_id, | 155 base::Bind(&SetOptionsOnIOThread, source_id, |
153 BrowserMainLoop::GetInstance()->media_stream_manager(), | 156 BrowserMainLoop::GetInstance()->media_stream_manager(), |
154 base::Passed(&settings), base::Passed(&scoped_callback))); | 157 base::Passed(&settings), base::Passed(&scoped_callback))); |
155 } | 158 } |
156 | 159 |
157 void ImageCaptureImpl::TakePhoto(const mojo::String& source_id, | 160 void ImageCaptureImpl::TakePhoto(const std::string& source_id, |
158 const TakePhotoCallback& callback) { | 161 const TakePhotoCallback& callback) { |
159 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 162 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
160 | 163 |
161 media::ScopedResultCallback<TakePhotoCallback> scoped_callback( | 164 media::ScopedResultCallback<TakePhotoCallback> scoped_callback( |
162 base::Bind(&RunTakePhotoCallbackOnUIThread, callback), | 165 base::Bind(&RunTakePhotoCallbackOnUIThread, callback), |
163 media::BindToCurrentLoop(base::Bind(&RunFailedTakePhotoCallback))); | 166 media::BindToCurrentLoop(base::Bind(&RunFailedTakePhotoCallback))); |
164 | 167 |
165 BrowserThread::PostTask( | 168 BrowserThread::PostTask( |
166 BrowserThread::IO, FROM_HERE, | 169 BrowserThread::IO, FROM_HERE, |
167 base::Bind(&TakePhotoOnIOThread, source_id, | 170 base::Bind(&TakePhotoOnIOThread, source_id, |
168 BrowserMainLoop::GetInstance()->media_stream_manager(), | 171 BrowserMainLoop::GetInstance()->media_stream_manager(), |
169 base::Passed(&scoped_callback))); | 172 base::Passed(&scoped_callback))); |
170 } | 173 } |
171 | 174 |
172 ImageCaptureImpl::ImageCaptureImpl( | 175 ImageCaptureImpl::ImageCaptureImpl( |
173 mojo::InterfaceRequest<media::mojom::ImageCapture> request) | 176 mojo::InterfaceRequest<media::mojom::ImageCapture> request) |
174 : binding_(this, std::move(request)) {} | 177 : binding_(this, std::move(request)) {} |
175 | 178 |
176 } // namespace content | 179 } // namespace content |
OLD | NEW |