-----Original Message-----
> From: Even Rouault [mailto:[email protected]]
>
> On which OS did you run the above test ? On Linux (and provided that
> GDAL_API_PROXY_SERVER is not set to YES or gdalserver) , I get JP2OpenJPEG on
> both cases. However on Windows, I would get the same result as you.
>

Yes, it was Windows and no GDAL_API_PROXY_SERVER set.

> Not sure to have completely followed you on this.
> My understanding is that you would do :
> - open the file in API_PROXY mode
> - if that works (ds != None and possibly attempting to read 1 pixel since
> crashes also sometimes occur in I/O operations), use the dataset, or if you
> want to avoid client/server roundtrips, open it again in standard mode (so
> with JP2ECW)
> - if that fails, deregister JP2ECW and open it as usual in standard mode (with
> JP2OpenJPEG) and re-register JP2ECW just after having opened the file, for the
> next files
>
> I'm confident that you can do that with the current state of code.
>

Yes, it was an I/O operation that caused the crash. I've also had previous 
problems with the JP2MrSID driver with other datasets so was hoping to do 
something generic like the following snippet. The idea was to gracefully handle 
JP2s that might crash more than one driver and therefore the entire gdal 
process if opened/used in standard mode as you suggest.  Admittedly it's a bit 
of a corner case...

drivers=filter(None,[gdal.GetDriverByName(d) for d in 
['JP2ECW','JP2KAK','JP2MrSID']])
for d in drivers+[None]:
    try:
        ds=gdal.Open('API_PROXY:'+f)  #Some jp2s crash on open
        result = do_some_operation(ds) #Some crash on I/O
        break
    except:
        if d:d.Deregister()#skip crashing driver

gdal.AllRegister() #Reset drivers

However, setting GDAL_SKIP seems to work so I'll use that instead.

drivers=filter(None,[gdal.GetDriverByName(d) for d in 
['JP2ECW','JP2KAK','JP2MrSID']])
drivers=[d.ShortName for d in drivers]+[''] #Filter the list to only installed 
drivers
for d in drivers:
    try:
        ds=gdal.Open('API_PROXY:'+f) #Some jp2s crash on open
        result = do_some_operation(ds) #Some crash on I/O
        break
    except:
        os.environ['GDAL_SKIP']=d #skip crashing driver or reset env

Luke

If you have received this transmission in error please notify us immediately by 
return e-mail and delete all copies. If this e-mail or any attachments have 
been sent to you in error, that error does not constitute waiver of any 
confidentiality, privilege or copyright in respect of information in the e-mail 
or attachments.

Please consider the environment before printing this email.
_______________________________________________
gdal-dev mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to