如前一个问题所述,我通过Blackmagic Decklink Card同时捕获两个HD-Streams。为了保存流,我正在使用VfW,如果文件大小超过2GB,我正在写一个新文件。现在我陷入了我的代码的某一行。这是:
if(WaitForSingleObject( mutex, INFINITE ) == WAIT_OBJECT_0 )
{
if(Bufferl.size()>0&&Bufferr.size()>0)
{
framel =(char*)malloc(size*sizeof(char));
framel = Bufferl.front();
framer =(char*)malloc(size*sizeof(char));
framer = Bufferr.front();
//Delete first entry of Bufferl & Bufferr
Bufferl.erase(Bufferl.begin());
Bufferr.erase(Bufferr.begin());
long size_frame=size;
//Release Mutex
ReleaseMutex(mutex);
//Write Streams
hr = AVIStreamWrite(avi_left_s,frameCount_local,1,(BYTE*)framel,size_frame,0,NULL,NULL);
if(hr!=0)
{
printf("\nError writing left Stream!\n");
Sleep(3000);
}
hr = AVIStreamWrite(avi_right_s,frameCount_local,1,(BYTE*)framer,size_frame,0,NULL,NULL);
if(hr!=0)
{
printf("\nError writing right Stream!\n");
Sleep(3000);
}
byteswritten=byteswritten+size_frame;
此部分与捕获并行运行。 Bufferl和Bufferr包含样本数据作为向量。如果缓冲区不为空,我将现有的帧(framel& framer,两个char *)写入avi文件。问题现在出现在这一行:
hr = AVIStreamWrite(avi_right_s,frameCount_local,1,(BYTE*)framer,size_frame,0,NULL,NULL);
有时例外:Zugriffsverletzung beim Lesen位置0x249d0020。被扔了。如果我设置一个断点并逐步运行代码就行了。请注意左框架的写入工作正常,右边没有写入。所以问题必须是正确框架的缓冲区:Bufferr,但我不明白。我正以同样的方式踩着左边和右边的缓冲区。
希望得到一些提示,