Interesting!  I was able to witness strange behavior just using

    oiiotool -stats StarField.exr

(The -stats forces it to read the pixels.)

That crashes for me. So it's not your python script, and it's not the python 
bindings generally.

Upon doing a debug build and running it in the debugger, I get this:

Failed OpenEXR read: X and/or y subsampling factors of "BY" channel of input 
file "StarField.exr" are not compatible with the frame buffer's subsampling 
factors.

Aside: I don't know why it manages to print the error and exit cleanly when in 
lldb, but when not in the debugger it triggers a crash. I looked into this for 
a few minutes but don't have a satisfactory answer.

But in any case, this is an unusual file! Confirmed by running `exrheader` on 
it, which shows:

channels (type chlist):
    BY, 16-bit floating-point, sampling 2 2
    RY, 16-bit floating-point, sampling 2 2
    Y, 16-bit floating-point, sampling 1 1

I don't think I've ever seen any of these "subsampled" files in the wild, and 
it's not hard for me to believe that OIIO does something incorrect when setting 
up the read in that case.

In 10 years of OIIO, nobody has complained or noticed this, so unless you or 
somebody else says they need it, I'm not sure it's a priority to deal with 
these files (though it may be nice to detect the case we have trouble with and 
more gracefully refuse to read it).

Before proceeding, I will await feedback from you: Is this just an unfortunate 
coincidence that you chose this file and hit an edge case that we don't handle, 
and it's not something to worry about? Or are you actually needing to read 
files where the different channels have different subsampling rates, and we 
should figure out how to do it right?

        -- lg

> On Jan 20, 2018, at 10:28 AM, Larry Gritz <[email protected]> wrote:
> 
> Your code looks correct to me; I'll download the image and give it a try on 
> my end.
> 
> 
> 
>> On Jan 20, 2018, at 7:43 AM, Jordi Bares <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>> Thank you so much Larry… I have encountered a crash though… this is my 
>> function when dealing with this particular image
>> 
>> https://github.com/openexr/openexr-images/blob/master/LuminanceChroma/StarField.exr
>>  
>> <https://github.com/openexr/openexr-images/blob/master/LuminanceChroma/StarField.exr>
>> 
>> And exists with an error likes this
>> 
>> Fatal Python error: deallocating None
>> Abort trap: 6
>> 
>> 
>> 
>> THE CODE
>> 
>> ——————————————————8<———————
>> 
>> OK, BROKEN, SUSPICIOUS, UNKNOWN, SKIPPED, OTHER = range(0, 6)
>> 
>> def validateImageIntegrity(_filepath, _fastMode):
>> 
>>      imageMode = ''
>>      result = OK
>> 
>>      # Exhaustive method of analysing images
>>      image = oiio.ImageInput.open(_filepath)
>>      spec  = image.spec()
>> 
>>      # If this is scanline mode
>>      if spec.tile_width == 0:
>>              imageMode = 'Scanline'
>>              for y in range(spec.y, spec.y+spec.height):
>>                      print 'inside scanline', y
>>                      pixels = image.read_scanline(y, spec.z, oiio.UNKNOWN)
>>                      if pixels == None :
>>                              status = BROKEN
>>      else:
>>              imageMode = 'Tiled'
>>              for z in range(spec.z, spec.z+spec.depth, spec.tile_depth):
>>                      for y in range(spec.y, spec.y+spec.height, 
>> spec.tile_height):
>>                              for x in range(spec.x, spec.x+spec.width, 
>> spec.tile_width):
>>                                      pixels = image.read_tile(x, y, z, 
>> oiio.FLOAT)
>>                                      if pixels == None :
>>                                              status = BROKEN
>>      image.close ()
>> 
>>      return status
>> 
>> ——>8———————————————————————
>> 
>> 
>> Am I missing something?
>> 
>> Thanks in advance and I hope it helps
>> Jb
>> 
>> 
>> 
>>> On 19 Jan 2018, at 20:14, Larry Gritz <[email protected] 
>>> <mailto:[email protected]>> wrote:
>>> 
>>> There's no built-in function to do this all in one step, but it's not hard 
>>> to do "by hand".
>>> 
>>> I think the general approach is:
>>> 
>>> * Make an ImageInput, open the file
>>> * For each tile of the image:
>>>     * read_tile(), observe its return code (indicating error)
>>>     * If an error occurs, the file is incomplete, note which tile is missing
>>> 
>>> 
>>> 
>>>> On Jan 19, 2018, at 2:48 AM, Jordi Bares <[email protected] 
>>>> <mailto:[email protected]>> wrote:
>>>> 
>>>> Hello all,
>>>> 
>>>> My name is Jordi Bares and work for Framestore Advertising in the UK and I 
>>>> hope I can contribute a bit on the OpenImageIO mailing list.
>>>> 
>>>> 
>>>> My first question is, how can I do an sanity check on an image, specially 
>>>> EXR images.
>>>> 
>>>> Is there any way to verify if an image has been properly closed and is 
>>>> well formed? What about missing (black) tiles?
>>>> 
>>>> I don’t see anything in the documentation referring to that… am I missing 
>>>> something?
>>>> 
>>>> 
>>>> Thanks in advance.
>>>> jb
>>> 
>>> --
>>> Larry Gritz
>>> [email protected] <mailto:[email protected]>
>>> 
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> Oiio-dev mailing list
>>> [email protected] <mailto:[email protected]>
>>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org 
>>> <http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org>
>> 
>> _______________________________________________
>> Oiio-dev mailing list
>> [email protected] <mailto:[email protected]>
>> http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org
> 
> --
> Larry Gritz
> [email protected] <mailto:[email protected]>
> 
> 
> 
> 
> _______________________________________________
> 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

Reply via email to