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: media/capture/video/win/video_capture_device_mf_win.cc

Issue 2673373003: getUserMeida: report device starting states (Closed)
Patch Set: address comments on PS#4 and revise unittests Created 3 years, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/capture/video/win/video_capture_device_mf_win.h" 5 #include "media/capture/video/win/video_capture_device_mf_win.h"
6 6
7 #include <mfapi.h> 7 #include <mfapi.h>
8 #include <mferror.h> 8 #include <mferror.h>
9 #include <stddef.h> 9 #include <stddef.h>
10 10
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 ScopedComPtr<IMFMediaType> type; 232 ScopedComPtr<IMFMediaType> type;
233 hr = reader_->GetNativeMediaType( 233 hr = reader_->GetNativeMediaType(
234 kFirstVideoStream, found_capability.stream_index, type.Receive()); 234 kFirstVideoStream, found_capability.stream_index, type.Receive());
235 if (SUCCEEDED(hr)) { 235 if (SUCCEEDED(hr)) {
236 hr = reader_->SetCurrentMediaType(kFirstVideoStream, NULL, type.get()); 236 hr = reader_->SetCurrentMediaType(kFirstVideoStream, NULL, type.get());
237 if (SUCCEEDED(hr)) { 237 if (SUCCEEDED(hr)) {
238 hr = 238 hr =
239 reader_->ReadSample(kFirstVideoStream, 0, NULL, NULL, NULL, NULL); 239 reader_->ReadSample(kFirstVideoStream, 0, NULL, NULL, NULL, NULL);
240 if (SUCCEEDED(hr)) { 240 if (SUCCEEDED(hr)) {
241 capture_format_ = found_capability.supported_format; 241 capture_format_ = found_capability.supported_format;
242 client_->OnStarted();
242 capture_ = true; 243 capture_ = true;
243 return; 244 return;
244 } 245 }
245 } 246 }
246 } 247 }
247 } 248 }
248 } 249 }
249 250
250 OnError(FROM_HERE, hr); 251 OnError(FROM_HERE, hr);
251 } 252 }
(...skipping 27 matching lines...) Expand all
279 flushed.TimedWait(base::TimeDelta::FromMilliseconds(kFlushTimeOutInMs)); 280 flushed.TimedWait(base::TimeDelta::FromMilliseconds(kFlushTimeOutInMs));
280 } 281 }
281 282
282 void VideoCaptureDeviceMFWin::OnIncomingCapturedData( 283 void VideoCaptureDeviceMFWin::OnIncomingCapturedData(
283 const uint8_t* data, 284 const uint8_t* data,
284 int length, 285 int length,
285 int rotation, 286 int rotation,
286 base::TimeTicks reference_time, 287 base::TimeTicks reference_time,
287 base::TimeDelta timestamp) { 288 base::TimeDelta timestamp) {
288 base::AutoLock lock(lock_); 289 base::AutoLock lock(lock_);
290 if (!capture_)
291 return;
292
289 if (data && client_.get()) { 293 if (data && client_.get()) {
290 client_->OnIncomingCapturedData(data, length, capture_format_, rotation, 294 client_->OnIncomingCapturedData(data, length, capture_format_, rotation,
291 reference_time, timestamp); 295 reference_time, timestamp);
292 } 296 }
293 297
294 if (capture_) { 298 HRESULT hr =
295 HRESULT hr = 299 reader_->ReadSample(kFirstVideoStream, 0, NULL, NULL, NULL, NULL);
296 reader_->ReadSample(kFirstVideoStream, 0, NULL, NULL, NULL, NULL); 300 if (FAILED(hr)) {
297 if (FAILED(hr)) { 301 // If running the *VideoCap* unit tests on repeat, this can sometimes
298 // If running the *VideoCap* unit tests on repeat, this can sometimes 302 // fail with HRESULT_FROM_WINHRESULT_FROM_WIN32(ERROR_INVALID_FUNCTION).
299 // fail with HRESULT_FROM_WINHRESULT_FROM_WIN32(ERROR_INVALID_FUNCTION). 303 // It's not clear to me why this is, but it is possible that it has
300 // It's not clear to me why this is, but it is possible that it has 304 // something to do with this bug:
301 // something to do with this bug: 305 // http://support.microsoft.com/kb/979567
302 // http://support.microsoft.com/kb/979567 306 OnError(FROM_HERE, hr);
303 OnError(FROM_HERE, hr);
304 }
305 } 307 }
306 } 308 }
307 309
308 void VideoCaptureDeviceMFWin::OnError( 310 void VideoCaptureDeviceMFWin::OnError(
309 const tracked_objects::Location& from_here, 311 const tracked_objects::Location& from_here,
310 HRESULT hr) { 312 HRESULT hr) {
311 if (client_.get()) { 313 if (client_.get()) {
312 client_->OnError( 314 client_->OnError(
313 from_here, 315 from_here,
314 base::StringPrintf("VideoCaptureDeviceMFWin: %s", 316 base::StringPrintf("VideoCaptureDeviceMFWin: %s",
315 logging::SystemErrorCodeToString(hr).c_str())); 317 logging::SystemErrorCodeToString(hr).c_str()));
316 } 318 }
317 } 319 }
318 320
319 } // namespace media 321 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698