On 3 Oct 2011, at 17:23, Larry Gritz wrote:

> By "invalid 32 bit float DPX", do you mean that the DPX standard doesn't 
> support 32 bit float, but the writer appeared to be trying to write that 
> anyway?  If so, that's certainly a bug!  (It would also be a bug, albeit a 
> different one, if DPX standard supports fp32 but our writer botched it 
> somehow.)

I would need to re-check the spec, but Nuke, for example, only supports 8, 10, 
12 and 16-bit DPXs.

Taking a further look into dpxoutput.cpp, there is a bit where it checks 
oiio:BitsPerSample, but it never seems to do the right check with m_spec.format.

> As you saw in the bugs you submitted for ICO and Targa, the plugins are 
> *supposed* to gracefully handle unsupported formats by simply forcing a valid 
> data format.  It's up to the format plugin to decide what the policy is for 
> choosing what to do for unsupported formats -- they could simply have a 
> default format that they use in those cases (perhaps the most common one or 
> the one most likely to be supported by an unknown reader), or try to pick the 
> "closest" supported format, perhaps one that will lose the least amount of 
> precision when converted to.

I think that that makes perfect sense... As you said, most of the writers do 
support this already. I'm sure that there were one or two others that I 
couldn't find anything in already, so there may be other issues out there, but 
DPX is the one I came across issues with.

> In other words, the advertised behavior of open() is that the app shouldn't 
> really need to know which data formats are supported by a plugin, and writer 
> should choose an appropriate one if the app's request cannot be satisfied.
> 
> If this worked properly for DPX, the DPX writer itself would be performing 
> pretty close to the logic you describe below, and there is no need for 
> oiiotool to go through the exercise of doing all those queries.
> 
> So first things first: Let's fix DPX to notice requests for unsupported 
> formats and do a reasonable substitution.
> 
> Next, let's take a look again at oiiotool -- if the DPX (and potentially 
> others) were fixed, would you still want to change oiiotool, and/or still 
> want the additional API calls?

I think probably not - doing it all in the individual open() calls would pretty 
much negate, in my mind, the need for either of the new functions. (It was a 
good way to get my head around certain parts of OIIO, though, so not wasted 
time on my part...)

> Assuming we do want those API calls (I'm not taking that as a given quite 
> yet), I think we can make a less radical API change than you propose.  I 
> don't see why we need supports_data_format.  Can't we just use the existing 
> supports(), and have it recognize the text names of the formats ("uint8", 
> "half", etc.) and respond correctly?  It's less clear how we can cram 
> get_default_data_format() into existing API calls, but -- if it's needed at 
> all -- I'm more inclined to add a generic introspection method, for which 
> "defaultformat" would be one possible query, similar to how supports() works 
> as well as how ImageCache and TextureSystem have getattribute() rather than 
> separate get routines for every attribute.  The advantage to the generic 
> approach (with queries as strings, rather than separate method calls) is that 
> we can expand the set of messages in the future without breaking API 
> compatibility.
> 
> Let's hash a few of these issues out on the mail list first, then as we reach 
> some consensus we can move back to the pull request and take a look at your 
> code.

Sure - sounds good. I'm happy to take all of this a different direction - as 
the DPX writer needs fixing, I can take a look into that (as it's the one that 
we had the issue with ourselves...)


Cheers


Hugh Macdonald
nvizible – VISUAL EFFECTS

[email protected]
+44(0) 20 3167 3860
+44(0) 7773 764 708

www.nvizible.com



> 
> On Oct 3, 2011, at 8:15 AM, Hugh Macdonald wrote:
> 
>> The other thing that was bugging me last week was the way that, if oiiotool 
>> was given an EXR and told to write out a DPX, it would write out an invalid 
>> 32-bit float DPX.
>> 
>> As such, I've added support for each of the ImageOutput classes to be able 
>> to specify which data formats they support, plus what they would consider 
>> their default image format.
>> 
>> This is all in the pull request linked to Issue #180
>> 
>> There are two new functions in each ImageOutput class:
>> 
>> * bool supports_data_format(string format)
>> * string get_default_data_format()
>> 
>> In these, I am dealing with the data format as a string rather than a 
>> TypeDesc enum. This is because of data formats like uint10 and uint12, which 
>> are actually classified as TypeDesc::UINT16, but with an attribute of 
>> oiio:BitsPerSample set.
>> 
>> Currently, oiiotool is the only thing that actually deals with these new 
>> function.
>> 
>> It uses the following logic:
>> 
>> * If -d <format> is an argument, check if this data format is supported. If 
>> not, print an error and exit
>> * Check if the input data format is supported by the image output class.
>> --> If it is supported, keep the same data type
>> --> If it is not supported, ask the image output class for its default data 
>> format, and use that
>> 
>> 
>> This allows for things like:
>> 
>> $ oiiotool foo.exr -o bar.dpx
>> 
>> Which will actually write 10-bit DPX files, rather than the 32-bit float 
>> DPXs.
>> 
>> 
>> I've done my best to ensure that each ImageOutput subclass actually defines 
>> the correct data formats (doing this was where I came across the typos in 
>> icooutput.cpp and tgaoutput.cpp), but please do double check this for me. 
>> Also, I wasn't sure what would be considered the default data type for some 
>> formats. I guessed for a few. Please do confirm this.
>> 
>> Thanks
>> 
>> Hugh Macdonald
>> nvizible – VISUAL EFFECTS
>> 
>> [email protected]
>> +44(0) 20 3167 3860
>> +44(0) 7773 764 708
>> 
>> www.nvizible.com
>> 
>> _______________________________________________
>> 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