Finally I found some time to look at some cinelerra bugs. Cinelerra use
quite some own things (which is natural since the cinelerra codebase
predates the C++ standard).

I believe the code complexity could be lowered by replacing some
things with standard or defacto-standard libs rather fixing the problems
in cinelerra's ad-hoc implementations. I give it a try and start using
the C++ stdlib and few sane parts of boost.

I'll just try the next few days to get something fixed and then we'll
see how it turns out. But I would like to hear opinions from the other
developers which parts of cinelerra should be improved this way. I am
fully aware that this can lead to a big intrusive change. But making
cinelerra easier to maintain and more stable is really worth the efforts
imo.

Some short list where I am working on:

Remove the Garbage collector in favor of boost::shared_ptr, the GC has
some nasty bugs, partially together with threads. By replacing ALL
Asset* with boost::shared_ptr<Asset> these should be fixed on expanse of
some performance.

Manage Assets in std::vector<boost::shared_ptr> /
std::list<boost::shared_ptr>.

When this works then refactor some uses of the shared_ptr to using
references instead, this will regain most of the performance loss from
above.

When still not fscked up, then refactor the arrays/lists to hold normal
pointers (or boost::ptr_vector/ptr_list) with clear ownership semantic.

Maybe add some debugging allocator which tracks per-thread ownership of
objects, aiding in finding complicated bugs.

Maybe apply the above steps to other classes (File, EDL, etc...).

Maybe add some pooled allocator which could improve performance even more.

        Christian

_______________________________________________
Cinelerra mailing list
Cinelerra@skolelinux.no
https://init.linpro.no/mailman/skolelinux.no/listinfo/cinelerra

Reply via email to