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

Side by Side Diff: webrtc/modules/video_capture/windows/video_capture_ds.cc

Issue 2534553002: Replace VideoCaptureDataCallback by VideoSinkInterface. (Closed)
Patch Set: Break overlong lines. Created 4 years 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include "webrtc/modules/video_capture/windows/video_capture_ds.h" 11 #include "webrtc/modules/video_capture/windows/video_capture_ds.h"
12 12
13 #include "webrtc/modules/video_capture/video_capture_config.h" 13 #include "webrtc/modules/video_capture/video_capture_config.h"
14 #include "webrtc/modules/video_capture/windows/help_functions_ds.h" 14 #include "webrtc/modules/video_capture/windows/help_functions_ds.h"
15 #include "webrtc/modules/video_capture/windows/sink_filter_ds.h" 15 #include "webrtc/modules/video_capture/windows/sink_filter_ds.h"
16 #include "webrtc/system_wrappers/include/critical_section_wrapper.h" 16 #include "webrtc/system_wrappers/include/critical_section_wrapper.h"
17 #include "webrtc/system_wrappers/include/trace.h" 17 #include "webrtc/system_wrappers/include/trace.h"
18 18
19 #include <Dvdmedia.h> // VIDEOINFOHEADER2 19 #include <Dvdmedia.h> // VIDEOINFOHEADER2
20 20
21 namespace webrtc 21 namespace webrtc
22 { 22 {
23 namespace videocapturemodule 23 namespace videocapturemodule
24 { 24 {
25 VideoCaptureDS::VideoCaptureDS(const int32_t id) 25 VideoCaptureDS::VideoCaptureDS()
26 : VideoCaptureImpl(id), _dsInfo(id), _captureFilter(NULL), 26 : _captureFilter(NULL),
27 _graphBuilder(NULL), _mediaControl(NULL), _sinkFilter(NULL), 27 _graphBuilder(NULL), _mediaControl(NULL), _sinkFilter(NULL),
28 _inputSendPin(NULL), _outputCapturePin(NULL), _dvFilter(NULL), 28 _inputSendPin(NULL), _outputCapturePin(NULL), _dvFilter(NULL),
29 _inputDvPin(NULL), _outputDvPin(NULL) 29 _inputDvPin(NULL), _outputDvPin(NULL)
30 { 30 {
31 } 31 }
32 32
33 VideoCaptureDS::~VideoCaptureDS() 33 VideoCaptureDS::~VideoCaptureDS()
34 { 34 {
35 if (_mediaControl) 35 if (_mediaControl)
36 { 36 {
(...skipping 16 matching lines...) Expand all
53 RELEASE_AND_CLEAR(_dvFilter); 53 RELEASE_AND_CLEAR(_dvFilter);
54 54
55 RELEASE_AND_CLEAR(_mediaControl); 55 RELEASE_AND_CLEAR(_mediaControl);
56 56
57 RELEASE_AND_CLEAR(_inputDvPin); 57 RELEASE_AND_CLEAR(_inputDvPin);
58 RELEASE_AND_CLEAR(_outputDvPin); 58 RELEASE_AND_CLEAR(_outputDvPin);
59 59
60 RELEASE_AND_CLEAR(_graphBuilder); 60 RELEASE_AND_CLEAR(_graphBuilder);
61 } 61 }
62 62
63 int32_t VideoCaptureDS::Init(const int32_t id, const char* deviceUniqueIdUTF8) 63 int32_t VideoCaptureDS::Init(const char* deviceUniqueIdUTF8)
64 { 64 {
65 const int32_t nameLength = 65 const int32_t nameLength =
66 (int32_t) strlen((char*) deviceUniqueIdUTF8); 66 (int32_t) strlen((char*) deviceUniqueIdUTF8);
67 if (nameLength > kVideoCaptureUniqueNameLength) 67 if (nameLength > kVideoCaptureUniqueNameLength)
68 return -1; 68 return -1;
69 69
70 // Store the device name 70 // Store the device name
71 _deviceUniqueId = new (std::nothrow) char[nameLength + 1]; 71 _deviceUniqueId = new (std::nothrow) char[nameLength + 1];
72 memcpy(_deviceUniqueId, deviceUniqueIdUTF8, nameLength + 1); 72 memcpy(_deviceUniqueId, deviceUniqueIdUTF8, nameLength + 1);
73 73
74 if (_dsInfo.Init() != 0) 74 if (_dsInfo.Init() != 0)
75 return -1; 75 return -1;
76 76
77 _captureFilter = _dsInfo.GetDeviceFilter(deviceUniqueIdUTF8); 77 _captureFilter = _dsInfo.GetDeviceFilter(deviceUniqueIdUTF8);
78 if (!_captureFilter) 78 if (!_captureFilter)
79 { 79 {
80 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, 80 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
81 "Failed to create capture filter."); 81 "Failed to create capture filter.");
82 return -1; 82 return -1;
83 } 83 }
84 84
85 // Get the interface for DirectShow's GraphBuilder 85 // Get the interface for DirectShow's GraphBuilder
86 HRESULT hr = CoCreateInstance(CLSID_FilterGraph, NULL, 86 HRESULT hr = CoCreateInstance(CLSID_FilterGraph, NULL,
87 CLSCTX_INPROC_SERVER, IID_IGraphBuilder, 87 CLSCTX_INPROC_SERVER, IID_IGraphBuilder,
88 (void **) &_graphBuilder); 88 (void **) &_graphBuilder);
89 if (FAILED(hr)) 89 if (FAILED(hr))
90 { 90 {
91 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, 91 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
92 "Failed to create graph builder."); 92 "Failed to create graph builder.");
93 return -1; 93 return -1;
94 } 94 }
95 95
96 hr = _graphBuilder->QueryInterface(IID_IMediaControl, 96 hr = _graphBuilder->QueryInterface(IID_IMediaControl,
97 (void **) &_mediaControl); 97 (void **) &_mediaControl);
98 if (FAILED(hr)) 98 if (FAILED(hr))
99 { 99 {
100 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, 100 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
101 "Failed to create media control builder."); 101 "Failed to create media control builder.");
102 return -1; 102 return -1;
103 } 103 }
104 hr = _graphBuilder->AddFilter(_captureFilter, CAPTURE_FILTER_NAME); 104 hr = _graphBuilder->AddFilter(_captureFilter, CAPTURE_FILTER_NAME);
105 if (FAILED(hr)) 105 if (FAILED(hr))
106 { 106 {
107 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, 107 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
108 "Failed to add the capture device to the graph."); 108 "Failed to add the capture device to the graph.");
109 return -1; 109 return -1;
110 } 110 }
111 111
112 _outputCapturePin = GetOutputPin(_captureFilter, PIN_CATEGORY_CAPTURE); 112 _outputCapturePin = GetOutputPin(_captureFilter, PIN_CATEGORY_CAPTURE);
113 113
114 // Create the sink filte used for receiving Captured frames. 114 // Create the sink filte used for receiving Captured frames.
115 _sinkFilter = new CaptureSinkFilter(SINK_FILTER_NAME, NULL, &hr, 115 _sinkFilter = new CaptureSinkFilter(SINK_FILTER_NAME, NULL, &hr,
116 *this, _id); 116 *this);
117 if (hr != S_OK) 117 if (hr != S_OK)
118 { 118 {
119 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, 119 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
120 "Failed to create send filter"); 120 "Failed to create send filter");
121 return -1; 121 return -1;
122 } 122 }
123 _sinkFilter->AddRef(); 123 _sinkFilter->AddRef();
124 124
125 hr = _graphBuilder->AddFilter(_sinkFilter, SINK_FILTER_NAME); 125 hr = _graphBuilder->AddFilter(_sinkFilter, SINK_FILTER_NAME);
126 if (FAILED(hr)) 126 if (FAILED(hr))
127 { 127 {
128 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, 128 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
129 "Failed to add the send filter to the graph."); 129 "Failed to add the send filter to the graph.");
130 return -1; 130 return -1;
131 } 131 }
132 _inputSendPin = GetInputPin(_sinkFilter); 132 _inputSendPin = GetInputPin(_sinkFilter);
133 133
134 // Temporary connect here. 134 // Temporary connect here.
135 // This is done so that no one else can use the capture device. 135 // This is done so that no one else can use the capture device.
136 if (SetCameraOutput(_requestedCapability) != 0) 136 if (SetCameraOutput(_requestedCapability) != 0)
137 { 137 {
138 return -1; 138 return -1;
139 } 139 }
140 hr = _mediaControl->Pause(); 140 hr = _mediaControl->Pause();
141 if (FAILED(hr)) 141 if (FAILED(hr))
142 { 142 {
143 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, 143 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
144 "Failed to Pause the Capture device. Is it already occupied ? %d.", 144 "Failed to Pause the Capture device. Is it already occupied ? %d.",
145 hr); 145 hr);
146 return -1; 146 return -1;
147 } 147 }
148 WEBRTC_TRACE(webrtc::kTraceStateInfo, webrtc::kTraceVideoCapture, _id, 148 WEBRTC_TRACE(webrtc::kTraceStateInfo, webrtc::kTraceVideoCapture, 0,
149 "Capture device '%s' initialized.", deviceUniqueIdUTF8); 149 "Capture device '%s' initialized.", deviceUniqueIdUTF8);
150 return 0; 150 return 0;
151 } 151 }
152 152
153 int32_t VideoCaptureDS::StartCapture( 153 int32_t VideoCaptureDS::StartCapture(
154 const VideoCaptureCapability& capability) 154 const VideoCaptureCapability& capability)
155 { 155 {
156 CriticalSectionScoped cs(&_apiCs); 156 CriticalSectionScoped cs(&_apiCs);
157 157
158 if (capability != _requestedCapability) 158 if (capability != _requestedCapability)
159 { 159 {
160 DisconnectGraph(); 160 DisconnectGraph();
161 161
162 if (SetCameraOutput(capability) != 0) 162 if (SetCameraOutput(capability) != 0)
163 { 163 {
164 return -1; 164 return -1;
165 } 165 }
166 } 166 }
167 HRESULT hr = _mediaControl->Run(); 167 HRESULT hr = _mediaControl->Run();
168 if (FAILED(hr)) 168 if (FAILED(hr))
169 { 169 {
170 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, 170 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
171 "Failed to start the Capture device."); 171 "Failed to start the Capture device.");
172 return -1; 172 return -1;
173 } 173 }
174 return 0; 174 return 0;
175 } 175 }
176 176
177 int32_t VideoCaptureDS::StopCapture() 177 int32_t VideoCaptureDS::StopCapture()
178 { 178 {
179 CriticalSectionScoped cs(&_apiCs); 179 CriticalSectionScoped cs(&_apiCs);
180 180
181 HRESULT hr = _mediaControl->Pause(); 181 HRESULT hr = _mediaControl->Pause();
182 if (FAILED(hr)) 182 if (FAILED(hr))
183 { 183 {
184 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, 184 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
185 "Failed to stop the capture graph. %d", hr); 185 "Failed to stop the capture graph. %d", hr);
186 return -1; 186 return -1;
187 } 187 }
188 return 0; 188 return 0;
189 } 189 }
190 bool VideoCaptureDS::CaptureStarted() 190 bool VideoCaptureDS::CaptureStarted()
191 { 191 {
192 OAFilterState state = 0; 192 OAFilterState state = 0;
193 HRESULT hr = _mediaControl->GetState(1000, &state); 193 HRESULT hr = _mediaControl->GetState(1000, &state);
194 if (hr != S_OK && hr != VFW_S_CANT_CUE) 194 if (hr != S_OK && hr != VFW_S_CANT_CUE)
195 { 195 {
196 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, 196 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
197 "Failed to get the CaptureStarted status"); 197 "Failed to get the CaptureStarted status");
198 } 198 }
199 WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideoCapture, _id, 199 WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideoCapture, 0,
200 "CaptureStarted %d", state); 200 "CaptureStarted %d", state);
201 return state == State_Running; 201 return state == State_Running;
202 202
203 } 203 }
204 int32_t VideoCaptureDS::CaptureSettings( 204 int32_t VideoCaptureDS::CaptureSettings(
205 VideoCaptureCapability& settings) 205 VideoCaptureCapability& settings)
206 { 206 {
207 settings = _requestedCapability; 207 settings = _requestedCapability;
208 return 0; 208 return 0;
209 } 209 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 } 245 }
246 246
247 IAMStreamConfig* streamConfig = NULL; 247 IAMStreamConfig* streamConfig = NULL;
248 AM_MEDIA_TYPE *pmt = NULL; 248 AM_MEDIA_TYPE *pmt = NULL;
249 VIDEO_STREAM_CONFIG_CAPS caps; 249 VIDEO_STREAM_CONFIG_CAPS caps;
250 250
251 HRESULT hr = _outputCapturePin->QueryInterface(IID_IAMStreamConfig, 251 HRESULT hr = _outputCapturePin->QueryInterface(IID_IAMStreamConfig,
252 (void**) &streamConfig); 252 (void**) &streamConfig);
253 if (hr) 253 if (hr)
254 { 254 {
255 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, 255 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
256 "Can't get the Capture format settings."); 256 "Can't get the Capture format settings.");
257 return -1; 257 return -1;
258 } 258 }
259 259
260 //Get the windows capability from the capture device 260 //Get the windows capability from the capture device
261 bool isDVCamera = false; 261 bool isDVCamera = false;
262 hr = streamConfig->GetStreamCaps( 262 hr = streamConfig->GetStreamCaps(
263 windowsCapability.directShowCapabilityIndex, 263 windowsCapability.directShowCapabilityIndex,
264 &pmt, reinterpret_cast<BYTE*> (&caps)); 264 &pmt, reinterpret_cast<BYTE*> (&caps));
265 if (!FAILED(hr)) 265 if (!FAILED(hr))
(...skipping 30 matching lines...) Expand all
296 //Check if this is a DV camera and we need to add MS DV Filter 296 //Check if this is a DV camera and we need to add MS DV Filter
297 if (pmt->subtype == MEDIASUBTYPE_dvsl 297 if (pmt->subtype == MEDIASUBTYPE_dvsl
298 || pmt->subtype == MEDIASUBTYPE_dvsd 298 || pmt->subtype == MEDIASUBTYPE_dvsd
299 || pmt->subtype == MEDIASUBTYPE_dvhd) 299 || pmt->subtype == MEDIASUBTYPE_dvhd)
300 isDVCamera = true; // This is a DV camera. Use MS DV filter 300 isDVCamera = true; // This is a DV camera. Use MS DV filter
301 } 301 }
302 RELEASE_AND_CLEAR(streamConfig); 302 RELEASE_AND_CLEAR(streamConfig);
303 303
304 if (FAILED(hr)) 304 if (FAILED(hr))
305 { 305 {
306 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, 306 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
307 "Failed to set capture device output format"); 307 "Failed to set capture device output format");
308 return -1; 308 return -1;
309 } 309 }
310 310
311 if (isDVCamera) 311 if (isDVCamera)
312 { 312 {
313 hr = ConnectDVCamera(); 313 hr = ConnectDVCamera();
314 } 314 }
315 else 315 else
316 { 316 {
317 hr = _graphBuilder->ConnectDirect(_outputCapturePin, _inputSendPin, 317 hr = _graphBuilder->ConnectDirect(_outputCapturePin, _inputSendPin,
318 NULL); 318 NULL);
319 } 319 }
320 if (hr != S_OK) 320 if (hr != S_OK)
321 { 321 {
322 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, 322 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
323 "Failed to connect the Capture graph %d", hr); 323 "Failed to connect the Capture graph %d", hr);
324 return -1; 324 return -1;
325 } 325 }
326 return 0; 326 return 0;
327 } 327 }
328 328
329 int32_t VideoCaptureDS::DisconnectGraph() 329 int32_t VideoCaptureDS::DisconnectGraph()
330 { 330 {
331 HRESULT hr = _mediaControl->Stop(); 331 HRESULT hr = _mediaControl->Stop();
332 hr += _graphBuilder->Disconnect(_outputCapturePin); 332 hr += _graphBuilder->Disconnect(_outputCapturePin);
333 hr += _graphBuilder->Disconnect(_inputSendPin); 333 hr += _graphBuilder->Disconnect(_inputSendPin);
334 334
335 //if the DV camera filter exist 335 //if the DV camera filter exist
336 if (_dvFilter) 336 if (_dvFilter)
337 { 337 {
338 _graphBuilder->Disconnect(_inputDvPin); 338 _graphBuilder->Disconnect(_inputDvPin);
339 _graphBuilder->Disconnect(_outputDvPin); 339 _graphBuilder->Disconnect(_outputDvPin);
340 } 340 }
341 if (hr != S_OK) 341 if (hr != S_OK)
342 { 342 {
343 WEBRTC_TRACE( webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, 343 WEBRTC_TRACE( webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
344 "Failed to Stop the Capture device for reconfiguration %d", 344 "Failed to Stop the Capture device for reconfiguration %d",
345 hr); 345 hr);
346 return -1; 346 return -1;
347 } 347 }
348 return 0; 348 return 0;
349 } 349 }
350 HRESULT VideoCaptureDS::ConnectDVCamera() 350 HRESULT VideoCaptureDS::ConnectDVCamera()
351 { 351 {
352 HRESULT hr = S_OK; 352 HRESULT hr = S_OK;
353 353
354 if (!_dvFilter) 354 if (!_dvFilter)
355 { 355 {
356 hr = CoCreateInstance(CLSID_DVVideoCodec, NULL, CLSCTX_INPROC, 356 hr = CoCreateInstance(CLSID_DVVideoCodec, NULL, CLSCTX_INPROC,
357 IID_IBaseFilter, (void **) &_dvFilter); 357 IID_IBaseFilter, (void **) &_dvFilter);
358 if (hr != S_OK) 358 if (hr != S_OK)
359 { 359 {
360 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, 360 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
361 "Failed to create the dv decoder: %x", hr); 361 "Failed to create the dv decoder: %x", hr);
362 return hr; 362 return hr;
363 } 363 }
364 hr = _graphBuilder->AddFilter(_dvFilter, L"VideoDecoderDV"); 364 hr = _graphBuilder->AddFilter(_dvFilter, L"VideoDecoderDV");
365 if (hr != S_OK) 365 if (hr != S_OK)
366 { 366 {
367 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, 367 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
368 "Failed to add the dv decoder to the graph: %x", hr); 368 "Failed to add the dv decoder to the graph: %x", hr);
369 return hr; 369 return hr;
370 } 370 }
371 _inputDvPin = GetInputPin(_dvFilter); 371 _inputDvPin = GetInputPin(_dvFilter);
372 if (_inputDvPin == NULL) 372 if (_inputDvPin == NULL)
373 { 373 {
374 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, 374 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
375 "Failed to get input pin from DV decoder"); 375 "Failed to get input pin from DV decoder");
376 return -1; 376 return -1;
377 } 377 }
378 _outputDvPin = GetOutputPin(_dvFilter, GUID_NULL); 378 _outputDvPin = GetOutputPin(_dvFilter, GUID_NULL);
379 if (_outputDvPin == NULL) 379 if (_outputDvPin == NULL)
380 { 380 {
381 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, 381 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
382 "Failed to get output pin from DV decoder"); 382 "Failed to get output pin from DV decoder");
383 return -1; 383 return -1;
384 } 384 }
385 } 385 }
386 hr = _graphBuilder->ConnectDirect(_outputCapturePin, _inputDvPin, NULL); 386 hr = _graphBuilder->ConnectDirect(_outputCapturePin, _inputDvPin, NULL);
387 if (hr != S_OK) 387 if (hr != S_OK)
388 { 388 {
389 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, 389 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
390 "Failed to connect capture device to the dv devoder: %x", 390 "Failed to connect capture device to the dv devoder: %x",
391 hr); 391 hr);
392 return hr; 392 return hr;
393 } 393 }
394 394
395 hr = _graphBuilder->ConnectDirect(_outputDvPin, _inputSendPin, NULL); 395 hr = _graphBuilder->ConnectDirect(_outputDvPin, _inputSendPin, NULL);
396 if (hr != S_OK) 396 if (hr != S_OK)
397 { 397 {
398 if (hr == HRESULT_FROM_WIN32(ERROR_TOO_MANY_OPEN_FILES)) 398 if (hr == HRESULT_FROM_WIN32(ERROR_TOO_MANY_OPEN_FILES))
399 { 399 {
400 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, 400 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
401 "Failed to connect the capture device, busy"); 401 "Failed to connect the capture device, busy");
402 } 402 }
403 else 403 else
404 { 404 {
405 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, 405 WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, 0,
406 "Failed to connect capture device to the send graph: 0x %x", 406 "Failed to connect capture device to the send graph: 0x %x",
407 hr); 407 hr);
408 } 408 }
409 return hr; 409 return hr;
410 } 410 }
411 return hr; 411 return hr;
412 } 412 }
413 } // namespace videocapturemodule 413 } // namespace videocapturemodule
414 } // namespace webrtc 414 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698