MPEG2VideoEncoderBase::Init() calls CreateFrameBuffer() to initialize/reinitialize internal frame buffers in the following cases only (OR):
It doesn't take into account IPDistance parameter changes. So, the following code:
MPEG2VideoEncoder.Init( IPDistance = 1 );
... do some encoding work A ...
MPEG2VideoEncoder.Init( IPDistance = 3 ); // or Reset, then Init
... do some encoding work B ...
will get access violations or __non_rtti_object exceptions at work B (inside MPEG2VideoEncoderBase::FrameDone, LoadToBuffer), because the real size of frames.buf_B is 0 (instead of supposed size = 2).