Здравствуйте.
Есть программа, которая захватывает кадры с области монитора, сжимает их и записывает в avi:
char* frame = getFrame(); // Выполняется быстро
compress(frame); // Выполняется медленно
writeFrame(aviFile, frame);
Проблема в том, что нужно делать это с заданным fps, но обработка кадра занимает существенное время (выполняется на CPU) и fps не соблюдается. Посоветуйте пожалуйста как решить эту проблему?
P.S.:
Например, есть вариант с буферизацией кадров. Сырые кадры сначала пишутся в буфер в оперативной памяти с заданным fps. Обработка кадров и сохранение выполняется в отдельном потоке. Таким образом добиваемся нужной плавности ценой расхода оперативки и CPU. Можете дать пару советов как это лучше реализовать? Или поделиться ссылкой на статью/пример?
Или второй вариант (слабо в него верится) похож на первый: запускать функции
compress и
writeFrame асинхронно с помощью
QtConcurrent::run. Это проще реализовать, но как это будет работать? Не возникнет ли слишком много потоков? Не возникнет ли конфликт при записи в файл?