diff options
author | ajose <ajose@chromium.org> | 2015-08-27 15:09:02 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-08-27 22:09:38 +0000 |
commit | d8905acfdefef67cfb37e2f9d79ae1171c60dab6 (patch) | |
tree | 486c4efdef5d00f4890108d5d265c45e2d55ab3f /media/capture | |
parent | 4b5c4377342d76221ed7a1d7986b7b6e03c4ccc5 (diff) | |
download | chromium_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.cc | 6 | ||||
-rw-r--r-- | media/capture/video/mac/video_capture_device_mac.mm | 2 | ||||
-rw-r--r-- | media/capture/video/video_capture_device.cc | 15 | ||||
-rw-r--r-- | media/capture/video/video_capture_device.h | 9 | ||||
-rw-r--r-- | media/capture/video/win/video_capture_device_win.cc | 18 | ||||
-rw-r--r-- | media/capture/video/win/video_capture_device_win.h | 2 |
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_; |