HRESULT STDMETHODCALLTYPE OnDefaultDeviceChanged()

in src/cubeb_wasapi.cpp [738:770]


  HRESULT STDMETHODCALLTYPE OnDefaultDeviceChanged(EDataFlow flow, ERole role,
                                                   LPCWSTR device_id)
  {
    LOG("endpoint: Audio device default changed flow=%d role=%d "
        "new_device_id=%ws.",
        flow, role, device_id);

    /* we only support a single stream type for now. */
    if (flow != eRender || role != this->role) {
      return S_OK;
    }

    DWORD last_change_ms = timeGetTime() - last_device_change;
    bool same_device = default_device_id && device_id &&
                       wcscmp(default_device_id.get(), device_id) == 0;
    LOG("endpoint: Audio device default changed last_change=%u same_device=%d",
        last_change_ms, same_device);
    if (last_change_ms > DEVICE_CHANGE_DEBOUNCE_MS || !same_device) {
      if (device_id) {
        default_device_id.reset(_wcsdup(device_id));
      } else {
        default_device_id.reset();
      }
      BOOL ok = SetEvent(reconfigure_event);
      LOG("endpoint: Audio device default changed: trigger reconfig");
      if (!ok) {
        LOG("endpoint: SetEvent on reconfigure_event failed: %lx",
            GetLastError());
      }
    }

    return S_OK;
  }