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

Side by Side Diff: media/video/capture/win/video_capture_device_factory_win.cc

Issue 377803004: Fixes for re-enabling more MSVC level 4 warnings: media/ edition (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/video/capture/win/video_capture_device_factory_win.h" 5 #include "media/video/capture/win/video_capture_device_factory_win.h"
6 6
7 #include <mfapi.h> 7 #include <mfapi.h>
8 #include <mferror.h> 8 #include <mferror.h>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 } 160 }
161 161
162 static void GetDeviceNamesMediaFoundation( 162 static void GetDeviceNamesMediaFoundation(
163 VideoCaptureDevice::Names* device_names) { 163 VideoCaptureDevice::Names* device_names) {
164 DVLOG(1) << " GetDeviceNamesMediaFoundation"; 164 DVLOG(1) << " GetDeviceNamesMediaFoundation";
165 ScopedCoMem<IMFActivate*> devices; 165 ScopedCoMem<IMFActivate*> devices;
166 UINT32 count; 166 UINT32 count;
167 if (!EnumerateVideoDevicesMediaFoundation(&devices, &count)) 167 if (!EnumerateVideoDevicesMediaFoundation(&devices, &count))
168 return; 168 return;
169 169
170 HRESULT hr;
171 for (UINT32 i = 0; i < count; ++i) { 170 for (UINT32 i = 0; i < count; ++i) {
172 UINT32 name_size, id_size; 171 ScopedCoMem<wchar_t> name;
173 ScopedCoMem<wchar_t> name, id; 172 UINT32 name_size;
ddorwin 2014/07/08 18:17:50 nit: initialize? ditto for id_size.
Peter Kasting 2014/07/08 18:39:14 I'm happy to do so if you like; there's no need to
174 if (SUCCEEDED(hr = devices[i]->GetAllocatedString( 173 HRESULT hr = devices[i]->GetAllocatedString(
175 MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME, &name, &name_size)) && 174 MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME, &name, &name_size);
176 SUCCEEDED(hr = devices[i]->GetAllocatedString( 175 if (SUCCEEDED(hr)) {
177 MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK, &id, 176 ScopedCoMem<wchar_t> id;
178 &id_size))) { 177 UINT32 id_size;
179 std::wstring name_w(name, name_size), id_w(id, id_size); 178 hr = devices[i]->GetAllocatedString(
180 VideoCaptureDevice::Name device(base::SysWideToUTF8(name_w), 179 MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK, &id,
181 base::SysWideToUTF8(id_w), 180 &id_size);
182 VideoCaptureDevice::Name::MEDIA_FOUNDATION); 181 if (SUCCEEDED(hr)) {
183 device_names->push_back(device); 182 device_names->push_back(VideoCaptureDevice::Name(
184 } else { 183 base::SysWideToUTF8(std::wstring(name, name_size)),
184 base::SysWideToUTF8(std::wstring(id, id_size)),
185 VideoCaptureDevice::Name::MEDIA_FOUNDATION));
186 }
187 }
188 if (FAILED(hr))
185 DLOG(WARNING) << "GetAllocatedString failed: " << std::hex << hr; 189 DLOG(WARNING) << "GetAllocatedString failed: " << std::hex << hr;
186 }
187 devices[i]->Release(); 190 devices[i]->Release();
188 } 191 }
189 } 192 }
190 193
191 static void GetDeviceSupportedFormatsDirectShow( 194 static void GetDeviceSupportedFormatsDirectShow(
192 const VideoCaptureDevice::Name& device, 195 const VideoCaptureDevice::Name& device,
193 VideoCaptureFormats* formats) { 196 VideoCaptureFormats* formats) {
194 DVLOG(1) << "GetDeviceSupportedFormatsDirectShow for " << device.name(); 197 DVLOG(1) << "GetDeviceSupportedFormatsDirectShow for " << device.name();
195 ScopedComPtr<ICreateDevEnum> dev_enum; 198 ScopedComPtr<ICreateDevEnum> dev_enum;
196 HRESULT hr = dev_enum.CreateInstance(CLSID_SystemDeviceEnum, NULL, 199 HRESULT hr = dev_enum.CreateInstance(CLSID_SystemDeviceEnum, NULL,
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 static void GetDeviceSupportedFormatsMediaFoundation( 282 static void GetDeviceSupportedFormatsMediaFoundation(
280 const VideoCaptureDevice::Name& device, 283 const VideoCaptureDevice::Name& device,
281 VideoCaptureFormats* formats) { 284 VideoCaptureFormats* formats) {
282 DVLOG(1) << "GetDeviceSupportedFormatsMediaFoundation for " << device.name(); 285 DVLOG(1) << "GetDeviceSupportedFormatsMediaFoundation for " << device.name();
283 ScopedComPtr<IMFMediaSource> source; 286 ScopedComPtr<IMFMediaSource> source;
284 if (!CreateVideoCaptureDeviceMediaFoundation(device.id().c_str(), 287 if (!CreateVideoCaptureDeviceMediaFoundation(device.id().c_str(),
285 source.Receive())) { 288 source.Receive())) {
286 return; 289 return;
287 } 290 }
288 291
289 HRESULT hr;
290 base::win::ScopedComPtr<IMFSourceReader> reader; 292 base::win::ScopedComPtr<IMFSourceReader> reader;
291 if (FAILED(hr = MFCreateSourceReaderFromMediaSource(source, NULL, 293 HRESULT hr =
292 reader.Receive()))) { 294 MFCreateSourceReaderFromMediaSource(source, NULL, reader.Receive());
295 if (FAILED(hr)) {
293 DLOG(ERROR) << "MFCreateSourceReaderFromMediaSource: " << std::hex << hr; 296 DLOG(ERROR) << "MFCreateSourceReaderFromMediaSource: " << std::hex << hr;
294 return; 297 return;
295 } 298 }
296 299
297 DWORD stream_index = 0; 300 DWORD stream_index = 0;
298 ScopedComPtr<IMFMediaType> type; 301 ScopedComPtr<IMFMediaType> type;
299 while (SUCCEEDED(hr = reader->GetNativeMediaType( 302 for (hr = reader->GetNativeMediaType(kFirstVideoStream, stream_index,
300 MF_SOURCE_READER_FIRST_VIDEO_STREAM, stream_index, type.Receive()))) { 303 type.Receive());
304 SUCCEEDED(hr);
305 hr = reader->GetNativeMediaType(kFirstVideoStream, stream_index,
306 type.Receive())) {
301 UINT32 width, height; 307 UINT32 width, height;
302 hr = MFGetAttributeSize(type, MF_MT_FRAME_SIZE, &width, &height); 308 hr = MFGetAttributeSize(type, MF_MT_FRAME_SIZE, &width, &height);
303 if (FAILED(hr)) { 309 if (FAILED(hr)) {
304 DLOG(ERROR) << "MFGetAttributeSize: " << std::hex << hr; 310 DLOG(ERROR) << "MFGetAttributeSize: " << std::hex << hr;
305 return; 311 return;
306 } 312 }
307 VideoCaptureFormat capture_format; 313 VideoCaptureFormat capture_format;
308 capture_format.frame_size.SetSize(width, height); 314 capture_format.frame_size.SetSize(width, height);
309 315
310 UINT32 numerator, denominator; 316 UINT32 numerator, denominator;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 DCHECK(PlatformSupportsMediaFoundation()); 379 DCHECK(PlatformSupportsMediaFoundation());
374 device.reset(new VideoCaptureDeviceMFWin(device_name)); 380 device.reset(new VideoCaptureDeviceMFWin(device_name));
375 DVLOG(1) << " MediaFoundation Device: " << device_name.name(); 381 DVLOG(1) << " MediaFoundation Device: " << device_name.name();
376 ScopedComPtr<IMFMediaSource> source; 382 ScopedComPtr<IMFMediaSource> source;
377 if (!CreateVideoCaptureDeviceMediaFoundation(device_name.id().c_str(), 383 if (!CreateVideoCaptureDeviceMediaFoundation(device_name.id().c_str(),
378 source.Receive())) { 384 source.Receive())) {
379 return scoped_ptr<VideoCaptureDevice>(); 385 return scoped_ptr<VideoCaptureDevice>();
380 } 386 }
381 if (!static_cast<VideoCaptureDeviceMFWin*>(device.get())->Init(source)) 387 if (!static_cast<VideoCaptureDeviceMFWin*>(device.get())->Init(source))
382 device.reset(); 388 device.reset();
383 } else if (device_name.capture_api_type() == 389 } else {
384 VideoCaptureDevice::Name::DIRECT_SHOW) { 390 DCHECK_EQ(VideoCaptureDevice::Name::DIRECT_SHOW,
ddorwin 2014/07/08 18:17:50 nit: media/ code prefers "var, const" for code exc
Peter Kasting 2014/07/08 18:39:14 Done.
391 device_name.capture_api_type());
385 device.reset(new VideoCaptureDeviceWin(device_name)); 392 device.reset(new VideoCaptureDeviceWin(device_name));
386 DVLOG(1) << " DirectShow Device: " << device_name.name(); 393 DVLOG(1) << " DirectShow Device: " << device_name.name();
387 if (!static_cast<VideoCaptureDeviceWin*>(device.get())->Init()) 394 if (!static_cast<VideoCaptureDeviceWin*>(device.get())->Init())
388 device.reset(); 395 device.reset();
389 } else {
390 NOTREACHED() << " Couldn't recognize VideoCaptureDevice type";
391 } 396 }
392 return device.Pass(); 397 return device.Pass();
393 } 398 }
394 399
395 void VideoCaptureDeviceFactoryWin::GetDeviceNames( 400 void VideoCaptureDeviceFactoryWin::GetDeviceNames(
396 VideoCaptureDevice::Names* device_names) { 401 VideoCaptureDevice::Names* device_names) {
397 DCHECK(thread_checker_.CalledOnValidThread()); 402 DCHECK(thread_checker_.CalledOnValidThread());
398 if (use_media_foundation_) 403 if (use_media_foundation_)
399 GetDeviceNamesMediaFoundation(device_names); 404 GetDeviceNamesMediaFoundation(device_names);
400 else 405 else
401 GetDeviceNamesDirectShow(device_names); 406 GetDeviceNamesDirectShow(device_names);
402 } 407 }
403 408
404 void VideoCaptureDeviceFactoryWin::GetDeviceSupportedFormats( 409 void VideoCaptureDeviceFactoryWin::GetDeviceSupportedFormats(
405 const VideoCaptureDevice::Name& device, 410 const VideoCaptureDevice::Name& device,
406 VideoCaptureFormats* formats) { 411 VideoCaptureFormats* formats) {
407 DCHECK(thread_checker_.CalledOnValidThread()); 412 DCHECK(thread_checker_.CalledOnValidThread());
408 if (use_media_foundation_) 413 if (use_media_foundation_)
409 GetDeviceSupportedFormatsMediaFoundation(device, formats); 414 GetDeviceSupportedFormatsMediaFoundation(device, formats);
410 else 415 else
411 GetDeviceSupportedFormatsDirectShow(device, formats); 416 GetDeviceSupportedFormatsDirectShow(device, formats);
412 } 417 }
413 418
414 } // namespace media 419 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698