summaryrefslogtreecommitdiffstats
path: root/media/capture
diff options
context:
space:
mode:
authorajose <ajose@chromium.org>2015-08-27 15:09:02 -0700
committerCommit bot <commit-bot@chromium.org>2015-08-27 22:09:38 +0000
commitd8905acfdefef67cfb37e2f9d79ae1171c60dab6 (patch)
tree486c4efdef5d00f4890108d5d265c45e2d55ab3f /media/capture
parent4b5c4377342d76221ed7a1d7986b7b6e03c4ccc5 (diff)
downloadchromium_src-d8905acfdefef67cfb37e2f9d79ae1171c60dab6.zip
chromium_src-d8905acfdefef67cfb37e2f9d79ae1171c60dab6.tar.gz
chromium_src-d8905acfdefef67cfb37e2f9d79ae1171c60dab6.tar.bz2
Add googPowerLineFrequency constraint to getUserMedia.
See http://crbug.com/520106 for more info. BUG=520106 Review URL: https://codereview.chromium.org/1301653007 Cr-Commit-Position: refs/heads/master@{#346000}
Diffstat (limited to 'media/capture')
-rw-r--r--media/capture/video/linux/video_capture_device_linux.cc6
-rw-r--r--media/capture/video/mac/video_capture_device_mac.mm2
-rw-r--r--media/capture/video/video_capture_device.cc15
-rw-r--r--media/capture/video/video_capture_device.h9
-rw-r--r--media/capture/video/win/video_capture_device_win.cc18
-rw-r--r--media/capture/video/win/video_capture_device_win.h2
6 files changed, 35 insertions, 17 deletions
diff --git a/media/capture/video/linux/video_capture_device_linux.cc b/media/capture/video/linux/video_capture_device_linux.cc
index b00b698..7d39f75 100644
--- a/media/capture/video/linux/video_capture_device_linux.cc
+++ b/media/capture/video/linux/video_capture_device_linux.cc
@@ -97,7 +97,7 @@ void VideoCaptureDeviceLinux::AllocateAndStart(
v4l2_thread_.Start();
const int line_frequency =
- TranslatePowerLineFrequencyToV4L2(GetPowerLineFrequencyForLocation());
+ TranslatePowerLineFrequencyToV4L2(GetPowerLineFrequency(params));
capture_impl_ = V4L2CaptureDelegate::CreateV4L2CaptureDelegate(
device_name_, v4l2_thread_.task_runner(), line_frequency);
if (!capture_impl_) {
@@ -134,9 +134,9 @@ void VideoCaptureDeviceLinux::SetRotation(int rotation) {
// static
int VideoCaptureDeviceLinux::TranslatePowerLineFrequencyToV4L2(int frequency) {
switch (frequency) {
- case kPowerLine50Hz:
+ case static_cast<int>(media::PowerLineFrequency::FREQUENCY_50HZ):
return V4L2_CID_POWER_LINE_FREQUENCY_50HZ;
- case kPowerLine60Hz:
+ case static_cast<int>(media::PowerLineFrequency::FREQUENCY_60HZ):
return V4L2_CID_POWER_LINE_FREQUENCY_60HZ;
default:
// If we have no idea of the frequency, at least try and set it to AUTO.
diff --git a/media/capture/video/mac/video_capture_device_mac.mm b/media/capture/video/mac/video_capture_device_mac.mm
index d5f6d60..df47e47 100644
--- a/media/capture/video/mac/video_capture_device_mac.mm
+++ b/media/capture/video/mac/video_capture_device_mac.mm
@@ -416,7 +416,7 @@ void VideoCaptureDeviceMac::AllocateAndStart(
if (base::HexStringToInt(base::StringPiece(vendor_id), &vendor_id_as_int) &&
base::HexStringToInt(base::StringPiece(model_id), &model_id_as_int)) {
SetAntiFlickerInUsbDevice(vendor_id_as_int, model_id_as_int,
- GetPowerLineFrequencyForLocation());
+ GetPowerLineFrequency(params));
}
}
diff --git a/media/capture/video/video_capture_device.cc b/media/capture/video/video_capture_device.cc
index 7260589..4b771e5 100644
--- a/media/capture/video/video_capture_device.cc
+++ b/media/capture/video/video_capture_device.cc
@@ -153,9 +153,20 @@ int VideoCaptureDevice::GetPowerLineFrequencyForLocation() const {
countries_using_60Hz + arraysize(countries_using_60Hz);
if (std::find(countries_using_60Hz, countries_using_60Hz_end,
current_country) == countries_using_60Hz_end) {
- return kPowerLine50Hz;
+ return static_cast<int>(media::PowerLineFrequency::FREQUENCY_50HZ);
+ }
+ return static_cast<int>(media::PowerLineFrequency::FREQUENCY_60HZ);
+}
+
+int VideoCaptureDevice::GetPowerLineFrequency(
+ const VideoCaptureParams& params) const {
+ switch (params.power_line_frequency) {
+ case media::PowerLineFrequency::FREQUENCY_50HZ: // fall through
+ case media::PowerLineFrequency::FREQUENCY_60HZ:
+ return static_cast<int>(params.power_line_frequency);
+ default:
+ return GetPowerLineFrequencyForLocation();
}
- return kPowerLine60Hz;
}
} // namespace media
diff --git a/media/capture/video/video_capture_device.h b/media/capture/video/video_capture_device.h
index 2f806d0..ea219ff 100644
--- a/media/capture/video/video_capture_device.h
+++ b/media/capture/video/video_capture_device.h
@@ -280,13 +280,14 @@ class MEDIA_EXPORT VideoCaptureDevice {
// happens first.
virtual void StopAndDeAllocate() = 0;
+ // Gets the power line frequency, either from the params if specified by the
+ // user or from the current system time zone.
+ int GetPowerLineFrequency(const VideoCaptureParams& params) const;
+
+ private:
// Gets the power line frequency from the current system time zone if this is
// defined, otherwise returns 0.
int GetPowerLineFrequencyForLocation() const;
-
- protected:
- static const int kPowerLine50Hz = 50;
- static const int kPowerLine60Hz = 60;
};
} // namespace media
diff --git a/media/capture/video/win/video_capture_device_win.cc b/media/capture/video/win/video_capture_device_win.cc
index 0ca81f1..20d3179 100644
--- a/media/capture/video/win/video_capture_device_win.cc
+++ b/media/capture/video/win/video_capture_device_win.cc
@@ -395,7 +395,7 @@ void VideoCaptureDeviceWin::AllocateAndStart(
return;
}
- SetAntiFlickerInCaptureFilter();
+ SetAntiFlickerInCaptureFilter(params);
if (media_type->subtype == kMediaSubTypeHDYC) {
// HDYC pixel format, used by the DeckLink capture card, needs an AVI
@@ -541,10 +541,13 @@ bool VideoCaptureDeviceWin::CreateCapabilityMap() {
}
// Set the power line frequency removal in |capture_filter_| if available.
-void VideoCaptureDeviceWin::SetAntiFlickerInCaptureFilter() {
- const int power_line_frequency = GetPowerLineFrequencyForLocation();
- if (power_line_frequency != kPowerLine50Hz &&
- power_line_frequency != kPowerLine60Hz) {
+void VideoCaptureDeviceWin::SetAntiFlickerInCaptureFilter(
+ const VideoCaptureParams& params) {
+ const int power_line_frequency = GetPowerLineFrequency(params);
+ if (power_line_frequency !=
+ static_cast<int>(media::PowerLineFrequency::FREQUENCY_50HZ) &&
+ power_line_frequency !=
+ static_cast<int>(media::PowerLineFrequency::FREQUENCY_60HZ)) {
return;
}
ScopedComPtr<IKsPropertySet> ks_propset;
@@ -560,7 +563,10 @@ void VideoCaptureDeviceWin::SetAntiFlickerInCaptureFilter() {
data.Property.Set = PROPSETID_VIDCAP_VIDEOPROCAMP;
data.Property.Id = KSPROPERTY_VIDEOPROCAMP_POWERLINE_FREQUENCY;
data.Property.Flags = KSPROPERTY_TYPE_SET;
- data.Value = (power_line_frequency == kPowerLine50Hz) ? 1 : 2;
+ data.Value = (power_line_frequency ==
+ static_cast<int>(media::PowerLineFrequency::FREQUENCY_50HZ))
+ ? 1
+ : 2;
data.Flags = KSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL;
hr = ks_propset->Set(PROPSETID_VIDCAP_VIDEOPROCAMP,
KSPROPERTY_VIDEOPROCAMP_POWERLINE_FREQUENCY, &data,
diff --git a/media/capture/video/win/video_capture_device_win.h b/media/capture/video/win/video_capture_device_win.h
index dd7485e..af171b3 100644
--- a/media/capture/video/win/video_capture_device_win.h
+++ b/media/capture/video/win/video_capture_device_win.h
@@ -84,7 +84,7 @@ class VideoCaptureDeviceWin : public base::NonThreadSafe,
void FrameReceived(const uint8* buffer, int length) override;
bool CreateCapabilityMap();
- void SetAntiFlickerInCaptureFilter();
+ void SetAntiFlickerInCaptureFilter(const VideoCaptureParams& params);
void SetErrorState(const std::string& reason);
Name device_name_;