jjmpeg callbacks
Well I went and sorted out the AVIOContext callback code rather than posting the previous post so there is more of a gap than the date would imply ...
It turns out my idea to pass a reference to this
to
open2()
was a bit dumb! Because of
course open2()
is the routine which creates the
pointer that this
refers to in the first place.
Wrong!
Anyway the weak references were on the right track, and once I got it working further testing showed that I had to use a weak reference for the custom i/o handlers as well. In many cases it would still have worked but if you created a non-static anonymous class inside a method which stored the AVIOContext as a member variable then it would leak all three objects. A non-static anonymous inner class keeps a reference to this, which keeps a reference to the AVIOContext which keeps a reference to the non-static anonymous inner class.
So anyway the C now just uses weak references and the Java has a holder for the AVIOInterrupt or AVIOHandler object with which it is associated and some exploratory testing seems to confirm it works as expected.
I reverted the nativez changes too, the reference holder wasn't a completely terrible idea but it was duplicating existing JVM functionality unnecessarily.