将原始数据写入Avi时使用异常(使用C ++)

时间:2012-03-16 09:15:15

标签: c++ video

如前一个问题所述,我通过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,但我不明白。我正以同样的方式踩着左边和右边的缓冲区。

希望得到一些提示,

0 个答案:

没有答案