| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 { FOURCC_UYVY, webrtc::kVideoUYVY }, // 16 bpp, fast conversion. | 45 { FOURCC_UYVY, webrtc::kVideoUYVY }, // 16 bpp, fast conversion. |
| 46 { FOURCC_NV12, webrtc::kVideoNV12 }, // 12 bpp, fast conversion. | 46 { FOURCC_NV12, webrtc::kVideoNV12 }, // 12 bpp, fast conversion. |
| 47 { FOURCC_NV21, webrtc::kVideoNV21 }, // 12 bpp, fast conversion. | 47 { FOURCC_NV21, webrtc::kVideoNV21 }, // 12 bpp, fast conversion. |
| 48 { FOURCC_MJPG, webrtc::kVideoMJPEG }, // compressed, slow conversion. | 48 { FOURCC_MJPG, webrtc::kVideoMJPEG }, // compressed, slow conversion. |
| 49 { FOURCC_ARGB, webrtc::kVideoARGB }, // 32 bpp, slow conversion. | 49 { FOURCC_ARGB, webrtc::kVideoARGB }, // 32 bpp, slow conversion. |
| 50 { FOURCC_24BG, webrtc::kVideoRGB24 }, // 24 bpp, slow conversion. | 50 { FOURCC_24BG, webrtc::kVideoRGB24 }, // 24 bpp, slow conversion. |
| 51 }; | 51 }; |
| 52 | 52 |
| 53 class WebRtcVcmFactory : public WebRtcVcmFactoryInterface { | 53 class WebRtcVcmFactory : public WebRtcVcmFactoryInterface { |
| 54 public: | 54 public: |
| 55 virtual webrtc::VideoCaptureModule* Create(int id, const char* device) { | 55 virtual rtc::scoped_refptr<webrtc::VideoCaptureModule> Create( |
| 56 int id, |
| 57 const char* device) { |
| 56 return webrtc::VideoCaptureFactory::Create(id, device); | 58 return webrtc::VideoCaptureFactory::Create(id, device); |
| 57 } | 59 } |
| 58 virtual webrtc::VideoCaptureModule::DeviceInfo* CreateDeviceInfo(int id) { | 60 virtual webrtc::VideoCaptureModule::DeviceInfo* CreateDeviceInfo(int id) { |
| 59 return webrtc::VideoCaptureFactory::CreateDeviceInfo(id); | 61 return webrtc::VideoCaptureFactory::CreateDeviceInfo(id); |
| 60 } | 62 } |
| 61 virtual void DestroyDeviceInfo(webrtc::VideoCaptureModule::DeviceInfo* info) { | 63 virtual void DestroyDeviceInfo(webrtc::VideoCaptureModule::DeviceInfo* info) { |
| 62 delete info; | 64 delete info; |
| 63 } | 65 } |
| 64 }; | 66 }; |
| 65 | 67 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 | 123 |
| 122 WebRtcVideoCapturer::WebRtcVideoCapturer(WebRtcVcmFactoryInterface* factory) | 124 WebRtcVideoCapturer::WebRtcVideoCapturer(WebRtcVcmFactoryInterface* factory) |
| 123 : factory_(factory), | 125 : factory_(factory), |
| 124 module_(nullptr), | 126 module_(nullptr), |
| 125 captured_frames_(0), | 127 captured_frames_(0), |
| 126 start_thread_(nullptr), | 128 start_thread_(nullptr), |
| 127 async_invoker_(nullptr) { | 129 async_invoker_(nullptr) { |
| 128 set_frame_factory(new WebRtcVideoFrameFactory()); | 130 set_frame_factory(new WebRtcVideoFrameFactory()); |
| 129 } | 131 } |
| 130 | 132 |
| 131 WebRtcVideoCapturer::~WebRtcVideoCapturer() { | 133 WebRtcVideoCapturer::~WebRtcVideoCapturer() {} |
| 132 if (module_) { | |
| 133 module_->Release(); | |
| 134 } | |
| 135 } | |
| 136 | 134 |
| 137 bool WebRtcVideoCapturer::Init(const Device& device) { | 135 bool WebRtcVideoCapturer::Init(const Device& device) { |
| 138 RTC_DCHECK(!start_thread_); | 136 RTC_DCHECK(!start_thread_); |
| 139 if (module_) { | 137 if (module_) { |
| 140 LOG(LS_ERROR) << "The capturer is already initialized"; | 138 LOG(LS_ERROR) << "The capturer is already initialized"; |
| 141 return false; | 139 return false; |
| 142 } | 140 } |
| 143 | 141 |
| 144 webrtc::VideoCaptureModule::DeviceInfo* info = factory_->CreateDeviceInfo(0); | 142 webrtc::VideoCaptureModule::DeviceInfo* info = factory_->CreateDeviceInfo(0); |
| 145 if (!info) { | 143 if (!info) { |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 return false; | 189 return false; |
| 192 } | 190 } |
| 193 | 191 |
| 194 module_ = factory_->Create(0, vcm_id); | 192 module_ = factory_->Create(0, vcm_id); |
| 195 if (!module_) { | 193 if (!module_) { |
| 196 LOG(LS_ERROR) << "Failed to create capturer for id: " << device.id; | 194 LOG(LS_ERROR) << "Failed to create capturer for id: " << device.id; |
| 197 return false; | 195 return false; |
| 198 } | 196 } |
| 199 | 197 |
| 200 // It is safe to change member attributes now. | 198 // It is safe to change member attributes now. |
| 201 module_->AddRef(); | |
| 202 SetId(device.id); | 199 SetId(device.id); |
| 203 SetSupportedFormats(supported); | 200 SetSupportedFormats(supported); |
| 204 | 201 |
| 205 return true; | 202 return true; |
| 206 } | 203 } |
| 207 | 204 |
| 208 bool WebRtcVideoCapturer::Init(webrtc::VideoCaptureModule* module) { | 205 bool WebRtcVideoCapturer::Init( |
| 206 const rtc::scoped_refptr<webrtc::VideoCaptureModule>& module) { |
| 209 RTC_DCHECK(!start_thread_); | 207 RTC_DCHECK(!start_thread_); |
| 210 if (module_) { | 208 if (module_) { |
| 211 LOG(LS_ERROR) << "The capturer is already initialized"; | 209 LOG(LS_ERROR) << "The capturer is already initialized"; |
| 212 return false; | 210 return false; |
| 213 } | 211 } |
| 214 if (!module) { | 212 if (!module) { |
| 215 LOG(LS_ERROR) << "Invalid VCM supplied"; | 213 LOG(LS_ERROR) << "Invalid VCM supplied"; |
| 216 return false; | 214 return false; |
| 217 } | 215 } |
| 218 // TODO(juberti): Set id and formats. | 216 // TODO(juberti): Set id and formats. |
| 219 (module_ = module)->AddRef(); | 217 module_ = module; |
| 220 return true; | 218 return true; |
| 221 } | 219 } |
| 222 | 220 |
| 223 bool WebRtcVideoCapturer::GetBestCaptureFormat(const VideoFormat& desired, | 221 bool WebRtcVideoCapturer::GetBestCaptureFormat(const VideoFormat& desired, |
| 224 VideoFormat* best_format) { | 222 VideoFormat* best_format) { |
| 225 if (!best_format) { | 223 if (!best_format) { |
| 226 return false; | 224 return false; |
| 227 } | 225 } |
| 228 | 226 |
| 229 if (!VideoCapturer::GetBestCaptureFormat(desired, best_format)) { | 227 if (!VideoCapturer::GetBestCaptureFormat(desired, best_format)) { |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 417 pixel_width = 1; | 415 pixel_width = 1; |
| 418 pixel_height = 1; | 416 pixel_height = 1; |
| 419 // Convert units from VideoFrame RenderTimeMs to CapturedFrame (nanoseconds). | 417 // Convert units from VideoFrame RenderTimeMs to CapturedFrame (nanoseconds). |
| 420 time_stamp = sample.render_time_ms() * rtc::kNumNanosecsPerMillisec; | 418 time_stamp = sample.render_time_ms() * rtc::kNumNanosecsPerMillisec; |
| 421 data_size = rtc::checked_cast<uint32_t>(length); | 419 data_size = rtc::checked_cast<uint32_t>(length); |
| 422 data = buffer; | 420 data = buffer; |
| 423 rotation = sample.rotation(); | 421 rotation = sample.rotation(); |
| 424 } | 422 } |
| 425 | 423 |
| 426 } // namespace cricket | 424 } // namespace cricket |
| OLD | NEW |