| Index: media/audio/win/audio_manager_win.cc
|
| diff --git a/media/audio/win/audio_manager_win.cc b/media/audio/win/audio_manager_win.cc
|
| index 84dba63249c8d3c5cbb5fb1c11e488394cb7b783..4a361727d281d468029cf7a747b55bd44c1c3bbf 100644
|
| --- a/media/audio/win/audio_manager_win.cc
|
| +++ b/media/audio/win/audio_manager_win.cc
|
| @@ -47,42 +47,46 @@ const int kWinMaxInputChannels = 2;
|
| // play.
|
| const int kNumInputBuffers = 3;
|
|
|
| +int GetVersionPartAsInt(DWORDLONG num) {
|
| + return static_cast<int>(num & 0xffff);
|
| +}
|
| +
|
| // Returns a string containing the given device's description and installed
|
| // driver version.
|
| string16 GetDeviceAndDriverInfo(HDEVINFO device_info,
|
| SP_DEVINFO_DATA* device_data) {
|
| - // Save the old install params setting and set a flag for the
|
| - // SetupDiBuildDriverInfoList below to return only the installed drivers.
|
| - SP_DEVINSTALL_PARAMS old_device_install_params;
|
| - old_device_install_params.cbSize = sizeof(old_device_install_params);
|
| - SetupDiGetDeviceInstallParams(device_info, device_data,
|
| - &old_device_install_params);
|
| - SP_DEVINSTALL_PARAMS device_install_params = old_device_install_params;
|
| - device_install_params.FlagsEx |= DI_FLAGSEX_INSTALLEDDRIVER;
|
| - SetupDiSetDeviceInstallParams(device_info, device_data,
|
| - &device_install_params);
|
| -
|
| - SP_DRVINFO_DATA driver_data;
|
| - driver_data.cbSize = sizeof(driver_data);
|
| - string16 device_and_driver_info;
|
| - if (SetupDiBuildDriverInfoList(device_info, device_data,
|
| - SPDIT_COMPATDRIVER)) {
|
| - if (SetupDiEnumDriverInfo(device_info, device_data, SPDIT_COMPATDRIVER, 0,
|
| - &driver_data)) {
|
| - DWORDLONG version = driver_data.DriverVersion;
|
| - device_and_driver_info = string16(driver_data.Description) + L" v" +
|
| - base::IntToString16((version >> 48) & 0xffff) + L"." +
|
| - base::IntToString16((version >> 32) & 0xffff) + L"." +
|
| - base::IntToString16((version >> 16) & 0xffff) + L"." +
|
| - base::IntToString16(version & 0xffff);
|
| - }
|
| - SetupDiDestroyDriverInfoList(device_info, device_data, SPDIT_COMPATDRIVER);
|
| - }
|
| -
|
| - SetupDiSetDeviceInstallParams(device_info, device_data,
|
| - &old_device_install_params);
|
| -
|
| - return device_and_driver_info;
|
| + // Save the old install params setting and set a flag for the
|
| + // SetupDiBuildDriverInfoList below to return only the installed drivers.
|
| + SP_DEVINSTALL_PARAMS old_device_install_params;
|
| + old_device_install_params.cbSize = sizeof(old_device_install_params);
|
| + SetupDiGetDeviceInstallParams(device_info, device_data,
|
| + &old_device_install_params);
|
| + SP_DEVINSTALL_PARAMS device_install_params = old_device_install_params;
|
| + device_install_params.FlagsEx |= DI_FLAGSEX_INSTALLEDDRIVER;
|
| + SetupDiSetDeviceInstallParams(device_info, device_data,
|
| + &device_install_params);
|
| +
|
| + SP_DRVINFO_DATA driver_data;
|
| + driver_data.cbSize = sizeof(driver_data);
|
| + string16 device_and_driver_info;
|
| + if (SetupDiBuildDriverInfoList(device_info, device_data,
|
| + SPDIT_COMPATDRIVER)) {
|
| + if (SetupDiEnumDriverInfo(device_info, device_data, SPDIT_COMPATDRIVER, 0,
|
| + &driver_data)) {
|
| + DWORDLONG version = driver_data.DriverVersion;
|
| + device_and_driver_info = string16(driver_data.Description) + L" v" +
|
| + base::IntToString16(GetVersionPartAsInt((version >> 48))) + L"." +
|
| + base::IntToString16(GetVersionPartAsInt((version >> 32))) + L"." +
|
| + base::IntToString16(GetVersionPartAsInt((version >> 16))) + L"." +
|
| + base::IntToString16(GetVersionPartAsInt(version));
|
| + }
|
| + SetupDiDestroyDriverInfoList(device_info, device_data, SPDIT_COMPATDRIVER);
|
| + }
|
| +
|
| + SetupDiSetDeviceInstallParams(device_info, device_data,
|
| + &old_device_install_params);
|
| +
|
| + return device_and_driver_info;
|
| }
|
|
|
| } // namespace
|
| @@ -151,61 +155,61 @@ AudioManagerWin::~AudioManagerWin() {
|
|
|
| string16 AudioManagerWin::GetAudioInputDeviceModel() {
|
| // Get the default audio capture device and its device interface name.
|
| - DWORD device_id = 0;
|
| - waveInMessage(reinterpret_cast<HWAVEIN>(WAVE_MAPPER),
|
| - DRVM_MAPPER_PREFERRED_GET,
|
| - reinterpret_cast<DWORD_PTR>(&device_id), NULL);
|
| - ULONG device_interface_name_size = 0;
|
| - waveInMessage(reinterpret_cast<HWAVEIN>(device_id),
|
| - DRV_QUERYDEVICEINTERFACESIZE,
|
| - reinterpret_cast<DWORD_PTR>(&device_interface_name_size), 0);
|
| - string16 device_interface_name;
|
| - string16::value_type* name_ptr = WriteInto(&device_interface_name,
|
| - device_interface_name_size / sizeof(string16::value_type));
|
| - waveInMessage(reinterpret_cast<HWAVEIN>(device_id),
|
| - DRV_QUERYDEVICEINTERFACE,
|
| - reinterpret_cast<DWORD_PTR>(name_ptr),
|
| - static_cast<DWORD_PTR>(device_interface_name_size));
|
| -
|
| - // Enumerate all audio devices and find the one matching the above device
|
| - // interface name.
|
| - HDEVINFO device_info = SetupDiGetClassDevs(
|
| - &AM_KSCATEGORY_AUDIO, 0, 0, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);
|
| - if (device_info == INVALID_HANDLE_VALUE)
|
| - return string16();
|
| -
|
| - DWORD interface_index = 0;
|
| - SP_DEVICE_INTERFACE_DATA interface_data;
|
| - interface_data.cbSize = sizeof(interface_data);
|
| - while (SetupDiEnumDeviceInterfaces(device_info, 0, &AM_KSCATEGORY_AUDIO,
|
| - interface_index++, &interface_data)) {
|
| - // Query the size of the struct, allocate it and then query the data.
|
| - SP_DEVINFO_DATA device_data;
|
| - device_data.cbSize = sizeof(device_data);
|
| - DWORD interface_detail_size = 0;
|
| - SetupDiGetDeviceInterfaceDetail(device_info, &interface_data, 0, 0,
|
| - &interface_detail_size, &device_data);
|
| - if (!interface_detail_size)
|
| - continue;
|
| -
|
| - scoped_array<char> interface_detail_buffer(new char[interface_detail_size]);
|
| - SP_DEVICE_INTERFACE_DETAIL_DATA* interface_detail =
|
| - reinterpret_cast<SP_DEVICE_INTERFACE_DETAIL_DATA*>(
|
| - interface_detail_buffer.get());
|
| - interface_detail->cbSize = interface_detail_size;
|
| - if (!SetupDiGetDeviceInterfaceDetail(device_info, &interface_data,
|
| - interface_detail,
|
| - interface_detail_size, NULL,
|
| - &device_data))
|
| - return string16();
|
| -
|
| - bool device_found = (device_interface_name == interface_detail->DevicePath);
|
| -
|
| - if (device_found)
|
| - return GetDeviceAndDriverInfo(device_info, &device_data);
|
| - }
|
| -
|
| - return string16();
|
| + DWORD device_id = 0;
|
| + waveInMessage(reinterpret_cast<HWAVEIN>(WAVE_MAPPER),
|
| + DRVM_MAPPER_PREFERRED_GET,
|
| + reinterpret_cast<DWORD_PTR>(&device_id), NULL);
|
| + ULONG device_interface_name_size = 0;
|
| + waveInMessage(reinterpret_cast<HWAVEIN>(device_id),
|
| + DRV_QUERYDEVICEINTERFACESIZE,
|
| + reinterpret_cast<DWORD_PTR>(&device_interface_name_size), 0);
|
| + string16 device_interface_name;
|
| + string16::value_type* name_ptr = WriteInto(&device_interface_name,
|
| + device_interface_name_size / sizeof(string16::value_type));
|
| + waveInMessage(reinterpret_cast<HWAVEIN>(device_id),
|
| + DRV_QUERYDEVICEINTERFACE,
|
| + reinterpret_cast<DWORD_PTR>(name_ptr),
|
| + static_cast<DWORD_PTR>(device_interface_name_size));
|
| +
|
| + // Enumerate all audio devices and find the one matching the above device
|
| + // interface name.
|
| + HDEVINFO device_info = SetupDiGetClassDevs(
|
| + &AM_KSCATEGORY_AUDIO, 0, 0, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);
|
| + if (device_info == INVALID_HANDLE_VALUE)
|
| + return string16();
|
| +
|
| + DWORD interface_index = 0;
|
| + SP_DEVICE_INTERFACE_DATA interface_data;
|
| + interface_data.cbSize = sizeof(interface_data);
|
| + while (SetupDiEnumDeviceInterfaces(device_info, 0, &AM_KSCATEGORY_AUDIO,
|
| + interface_index++, &interface_data)) {
|
| + // Query the size of the struct, allocate it and then query the data.
|
| + SP_DEVINFO_DATA device_data;
|
| + device_data.cbSize = sizeof(device_data);
|
| + DWORD interface_detail_size = 0;
|
| + SetupDiGetDeviceInterfaceDetail(device_info, &interface_data, 0, 0,
|
| + &interface_detail_size, &device_data);
|
| + if (!interface_detail_size)
|
| + continue;
|
| +
|
| + scoped_array<char> interface_detail_buffer(new char[interface_detail_size]);
|
| + SP_DEVICE_INTERFACE_DETAIL_DATA* interface_detail =
|
| + reinterpret_cast<SP_DEVICE_INTERFACE_DETAIL_DATA*>(
|
| + interface_detail_buffer.get());
|
| + interface_detail->cbSize = interface_detail_size;
|
| + if (!SetupDiGetDeviceInterfaceDetail(device_info, &interface_data,
|
| + interface_detail,
|
| + interface_detail_size, NULL,
|
| + &device_data))
|
| + return string16();
|
| +
|
| + bool device_found = (device_interface_name == interface_detail->DevicePath);
|
| +
|
| + if (device_found)
|
| + return GetDeviceAndDriverInfo(device_info, &device_data);
|
| + }
|
| +
|
| + return string16();
|
| }
|
|
|
| // static
|
|
|