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

Side by Side Diff: media/capture/video/mac/video_capture_device_mac.mm

Issue 1853743003: Remove platform_video_capturing_mac and the callback thread checker in VideoCaptureDeviceAVFoundati… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "media/capture/video/mac/video_capture_device_mac.h" 5 #include "media/capture/video/mac/video_capture_device_mac.h"
6 6
7 #include <IOKit/IOCFPlugIn.h> 7 #include <IOKit/IOCFPlugIn.h>
8 #include <IOKit/usb/IOUSBLib.h> 8 #include <IOKit/usb/IOUSBLib.h>
9 #include <IOKit/usb/USBSpec.h> 9 #include <IOKit/usb/USBSpec.h>
10 #include <stddef.h> 10 #include <stddef.h>
11 #include <stdint.h> 11 #include <stdint.h>
12 12
13 #include <limits> 13 #include <limits>
14 #include <utility> 14 #include <utility>
15 15
16 #include "base/bind.h" 16 #include "base/bind.h"
17 #include "base/location.h" 17 #include "base/location.h"
18 #include "base/logging.h" 18 #include "base/logging.h"
19 #include "base/mac/scoped_ioobject.h" 19 #include "base/mac/scoped_ioobject.h"
20 #include "base/mac/scoped_ioplugininterface.h" 20 #include "base/mac/scoped_ioplugininterface.h"
21 #include "base/macros.h" 21 #include "base/macros.h"
22 #include "base/single_thread_task_runner.h" 22 #include "base/single_thread_task_runner.h"
23 #include "base/strings/string_number_conversions.h" 23 #include "base/strings/string_number_conversions.h"
24 #include "base/thread_task_runner_handle.h" 24 #include "base/thread_task_runner_handle.h"
25 #include "base/time/time.h" 25 #include "base/time/time.h"
26 #import "media/base/mac/avfoundation_glue.h" 26 #import "media/base/mac/avfoundation_glue.h"
27 #include "media/base/timestamp_constants.h" 27 #include "media/base/timestamp_constants.h"
28 #import "media/capture/video/mac/platform_video_capturing_mac.h"
29 #import "media/capture/video/mac/video_capture_device_avfoundation_mac.h" 28 #import "media/capture/video/mac/video_capture_device_avfoundation_mac.h"
30 #include "ui/gfx/geometry/size.h" 29 #include "ui/gfx/geometry/size.h"
31 30
32 @implementation DeviceNameAndTransportType 31 @implementation DeviceNameAndTransportType
33 32
34 - (id)initWithName:(NSString*)deviceName transportType:(int32_t)transportType { 33 - (id)initWithName:(NSString*)deviceName transportType:(int32_t)transportType {
35 if (self = [super init]) { 34 if (self = [super init]) {
36 deviceName_.reset([deviceName copy]); 35 deviceName_.reset([deviceName copy]);
37 transportType_ = transportType; 36 transportType_ = transportType;
38 } 37 }
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 : device_name_(device_name), 315 : device_name_(device_name),
317 task_runner_(base::ThreadTaskRunnerHandle::Get()), 316 task_runner_(base::ThreadTaskRunnerHandle::Get()),
318 state_(kNotInitialized), 317 state_(kNotInitialized),
319 capture_device_(nil), 318 capture_device_(nil),
320 first_timestamp_(media::kNoTimestamp()), 319 first_timestamp_(media::kNoTimestamp()),
321 weak_factory_(this) { 320 weak_factory_(this) {
322 } 321 }
323 322
324 VideoCaptureDeviceMac::~VideoCaptureDeviceMac() { 323 VideoCaptureDeviceMac::~VideoCaptureDeviceMac() {
325 DCHECK(task_runner_->BelongsToCurrentThread()); 324 DCHECK(task_runner_->BelongsToCurrentThread());
326 [capture_device_ release];
327 } 325 }
328 326
329 void VideoCaptureDeviceMac::AllocateAndStart( 327 void VideoCaptureDeviceMac::AllocateAndStart(
330 const VideoCaptureParams& params, 328 const VideoCaptureParams& params,
331 scoped_ptr<VideoCaptureDevice::Client> client) { 329 scoped_ptr<VideoCaptureDevice::Client> client) {
332 DCHECK(task_runner_->BelongsToCurrentThread()); 330 DCHECK(task_runner_->BelongsToCurrentThread());
333 if (state_ != kIdle) { 331 if (state_ != kIdle) {
334 return; 332 return;
335 } 333 }
336 334
(...skipping 12 matching lines...) Expand all
349 } 347 }
350 348
351 capture_format_.frame_size = params.requested_format.frame_size; 349 capture_format_.frame_size = params.requested_format.frame_size;
352 capture_format_.frame_rate = 350 capture_format_.frame_rate =
353 std::max(kMinFrameRate, 351 std::max(kMinFrameRate,
354 std::min(params.requested_format.frame_rate, kMaxFrameRate)); 352 std::min(params.requested_format.frame_rate, kMaxFrameRate));
355 // Leave the pixel format selection to AVFoundation. The pixel format 353 // Leave the pixel format selection to AVFoundation. The pixel format
356 // will be passed to |ReceiveFrame|. 354 // will be passed to |ReceiveFrame|.
357 capture_format_.pixel_format = PIXEL_FORMAT_UNKNOWN; 355 capture_format_.pixel_format = PIXEL_FORMAT_UNKNOWN;
358 356
359 if (!UpdateCaptureResolution()) 357 if (!UpdateCaptureResolution())
360 return; 358 return;
361 359
362 // Try setting the power line frequency removal (anti-flicker). The built-in 360 // Try setting the power line frequency removal (anti-flicker). The built-in
363 // cameras are normally suspended so the configuration must happen right 361 // cameras are normally suspended so the configuration must happen right
364 // before starting capture and during configuration. 362 // before starting capture and during configuration.
365 const std::string& device_model = device_name_.GetModel(); 363 const std::string& device_model = device_name_.GetModel();
366 if (device_model.length() > 2 * kVidPidSize) { 364 if (device_model.length() > 2 * kVidPidSize) {
367 std::string vendor_id = device_model.substr(0, kVidPidSize); 365 std::string vendor_id = device_model.substr(0, kVidPidSize);
368 std::string model_id = device_model.substr(kVidPidSize + 1); 366 std::string model_id = device_model.substr(kVidPidSize + 1);
369 int vendor_id_as_int, model_id_as_int; 367 int vendor_id_as_int, model_id_as_int;
370 if (base::HexStringToInt(base::StringPiece(vendor_id), &vendor_id_as_int) && 368 if (base::HexStringToInt(base::StringPiece(vendor_id), &vendor_id_as_int) &&
(...skipping 19 matching lines...) Expand all
390 [capture_device_ setFrameReceiver:nil]; 388 [capture_device_ setFrameReceiver:nil];
391 client_.reset(); 389 client_.reset();
392 state_ = kIdle; 390 state_ = kIdle;
393 } 391 }
394 392
395 bool VideoCaptureDeviceMac::Init( 393 bool VideoCaptureDeviceMac::Init(
396 VideoCaptureDevice::Name::CaptureApiType capture_api_type) { 394 VideoCaptureDevice::Name::CaptureApiType capture_api_type) {
397 DCHECK(task_runner_->BelongsToCurrentThread()); 395 DCHECK(task_runner_->BelongsToCurrentThread());
398 DCHECK_EQ(state_, kNotInitialized); 396 DCHECK_EQ(state_, kNotInitialized);
399 397
400 if (capture_api_type == Name::AVFOUNDATION) { 398 if (capture_api_type != Name::AVFOUNDATION)
401 capture_device_ = 399 return false;
402 [[VideoCaptureDeviceAVFoundation alloc] initWithFrameReceiver:this]; 400
403 } 401 capture_device_.reset(
402 [[VideoCaptureDeviceAVFoundation alloc] initWithFrameReceiver:this]);
404 403
405 if (!capture_device_) 404 if (!capture_device_)
406 return false; 405 return false;
407 406
408 state_ = kIdle; 407 state_ = kIdle;
409 return true; 408 return true;
410 } 409 }
411 410
412 void VideoCaptureDeviceMac::ReceiveFrame(const uint8_t* video_frame, 411 void VideoCaptureDeviceMac::ReceiveFrame(const uint8_t* video_frame,
413 int video_frame_length, 412 int video_frame_length,
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 if (![capture_device_ setCaptureHeight:capture_format_.frame_size.height() 463 if (![capture_device_ setCaptureHeight:capture_format_.frame_size.height()
465 width:capture_format_.frame_size.width() 464 width:capture_format_.frame_size.width()
466 frameRate:capture_format_.frame_rate]) { 465 frameRate:capture_format_.frame_rate]) {
467 ReceiveError(FROM_HERE, "Could not configure capture device."); 466 ReceiveError(FROM_HERE, "Could not configure capture device.");
468 return false; 467 return false;
469 } 468 }
470 return true; 469 return true;
471 } 470 }
472 471
473 } // namespace media 472 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698