From: Diego M. <dma...@gm...> - 2009-07-08 17:19:12
|
There seems to be a bug in the destruction of the mpegcodec object stored in the static array created in the function vidl_codec_sptr* vidl_codec::all_codecs() (located in core\vidl\vidl_codec.cxx) The problem manifest itself as a crash when exiting the program. If a video was loaded in the execution of the program, the static five-element array created by vidl_codec_storage is destroyed, which in turns destroy the vidl_mpegcodec object in it. The destructor of vidl_mpegcodec calls buffers_->first_frame_num() (located in core\vidl\vidl_mpegcodec.cxx) and crashes somewhere inside it (note: buffers_ is not a null pointer). It seems to be an issue in some tree structure when looking for an element in it. I don't know why this happens because at this point in the program, the mpegcodec object was already closed in ~vidl_codec_storage(), so it should not have any data in it. I found a workaround by deleting the mpeg codec before exiting the program, but it is an quite ugly solution. Here it is in case someone needs it. int main(...) { .... // The mpegcodec is in position 1 of the array in my case, but this may be different in other systems vidl_codec_sptr* codecs = vidl_codec::all_codecs(); // static five-element array of codecs codecs[1]->close(); // close the problem codec as would have been done if ~vidl_codec_storage() was called *((bool*) &codecs[1]) = false; // unprotect the pointer to the codec object without calling unprotect() return 0; } |