Я разрабатываю утилиту для создания скринкастов на C ++.
Он в основном захватывает кадры рабочего стола и создает файл AVI. Алгоритм выглядит следующим образом:
- Создать тему:
this->m_hThread=CreateThread(NULL,0,thScreenCapture,this,0,NULL);
Захват рабочего стола за thScreenCapture
n раз в секунду (например, 5 кадров в секунду).
obj->Capture();
В Capture () добавьте данные растрового изображения в файл avi.
this->appendBitmapToAvi(this->avifile, bmp);
Эта утилита также записывает звук. Итак, в методе thScreenCapture звуковые данные также добавляются в avi-файл.
Проблема заключается в том, что между кадрами и звуком возникает задержка, когда в секунду записывается более 6 кадров (это может изменяться в зависимости от конфигурации оборудования).
Я ищу решение для оптимизации алгоритма. Решением может быть буферизация кадров в памяти, а не добавление их всех в файл avi на лету. Но это делает код более сложным, потому что мне приходится иметь дело со звуковыми данными, которые записываются в другом потоке.
Что вы предлагаете для увеличения значения fps, которое поддерживает эта утилита, без потери синхронизации?