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

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: offline discussion Created 6 years, 2 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
« no previous file with comments | « media/video/capture/win/video_capture_device_win.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 83e1bd3919a3c240b5754884572eaeb228f6049f..de2130097ad69ba2a888136c9233ac1de67a8139 100644
--- a/media/video/capture/win/video_capture_device_win.cc
+++ b/media/video/capture/win/video_capture_device_win.cc
@@ -306,7 +306,8 @@ bool VideoCaptureDeviceWin::Init() {
return false;
}
- return CreateCapabilityMap();
+ return CreateCapabilityMap(
+ output_capture_pin_, capture_filter_, &capabilities_);
}
void VideoCaptureDeviceWin::AllocateAndStart(
@@ -473,11 +474,12 @@ void VideoCaptureDeviceWin::FrameReceived(const uint8* buffer,
buffer, length, capture_format_, 0, base::TimeTicks::Now());
}
-bool VideoCaptureDeviceWin::CreateCapabilityMap() {
- DCHECK(CalledOnValidThread());
+bool VideoCaptureDeviceWin::CreateCapabilityMap(IPin* output_capture_pin,
+ IBaseFilter* capture_filter,
+ CapabilityList* capabilities) {
ScopedComPtr<IAMStreamConfig> stream_config;
- HRESULT hr = output_capture_pin_.QueryInterface(stream_config.Receive());
- if (FAILED(hr)) {
+ HRESULT hr = output_capture_pin->QueryInterface(stream_config.Receive());
+ if (FAILED(hr) || !stream_config) {
DPLOG(ERROR) << "Failed to get IAMStreamConfig interface from "
"capture device: " << logging::SystemErrorCodeToString(hr);
return false;
@@ -485,9 +487,10 @@ bool VideoCaptureDeviceWin::CreateCapabilityMap() {
// Get interface used for getting the frame rate.
ScopedComPtr<IAMVideoControl> video_control;
- hr = capture_filter_.QueryInterface(video_control.Receive());
- DLOG_IF(WARNING, FAILED(hr)) << "IAMVideoControl Interface NOT SUPPORTED: "
- << logging::SystemErrorCodeToString(hr);
+ hr = capture_filter->QueryInterface(video_control.Receive());
+ DLOG_IF(WARNING, FAILED(hr) || !video_control)
+ << "IAMVideoControl Interface NOT SUPPORTED: "
+ << logging::SystemErrorCodeToString(hr);
int count = 0, size = 0;
hr = stream_config->GetNumberOfCapabilities(&count, &size);
@@ -504,7 +507,7 @@ bool VideoCaptureDeviceWin::CreateCapabilityMap() {
stream_index, media_type.Receive(), caps.get());
// GetStreamCaps() may return S_FALSE, so don't use FAILED() or SUCCEED()
// macros here since they'll trigger incorrectly.
- if (hr != S_OK) {
+ if (hr != S_OK || !media_type.get()) {
DLOG(ERROR) << "Failed to GetStreamCaps: "
<< logging::SystemErrorCodeToString(hr);
return false;
@@ -520,6 +523,10 @@ bool VideoCaptureDeviceWin::CreateCapabilityMap() {
VIDEOINFOHEADER* h =
reinterpret_cast<VIDEOINFOHEADER*>(media_type->pbFormat);
+ if (!h) {
+ DLOG(ERROR) << "VIDEOINFOHEADER is NULL";
+ continue;
+ }
format.frame_size.SetSize(h->bmiHeader.biWidth, h->bmiHeader.biHeight);
// Try to get a better |time_per_frame| from IAMVideoControl. If not, use
@@ -531,7 +538,7 @@ bool VideoCaptureDeviceWin::CreateCapabilityMap() {
const SIZE size = {format.frame_size.width(),
format.frame_size.height()};
hr = video_control->GetFrameRateList(
- output_capture_pin_, stream_index, size, &list_size, &max_fps);
+ output_capture_pin, stream_index, size, &list_size, &max_fps);
// Can't assume the first value will return the 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
@@ -547,11 +554,11 @@ bool VideoCaptureDeviceWin::CreateCapabilityMap() {
? (kSecondsToReferenceTime / static_cast<float>(time_per_frame))
: 0.0;
- capabilities_.emplace_back(stream_index, format);
+ capabilities->emplace_back(stream_index, format);
}
}
- return !capabilities_.empty();
+ return !capabilities->empty();
}
// Set the power line frequency removal in |capture_filter_| if available.
« no previous file with comments | « media/video/capture/win/video_capture_device_win.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698