IMFSourceReader-> ReadSample никогда не возвращается, когда устройство отключено в Windows 10 - PullRequest
0 голосов
/ 01 марта 2019

У меня проблема в windows 10 (не проблема на сервере 2016), где IMFSourceReader-> ReadSample (reader-> ReadSample в приведенном ниже коде) никогда не вернется, если устройство было отключено во время захвата.Это приводит к тому, что ошибки не возникают, когда устройство отключено во время захвата.Все работает нормально, если ни одно устройство не отключено.Я ожидаю, что будет возвращено что-то вроде MF_E_INVALIDREQUEST, но вместо этого оно будет зависать вечно.Любые мысли о том, что может быть проблемой или руководством, будут высоко оценены.

capture::Sample *capture::MfDeviceSampleProvider::GetNextSample(bool video) {
    Sample *sample = NULL;
    IMFSample *mfSample = NULL;
    DWORD streamFlags;
    if (reader) {       
        HRESULT hr = reader->ReadSample(streamIndex, 0, NULL, &streamFlags, NULL, &mfSample);           
        LOG_IF_FAILED(hr, "Unable to read sample from device.");
        if (SUCCEEDED(hr)) {          
            if (streamFlags == 0) {
                if (type == DeviceBase::Type::Video) {
                    sample = new MFVideoSample(prop.type, mfSample, prop.size.width, prop.size.height);
                } else if (type == DeviceBase::Type::Audio) {
                    sample = new MFAudioSample(mfSample);
                }
            } else if (streamFlags & MF_SOURCE_READERF_STREAMTICK) {                          
                return GetNextSample(video);
        }
    } 
    SafeRelease(&mfSample);

    return sample;
}
`
...