Chromium Code Reviews| 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)))); | |
|
Wez
2016/07/21 00:10:46
nit: I take it it's not possible to have this work
mcasas
2016/07/21 00:25:57
It's too complicated. TBH let's commit this first,
| |
| 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 |