Высокая загрузка ЦП с различным интервалом ожидания между кадрами, полученными в Desktop Duplication API - PullRequest
1 голос
/ 07 ноября 2019

Я пытаюсь захватить экран с 16 мс тайм-аута, и я получаю 60-65 FPS , когда захват тестируется на полноэкранном видео 4k 60fps. Загрузка ЦП в этом случае составляет примерно 0-1% . Но когда курсор мыши перемещается по экрану, частота кадров и частота процессора увеличиваются до 100 + кадров и 25-30% соответственно. Итак, возникает вопрос: почему я могу получить FPS больше 70, если тайм-аут установлен на 16?

Если тайм-аут на 0: количество FPS захватываются с тем же значением , но загрузка ЦП остается стабильной на 20-30% даже при статическом изображении на экране. Количество ошибок тайм-аутов в этом случае значительно увеличилось. Это как-то связано с предыдущим вопросом?

do
{
    hr = lDeskDupl->AcquireNextFrame(
        TimeoutMS,
        &lFrameInfo,
        &lDesktopResource);

    if (SUCCEEDED(hr)) {
        accumFramesCount += lFrameInfo.AccumulatedFrames;
        break;
    }

    if (hr == DXGI_ERROR_INVALID_CALL) 
    {
        lDeskDupl->ReleaseFrame();
    }

    if (hr == DXGI_ERROR_WAIT_TIMEOUT)
    {
        timeoutsCount++;
    }
} 
while (true);

1 Ответ

0 голосов
/ 07 ноября 2019

Ответ содержится в AcquireNextFrame документации:

AcquireNextFrame получает новый кадр рабочего стола, когда операционная система либо обновляет растровое изображение рабочего стола, либо изменяет форму или положение аппаратного указателя. В новом кадре, который AcquireNextFrame получает , может обновляться только изображение рабочего стола, обновляется только форма или положение указателя, или оба .

При перемещении мыши вы получаетеобновить API Desktop Duplication до истечения времени ожидания. Таким образом, у вас будет больше обновлений, чем предполагает значение тайм-аута.

Что касается аномально высокой загрузки ЦП, весьма вероятно, что это проблема с API: да, движения мыши связаны с чрезмерным потреблением ЦП без видимыхпричина. Возможно, какая-то проблема, связанная с блокировкой вращения.

...