Есть ли возможность получить информацию о том, что камера была удалена во время предварительного просмотра в IMFCaptureEngine?
Я использую код из этого примера Образец захвата видео CaptureEngine . Существует EventCallback, связанный с экземпляром MFCaptureEngine:
hr = m_pEngine->Initialize(m_pCallback, pAttributes, NULL, pUnk);
Но после удаления веб-камеры в функции обратного вызова не поступает никаких событий.
Я попытался добавить дополнительную функцию обратного вызова для IMFMediaSource движка, которая должна, как я ожидал, генерировать событие MEVideoCaptureDeviceRemoved. Посмотрите на код, вызываемый после инициализации экземпляра MFCaptureEngine:
m_pEngine->GetSource(&pCapSource);
pCapSource->GetCaptureDeviceSource(MF_CAPTURE_ENGINE_DEVICE_TYPE_VIDEO, &pMediaSource);
pMediaSource.QueryInterface(&m_pSourceEventGenerator);
hr = m_pSourceEventGenerator->BeginGetEvent(OnSourceCB, NULL);
Значение hr - MF_E_MULTIPLE_SUBSCRIBERS, что дает мне смысл, потому что есть смешанные два объекта обратного вызова (первый для MFCaptureEngine в целом, второй только для IMediaSource).
Почему я не получаю никакой информации об удаленном устройстве? Как я могу получить эту информацию?
PS. Я знаю сообщение WM_DEVICECHANGE, но я хотел бы избежать этого, если это возможно, чтобы получить событие от медиа-фонда.