Their iterators suck...I don't know who came up with the idea that the only way you should be able to access them is if you use it and increment it, but it's retarded.
Today I had to implement a custom file input stream (to, say, read data from a file in a ZIP file instead of the file system) by writing a plugin that did nothing but initialize itself and call functions in the main program, and encoding into the file path the pointer to the structure that holds the function pointers to the implementations of read() and seek(). The designer of VLC should feel very ashamed of himself.