Официальный сайт студ.городка НГТУ
Программирование и БД » Запись кадра в поток 

#1  08.08.12 10:56

Запись кадра в поток

Задача: записывать видео с экрана. Проблема: если производительность программы неожиданно падает, необходимо в поток писать несколько копий одного кадра.
Я делаю так:
AVIStreamWrite(stream, frameNumber, numFramesToSave, reinterpret_cast <void*> (memoryCopy), info.sizeImage, 0, NULL, NULL);
где:
frameNumber - номер кадра для записи.
numFramesToSave - сколько кадров хочу записать
memoryCopy - здесь лежат numFramesToSave копий памяти, записываемого кадра.
например, у меня 25 ФПС. на самом начале второй секунда случилась просадка в 5 кадров.
frameNumber = 25 (нумерация с нуля)
numFramesToSave - 5
memoryCopy - 5 копий памяти.

AVIStreamWrite выдает ошибку записи с кодом 0x80044065.
как обойти ситуацию?

можно конечно 5 раз вызывать функцию AVIStreamWrite подряд, но тут получается катастрофическое падение производительности, меня это не устраивает.

Offline

#2  09.08.12 09:24

Re: Запись кадра в поток

Проблема решена очередь из фреймов.

Offline

#3  24.12.12 16:55

Re: Запись кадра в поток

Здравствуйте Flinn.
Столкнулся с такой же проблемой.
Не могли бы вы пожалуйста описать, как вы обошли эту проблему.
"Проблема решена очередь из фреймов." - То есть:
1. Вы записываете слепки экрана в какой-то буфер с потока №1.
- Затем в потоке №2 последовательно, по одному кадру скидываете в файл. (1 кадр - 1 вызов AVIStreamWrite()
2. Вы записываете слепки экранов в какой-то буфер с потока №1.
- Затем в потоке №2 записываете накопившиеся 'n' кадров за 1 вызов AVIStreamWrite() ?

P.S. -> Не могли бы вы пожалуйста разъяснить.
- Заранее благодарю.

Offline

Программирование и БД » Запись кадра в поток 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.146 сек.
Выполнено 14 запросов.