Without getting into too much detail we've codec modifications to the OpenEXR 
format that (hopefully soon!) will get rolled in to the standard distribution.  
Until then we do need a customized plugin that has small modifications to the 
codec enumerations and is linked against our OpenEXR build.

So it sounds like our near-term solution is to build oiio without embedded 
plugins.

However I do think it would be a worthwhile fix if it's trivial enough to do as 
it would make plugin management more flexible.
If you don't want to change the API you could trap for a token in the search 
path like '<builtins>:/tmp/oiio/plugins' that would determine where to insert 
the embedded paths.

-jonathan

On Jun 17, 2013, at 2:06 PM, Larry Gritz wrote:

> The idea of the plugins was to extend the set of supported file formats at 
> runtime.  An example would be if an application that uses OIIO wanted to 
> support for GIF files (we don't, natively), they could write their own 
> gif.imageio.so (or .dll) to extend support, rather than create a customized 
> libOpenImageIO.  Another example would be if there was a truly proprietary 
> format (internal to one company, or one application), they could easily 
> extend OIIO to support it just by writing that one DLL/DSO without cluttering 
> the public distribution or without revealing to the world the details of 
> their proprietary format.
> 
> (Aside: In truth, although I always thought of the plugin mechanism as an 
> important feature in an image library, it's not clear to me whether anyone at 
> all uses the ability to extend format support at runtime.  I started out with 
> *all* formats supported via DSO/DLL's, even the ones that come with OIIO.  It 
> was user demand that led to format support being embedded in the library 
> rather than DSO's.  People overwhelmingly found the build and distribution 
> simpler with one library rather than a dozen or more plugins.)
> 
> I admit that I never really considered the case of somebody who wanted to 
> *replace* an existing format module, rather than extend the set of file 
> formats.  So it's not surprising that the library always considers the 
> built-in (embedded) implementations first, and only checks the DSO/DLL's if 
> none of the embedded readers are able to open the file.
> 
> If it's important to you, I think we could fix this pretty easily.  I'm not 
> sure I'd want it to be the default, but we could certainly make it an option 
> to check for DSOs first, i.e., reverse the priority.
> 
> Out of curiosity, what does your OpenEXR reader do that the standard one does 
> not?  Is a more productive route to propose an improvement to the built-in 
> exr reader?
> 
>       -- lg
> 
> 
> On Jun 17, 2013, at 12:54 PM, Jonathan Egstad wrote:
> 
>> Sorry if this has been answered before, I can't find a relevant mail.
>> 
>> We've built oiio with embedded plugins and now we're attempting to override 
>> the exr plugin with a customized one.
>> Unfortunately the plugin_searchpath string passed to ImpageInput::create() 
>> does not appear to take precedence during the cataloging of available 
>> plugins which means the embedded openexr plugin appears to always be found 
>> first.
>> 
>> Is this the expected behavior or am I doing something wrong?
>> 
>> The custom exr plugin is handicapped so the plugin's open() method will 
>> produce an assert error, but no assert is occurring so I'm assuming the 
>> embedded openexr plugin is getting called instead.
>> 
>> From my reading of imageioplugin.cpp the catalog_all_plugins() method first 
>> calls catalog_builtin_plugins() before the searchpath string is being parsed 
>> (I haven't yet built oiio with debug prints to see what's going on in there, 
>> but that was going to be my next step.)
>> 
>> 
>> Thanks for any help,
>> 
>> -jonathan
>> 
>> 
>> #include <OpenImageIO/imageio.h>
>> 
>> using namespace OIIO_NAMESPACE;
>> 
>> const char* plugin_searchpath = "/tmp/oiio/plugins";
>> const char* read_path = "/tmp/oiio/plugins/test.exr";
>> 
>> int main(int argc, char* argv[]) {
>>  ImageSpec spec;
>>  ImageInput* reader = ImageInput::create(read_path, plugin_searchpath);
>>  if (!reader) return 1;
>>  if (!reader->open(read_path, spec)) {
>>     std::cerr << "Unable to open file '" << read_path << "'" << std::endl;
>>     return 1;
>>  }
>> 
>>  std::cout << spec.width << "x" << spec.height << std::endl;
>> 
>>  return 0;
>> }
>> 
>> _______________________________________________
>> Oiio-dev mailing list
>> [email protected]
>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
> 
> --
> Larry Gritz
> [email protected]
> 
> 
> _______________________________________________
> Oiio-dev mailing list
> [email protected]
> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org

_______________________________________________
Oiio-dev mailing list
[email protected]
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org

Reply via email to