So, as I said last night I was working once again on getting hidden visibility support in FFmpeg. I worked on this all the night and the morning till 9am, and gone to sleep at about 11 am.
The result of my night of hacking around is a huge patch (117 KiB), that exports as protected all the symbols of the public API, minus the ones it needs to take the address of (that needs to have default visibility), and hides all the rest. The result is quite good: the bindings for libav* libraries on a “false start” of picoxine (asking it to read a non-existant file) were reduced from 654 to 183 (they were 174 with a previous patch, but I was then asked to avoid duplicating some tables, so there are 9 more bindings, but they are protected bindings, which means they won’t take too much time (they’ll be resolved inside the library itself, not outside).
With this change, also the output of callgrind shows a sensible (even if very small) reduction in the time spent looking up symbols. It’s a step forward, even if too small to be satisfactory.
Unfortunately there are two main obstacles to being able to reduce drastically that time: the first is that is unlikely that my patches will be accepted by FFmpeg developers, as they are a bit invasive when you actually add the visibility, and there seems to be a few developers who disagree on -fvisibility= sanity (I can understand, on GCC < 4.1 it was badly broken, and even on 4.1 there are a few cases where you can add a text relocation by messing up with #pragma directives); the second is that I cannot start reworking the plugins loading in xine on the CVS HEAD (as 1.1.3 might not be that far away) and branching/merging with CVS is a pain (not saying that Subversion is all that well when merging; it might be simpler to branch, but merging is still a pain), so that will depend on the move to GIT I’m trying to push for, unfortunately seems we’re hard to reach a consensus on whether to move the repository and to what… the only choice I do not like at all is Bazaar-NG over launchpad, and using their bug tracking systems: it might be as advanced as they want, as featured as they want, I do not intend to rely on proprietary Canonical software!