diff options
Diffstat (limited to 'media/video')
-rw-r--r-- | media/video/capture/win/video_capture_device_mf_win.cc | 27 | ||||
-rw-r--r-- | media/video/capture/win/video_capture_device_mf_win.h | 7 | ||||
-rw-r--r-- | media/video/capture/win/video_capture_device_win.cc | 12 |
3 files changed, 10 insertions, 36 deletions
diff --git a/media/video/capture/win/video_capture_device_mf_win.cc b/media/video/capture/win/video_capture_device_mf_win.cc index 67fd979..131bc7e 100644 --- a/media/video/capture/win/video_capture_device_mf_win.cc +++ b/media/video/capture/win/video_capture_device_mf_win.cc @@ -12,7 +12,6 @@ #include "base/synchronization/waitable_event.h" #include "base/sys_string_conversions.h" #include "base/win/scoped_co_mem.h" -#include "base/win/windows_version.h" #include "media/video/capture/win/capability_list_win.h" using base::win::ScopedCoMem; @@ -144,23 +143,6 @@ HRESULT FillCapabilities(IMFSourceReader* source, return (hr == MF_E_NO_MORE_TYPES) ? S_OK : hr; } -bool LoadMediaFoundationDlls() { - static const wchar_t* const kMfDLLs[] = { - L"%WINDIR%\\system32\\mf.dll", - L"%WINDIR%\\system32\\mfplat.dll", - L"%WINDIR%\\system32\\mfreadwrite.dll", - }; - - for (int i = 0; i < arraysize(kMfDLLs); ++i) { - wchar_t path[MAX_PATH] = {0}; - ExpandEnvironmentStringsW(kMfDLLs[i], path, arraysize(path)); - if (!LoadLibraryExW(path, NULL, LOAD_WITH_ALTERED_SEARCH_PATH)) - return false; - } - - return true; -} - } // namespace class MFReaderCallback @@ -240,15 +222,6 @@ class MFReaderCallback }; // static -bool VideoCaptureDeviceMFWin::PlatformSupported() { - if (base::win::GetVersion() < base::win::VERSION_VISTA) - return false; - - static bool g_dlls_available = LoadMediaFoundationDlls(); - return g_dlls_available; -} - -// static void VideoCaptureDeviceMFWin::GetDeviceNames(Names* device_names) { ScopedCoMem<IMFActivate*> devices; UINT32 count; diff --git a/media/video/capture/win/video_capture_device_mf_win.h b/media/video/capture/win/video_capture_device_mf_win.h index 773b1ed..6f229b05 100644 --- a/media/video/capture/win/video_capture_device_mf_win.h +++ b/media/video/capture/win/video_capture_device_mf_win.h @@ -46,13 +46,6 @@ class VideoCaptureDeviceMFWin virtual void DeAllocate() OVERRIDE; virtual const Name& device_name() OVERRIDE; - // Returns true iff the current platform supports the Media Foundation API - // and that the DLLs are available. On Vista this API is an optional download - // but the API is advertised as a part of Windows 7 and onwards. However, - // we've seen that the required DLLs are not available in some Win7 - // distributions such as Windows 7 N and Windows 7 KN. - static bool PlatformSupported(); - static void GetDeviceNames(Names* device_names); // Captured a new video frame. diff --git a/media/video/capture/win/video_capture_device_win.cc b/media/video/capture/win/video_capture_device_win.cc index 875ca00..e83b15e6d 100644 --- a/media/video/capture/win/video_capture_device_win.cc +++ b/media/video/capture/win/video_capture_device_win.cc @@ -10,6 +10,7 @@ #include "base/string_util.h" #include "base/sys_string_conversions.h" #include "base/win/scoped_variant.h" +#include "base/win/windows_version.h" #include "media/video/capture/win/video_capture_device_mf_win.h" using base::win::ScopedComPtr; @@ -143,13 +144,20 @@ void DeleteMediaType(AM_MEDIA_TYPE* mt) { } } +bool ShouldUseMediaFoundationAPI() { + // Although Media Foundation is supported on Vista, it requires a special + // update to be available. For now we don't risk it and use DirectShow + // on Vista but MF on Win7 and higher. + return base::win::GetVersion() >= base::win::VERSION_WIN7; +} + } // namespace namespace media { // static void VideoCaptureDevice::GetDeviceNames(Names* device_names) { - if (VideoCaptureDeviceMFWin::PlatformSupported()) { + if (ShouldUseMediaFoundationAPI()) { VideoCaptureDeviceMFWin::GetDeviceNames(device_names); } else { VideoCaptureDeviceWin::GetDeviceNames(device_names); @@ -159,7 +167,7 @@ void VideoCaptureDevice::GetDeviceNames(Names* device_names) { // static VideoCaptureDevice* VideoCaptureDevice::Create(const Name& device_name) { VideoCaptureDevice* ret = NULL; - if (VideoCaptureDeviceMFWin::PlatformSupported()) { + if (ShouldUseMediaFoundationAPI()) { scoped_ptr<VideoCaptureDeviceMFWin> device( new VideoCaptureDeviceMFWin(device_name)); if (device->Init()) |