我有一个使用(已弃用)VFW API 来记录屏幕的程序。为了在不保存结果的情况下捕获屏幕,该程序大约需要 600-700 毫秒/100 帧。但是,调用 AVIStreamWrite () 函数会将其增加到 ~2000 毫秒,我怀疑这是因为直接保存到硬盘。所以我想将所有视频数据保存到 RAM 缓冲区而不是文件中,然后再保存到硬盘中。
我也尝试使用 IC 功能,但是我遇到了其他困难。
有没有办法让 AVIStreamWrite() 函数写入缓冲区而不是文件?
一些简化的代码(如果需要,我将添加函数参数并开发代码):
bool record=1;
AVIFileInit();
//Initial stream and bitmap header declaration
AVIFileOpen();
//Declaration of compressed stream and of its parameters
AVIMakeCompressedStream();
AVIStreamSetFormat();
while(record) //main loop
{
//FPS stabilization
//Screen capturing below, takes about 6 ms per frame
BitBlt();
GetDIBits ();
//Frame saving and compressing below, takes about 14 ms per frame
AVIStreamWrite();
//Something that breaks the main loop
}
//clean-up