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

Unified Diff: media/video/capture/win/video_capture_device_win.cc

Issue 558503003: Windows video capture: Remove duplicated code from GetDeviceSupportedFormats* (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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/video/capture/win/video_capture_device_win.cc
diff --git a/media/video/capture/win/video_capture_device_win.cc b/media/video/capture/win/video_capture_device_win.cc
index 877c543cc187a34fc4b4ef7926fb7bb6628d4d44..570e41155fe89b7a078371e52c70734a5fb2b573 100644
--- a/media/video/capture/win/video_capture_device_win.cc
+++ b/media/video/capture/win/video_capture_device_win.cc
@@ -223,17 +223,11 @@ VideoCaptureDeviceWin::~VideoCaptureDeviceWin() {
bool VideoCaptureDeviceWin::Init() {
DCHECK(CalledOnValidThread());
- HRESULT hr = GetDeviceFilter(device_name_.id(), capture_filter_.Receive());
- if (!capture_filter_) {
- DLOG(ERROR) << "Failed to create capture filter: "
- << logging::SystemErrorCodeToString(hr);
- return false;
- }
- output_capture_pin_ =
- GetPin(capture_filter_, PINDIR_OUTPUT, PIN_CATEGORY_CAPTURE);
- if (!output_capture_pin_) {
- DLOG(ERROR) << "Failed to get capture output pin";
+ if (!VideoCaptureDeviceWin::GetDeviceSupportedFormats(device_name_,
+ &capture_filter_,
+ &output_capture_pin_,
+ &capabilities_)) {
return false;
}
@@ -246,8 +240,8 @@ bool VideoCaptureDeviceWin::Init() {
input_sink_pin_ = sink_filter_->GetPin(0);
- hr = graph_builder_.CreateInstance(CLSID_FilterGraph, NULL,
- CLSCTX_INPROC_SERVER);
+ HRESULT hr = graph_builder_.CreateInstance(
+ CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER);
if (FAILED(hr)) {
DLOG(ERROR) << "Failed to create graph builder: "
<< logging::SystemErrorCodeToString(hr);
@@ -275,7 +269,7 @@ bool VideoCaptureDeviceWin::Init() {
return false;
}
- return CreateCapabilityMap();
+ return true;
}
void VideoCaptureDeviceWin::AllocateAndStart(
@@ -439,10 +433,28 @@ void VideoCaptureDeviceWin::FrameReceived(const uint8* buffer,
buffer, length, capture_format_, 0, base::TimeTicks::Now());
}
-bool VideoCaptureDeviceWin::CreateCapabilityMap() {
- DCHECK(CalledOnValidThread());
+// static
+bool VideoCaptureDeviceWin::GetDeviceSupportedFormats(
perkj_chrome 2014/09/19 10:04:55 It looks like this is doing much more that gettign
+ const Name& device,
+ ScopedComPtr<IBaseFilter>* capture_filter,
+ ScopedComPtr<IPin>* output_capture_pin,
+ CapabilityList* capabilities) {
+ HRESULT hr = GetDeviceFilter(device.id(), capture_filter->Receive());
+ if (!capture_filter) {
+ DLOG(ERROR) << "Failed to create capture filter: "
+ << logging::SystemErrorCodeToString(hr);
+ return false;
+ }
+
+ *output_capture_pin =
+ GetPin(*capture_filter, PINDIR_OUTPUT, PIN_CATEGORY_CAPTURE);
+ if (!*output_capture_pin) {
+ DLOG(ERROR) << "Failed to get capture output pin";
+ return false;
+ }
+
ScopedComPtr<IAMStreamConfig> stream_config;
- HRESULT hr = output_capture_pin_.QueryInterface(stream_config.Receive());
+ hr = output_capture_pin->QueryInterface(stream_config.Receive());
if (FAILED(hr)) {
DPLOG(ERROR) << "Failed to get IAMStreamConfig interface from "
"capture device: " << logging::SystemErrorCodeToString(hr);
@@ -451,7 +463,7 @@ bool VideoCaptureDeviceWin::CreateCapabilityMap() {
// Get interface used for getting the frame rate.
ScopedComPtr<IAMVideoControl> video_control;
- hr = capture_filter_.QueryInterface(video_control.Receive());
+ hr = capture_filter->QueryInterface(video_control.Receive());
DLOG_IF(WARNING, FAILED(hr)) << "IAMVideoControl Interface NOT SUPPORTED: "
<< logging::SystemErrorCodeToString(hr);
@@ -472,7 +484,7 @@ bool VideoCaptureDeviceWin::CreateCapabilityMap() {
if (hr != S_OK) {
DLOG(ERROR) << "Failed to GetStreamCaps: "
<< logging::SystemErrorCodeToString(hr);
- return false;
+ continue;
}
if (media_type->majortype == MEDIATYPE_Video &&
@@ -502,7 +514,7 @@ bool VideoCaptureDeviceWin::CreateCapabilityMap() {
// because GetFrameRateList array is reversed in the above camera. So
// a util method written. Can't assume the first value will return
// the max fps.
- hr = video_control->GetFrameRateList(output_capture_pin_, i, size,
+ hr = video_control->GetFrameRateList(*output_capture_pin, i, size,
&list_size, &max_fps);
// Sometimes |list_size| will be > 0, but max_fps will be NULL. Some
// drivers may return an HRESULT of S_FALSE which SUCCEEDED() translates
@@ -518,16 +530,11 @@ bool VideoCaptureDeviceWin::CreateCapabilityMap() {
? (kSecondsToReferenceTime / static_cast<float>(time_per_frame))
: 0.0;
- // DirectShow works at the moment only on integer frame_rate but the
- // best capability matching class works on rational frame rates.
- capability.frame_rate_numerator = capability.supported_format.frame_rate;
- capability.frame_rate_denominator = 1;
-
- capabilities_.Add(capability);
+ capabilities->Add(capability);
}
}
- return !capabilities_.empty();
+ return !capabilities->empty();
}
// Set the power line frequency removal in |capture_filter_| if available.

Powered by Google App Engine
This is Rietveld 408576698