我用VFW函数把采集卡的图像写入AVI文件,在采集完一帧的回调函数中使用AVIStreamWrite,但是采集的帧大小(就是高和宽)可能会经常发生变化,而建立流的时候就指定了图像大小
 With aviSI  
        .fccType = mmioStringToFOURCC("vids", 0&)     '// stream type video  
        .fccHandler = 0&                             '// default AVI handler  
        .dwScale = 1  
        .dwRate = 25                                 '// fps(1-30)  
        .dwSuggestedBufferSize = bInfo.bmiHeader.biSizeImage       '// size of one frame pixels  
        Call SetRect(.rcFrame, 0, 0, bInfo.bmiHeader.biWidth, bInfo.bmiHeader.biHeight)             '// rectangle for stream  
    End With  
'   create the stream  
    r = AVIFileCreateStream(pFile, ps, aviSI)  
    If (r  <> AVIERR_OK) Then GoTo OVER 
    pOpts = VarPtr(opts) 
    r = AVISaveOptions(0, _ 
                        ICMF_CHOOSE_KEYFRAME Or ICMF_CHOOSE_DATARATE, _ 
                        1, _ 
                        ps, _ 
                        pOpts) 'returns TRUE if User presses OK, FALSE if Cancel, or error code     If r  <> 1 Then 'In C TRUE = 1 
        Call AVISaveOptionsFree(1, pOpts) 
        GoTo OVER 
    End If 
     
    'make compressed stream 
    r = AVIMakeCompressedStream(psCompressed, ps, opts, 0&) 
    If r  <> AVIERR_OK Then GoTo OVER     Dim tmpBIH As BITMAPINFOHEADER 
    tmpBIH = BInfo.bmiHeader 
    r = AVIStreamSetFormat(psCompressed, 0, ByVal VarPtr(tmpBIH), Len(tmpBIH)) 
    If (r  <> AVIERR_OK) Then 
      msg = "设置数据流格式失败" 
      GoTo OVER 
    End If 怎样在回调函数中进行处理呢,不会每次在回调函数中销毁流再重建吧?  
由于图像大小变化了,会引起指针越界的非法操作  回调函数写法: 
Public Function addFrame(ByVal pBuf As Long, ByVal pInfo As Long) As Long 
    Dim info As MV_IMAGEINFO 
    Call CopyMemory(ByVal VarPtr(info), ByVal pInfo, Len(info)) '拷贝MV_IMAGEINFO结构体     'Write a frame 
      r = AVIStreamWrite(psCompressed, _ 
                          FrameIdx, _ 
                          1, _ 
                          ByVal pBuf, _ 
                          info.Length, _ 
                          AVIIF_KEYFRAME, _ 
                          ByVal 0&, _ 
                          ByVal 0&) 
       FrameIdx = FrameIdx + 1 
End Function =====================================
我觉得这种传统的写法结构不好,建立流的时候把大小限定死了。 
请问视频采集方面还有什么好的方法没有?