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

Unified Diff: media/capture/video/mac/video_capture_device_mac.mm

Issue 1815983003: Remove deprecated QTKit Video Capture Support (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 4 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: media/capture/video/mac/video_capture_device_mac.mm
diff --git a/media/capture/video/mac/video_capture_device_mac.mm b/media/capture/video/mac/video_capture_device_mac.mm
index ec6fcaf83f9279d46beea362f6b16a9814607456..39b6a3da0923fa30c104ba3585eda89b1cdbd15e 100644
--- a/media/capture/video/mac/video_capture_device_mac.mm
+++ b/media/capture/video/mac/video_capture_device_mac.mm
@@ -27,7 +27,6 @@
#include "media/base/timestamp_constants.h"
#import "media/capture/video/mac/platform_video_capturing_mac.h"
#import "media/capture/video/mac/video_capture_device_avfoundation_mac.h"
-#import "media/capture/video/mac/video_capture_device_qtkit_mac.h"
#include "ui/gfx/geometry/size.h"
@implementation DeviceNameAndTransportType
@@ -59,23 +58,6 @@ const float kMaxFrameRate = 30.0f;
// In device identifiers, the USB VID and PID are stored in 4 bytes each.
const size_t kVidPidSize = 4;
-const struct Resolution {
- const int width;
- const int height;
-} kQVGA = {320, 240}, kVGA = {640, 480}, kHD = {1280, 720};
-
-const struct Resolution* const kWellSupportedResolutions[] = {
- &kQVGA,
- &kVGA,
- &kHD,
-};
-
-// Rescaling the image to fix the pixel aspect ratio runs the risk of making
-// the aspect ratio worse, if QTKit selects a new source mode with a different
-// shape. This constant ensures that we don't take this risk if the current
-// aspect ratio is tolerable.
-const float kMaxPixelAspectRatio = 1.15;
-
// The following constants are extracted from the specification "Universal
// Serial Bus Device Class Definition for Video Devices", Rev. 1.1 June 1, 2005.
// http://www.usb.org/developers/devclass_docs/USB_Video_Class_1_1.zip
@@ -101,21 +83,6 @@ typedef struct IOUSBInterfaceDescriptor {
UInt8 bUnitID;
} IOUSBInterfaceDescriptor;
-static void GetBestMatchSupportedResolution(gfx::Size* resolution) {
- int min_diff = std::numeric_limits<int32_t>::max();
- const int desired_area = resolution->GetArea();
- for (size_t i = 0; i < arraysize(kWellSupportedResolutions); ++i) {
- const int area = kWellSupportedResolutions[i]->width *
- kWellSupportedResolutions[i]->height;
- const int diff = std::abs(desired_area - area);
- if (diff < min_diff) {
- min_diff = diff;
- resolution->SetSize(kWellSupportedResolutions[i]->width,
- kWellSupportedResolutions[i]->height);
- }
- }
-}
-
// Tries to create a user-side device interface for a given USB device. Returns
// true if interface was found and passes it back in |device_interface|. The
// caller should release |device_interface|.
@@ -347,15 +314,11 @@ const std::string VideoCaptureDevice::Name::GetModel() const {
VideoCaptureDeviceMac::VideoCaptureDeviceMac(const Name& device_name)
: device_name_(device_name),
- tried_to_square_pixels_(false),
task_runner_(base::ThreadTaskRunnerHandle::Get()),
state_(kNotInitialized),
capture_device_(nil),
first_timestamp_(media::kNoTimestamp()),
weak_factory_(this) {
- // Avoid reconfiguring AVFoundation or blacklisted devices.
- final_resolution_selected_ = AVFoundationGlue::IsAVFoundationSupported() ||
- device_name.is_blacklisted();
}
VideoCaptureDeviceMac::~VideoCaptureDeviceMac() {
@@ -371,18 +334,10 @@ void VideoCaptureDeviceMac::AllocateAndStart(
return;
}
- // QTKit API can scale captured frame to any size requested, which would lead
- // to undesired aspect ratio changes. Try to open the camera with a known
- // supported format and let the client crop/pad the captured frames.
- gfx::Size resolution = params.requested_format.frame_size;
- if (!AVFoundationGlue::IsAVFoundationSupported())
- GetBestMatchSupportedResolution(&resolution);
-
client_ = std::move(client);
if (device_name_.capture_api_type() == Name::AVFOUNDATION)
LogMessage("Using AVFoundation for device: " + device_name_.name());
- else
- LogMessage("Using QTKit for device: " + device_name_.name());
+
NSString* deviceId =
[NSString stringWithUTF8String:device_name_.id().c_str()];
@@ -393,26 +348,16 @@ void VideoCaptureDeviceMac::AllocateAndStart(
return;
}
- capture_format_.frame_size = resolution;
+ capture_format_.frame_size = params.requested_format.frame_size;
capture_format_.frame_rate =
std::max(kMinFrameRate,
std::min(params.requested_format.frame_rate, kMaxFrameRate));
- // Leave the pixel format selection to AVFoundation/QTKit. The pixel format
+ // Leave the pixel format selection to AVFoundation. The pixel format
// will be passed to |ReceiveFrame|.
capture_format_.pixel_format = PIXEL_FORMAT_UNKNOWN;
- // QTKit: Set the capture resolution only if this is VGA or smaller, otherwise
- // leave it unconfigured and start capturing: QTKit will produce frames at the
- // native resolution, allowing us to identify cameras whose native resolution
- // is too low for HD. This additional information comes at a cost in startup
- // latency, because the webcam will need to be reopened if its default
- // resolution is not HD or VGA.
- // AVfoundation is configured for all resolutions.
- if (AVFoundationGlue::IsAVFoundationSupported() ||
- resolution.width() <= kVGA.width || resolution.height() <= kVGA.height) {
if (!UpdateCaptureResolution())
return;
- }
// Try setting the power line frequency removal (anti-flicker). The built-in
// cameras are normally suspended so the configuration must happen right
@@ -445,7 +390,6 @@ void VideoCaptureDeviceMac::StopAndDeAllocate() {
[capture_device_ setFrameReceiver:nil];
client_.reset();
state_ = kIdle;
- tried_to_square_pixels_ = false;
}
bool VideoCaptureDeviceMac::Init(
@@ -456,9 +400,6 @@ bool VideoCaptureDeviceMac::Init(
if (capture_api_type == Name::AVFOUNDATION) {
capture_device_ =
[[VideoCaptureDeviceAVFoundation alloc] initWithFrameReceiver:this];
- } else {
- capture_device_ =
- [[VideoCaptureDeviceQTKit alloc] initWithFrameReceiver:this];
}
if (!capture_device_)
@@ -475,70 +416,8 @@ void VideoCaptureDeviceMac::ReceiveFrame(const uint8_t* video_frame,
int aspect_denominator,
base::TimeDelta timestamp) {
// This method is safe to call from a device capture thread, i.e. any thread
- // controlled by QTKit/AVFoundation.
- if (!final_resolution_selected_) {
- DCHECK(!AVFoundationGlue::IsAVFoundationSupported());
- if (capture_format_.frame_size.width() > kVGA.width ||
- capture_format_.frame_size.height() > kVGA.height) {
- // We are requesting HD. Make sure that the picture is good, otherwise
- // drop down to VGA.
- bool change_to_vga = false;
- if (frame_format.frame_size.width() <
- capture_format_.frame_size.width() ||
- frame_format.frame_size.height() <
- capture_format_.frame_size.height()) {
- // These are the default capture settings, not yet configured to match
- // |capture_format_|.
- DCHECK(frame_format.frame_rate == 0);
- DVLOG(1) << "Switching to VGA because the default resolution is "
- << frame_format.frame_size.ToString();
- change_to_vga = true;
- }
-
- if (capture_format_.frame_size == frame_format.frame_size &&
- aspect_numerator != aspect_denominator) {
- DVLOG(1) << "Switching to VGA because HD has nonsquare pixel "
- << "aspect ratio " << aspect_numerator << ":"
- << aspect_denominator;
- change_to_vga = true;
- }
-
- if (change_to_vga)
- capture_format_.frame_size.SetSize(kVGA.width, kVGA.height);
- }
-
- if (capture_format_.frame_size == frame_format.frame_size &&
- !tried_to_square_pixels_ &&
- (aspect_numerator > kMaxPixelAspectRatio * aspect_denominator ||
- aspect_denominator > kMaxPixelAspectRatio * aspect_numerator)) {
- // The requested size results in non-square PAR. Shrink the frame to 1:1
- // PAR (assuming QTKit selects the same input mode, which is not
- // guaranteed).
- int new_width = capture_format_.frame_size.width();
- int new_height = capture_format_.frame_size.height();
- if (aspect_numerator < aspect_denominator)
- new_width = (new_width * aspect_numerator) / aspect_denominator;
- else
- new_height = (new_height * aspect_denominator) / aspect_numerator;
- capture_format_.frame_size.SetSize(new_width, new_height);
- tried_to_square_pixels_ = true;
- }
-
- if (capture_format_.frame_size == frame_format.frame_size) {
- final_resolution_selected_ = true;
- } else {
- UpdateCaptureResolution();
- // Let the resolution update sink through QTKit and wait for next frame.
- return;
- }
- }
-
- // QTKit capture source can change resolution if someone else reconfigures the
- // camera, and that is fine: http://crbug.com/353620. In AVFoundation, this
- // should not happen, it should resize internally.
- if (!AVFoundationGlue::IsAVFoundationSupported()) {
- capture_format_.frame_size = frame_format.frame_size;
- } else if (capture_format_.frame_size != frame_format.frame_size) {
+ // controlled by AVFoundation.
+ if (capture_format_.frame_size != frame_format.frame_size) {
ReceiveError(FROM_HERE,
"Captured resolution " + frame_format.frame_size.ToString() +
", and expected " + capture_format_.frame_size.ToString());
« no previous file with comments | « media/capture/video/mac/video_capture_device_mac.h ('k') | media/capture/video/mac/video_capture_device_qtkit_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698