<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 12 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.EmailStyle18
        {mso-style-type:personal-compose;
        font-family:"Times New Roman","serif";}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-AU" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><o:p> </o:p></p>
<p><span style="font-size:10.0pt"> -----Original Message-----<br>
> From: Even Rouault [<a href="mailto:even.rouault@mines-paris.org">mailto:even.rouault@mines-paris.org</a>]<br>
><br>
> On which OS did you run the above test ? On Linux (and provided that<br>
> GDAL_API_PROXY_SERVER is not set to YES or gdalserver) , I get JP2OpenJPEG on<br>
> both cases. However on Windows, I would get the same result as you.<br>
><br>
<br>
Yes, it was Windows and no GDAL_API_PROXY_SERVER set.<br>
<br>
> Not sure to have completely followed you on this.<br>
> My understanding is that you would do :<br>
> - open the file in API_PROXY mode<br>
> - if that works (ds != None and possibly attempting to read 1 pixel since<br>
> crashes also sometimes occur in I/O operations), use the dataset, or if you<br>
> want to avoid client/server roundtrips, open it again in standard mode (so<br>
> with JP2ECW)<br>
> - if that fails, deregister JP2ECW and open it as usual in standard mode (with<br>
> JP2OpenJPEG) and re-register JP2ECW just after having opened the file, for the<br>
> next files<br>
><br>
> I'm confident that you can do that with the current state of code.<br>
><br>
<br>
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...<br>
<br>
drivers=filter(None,[gdal.GetDriverByName(d) for d in ['JP2ECW','JP2KAK','JP2MrSID']])<br>
for d in drivers+[None]:<br>
    try:<br>
        ds=gdal.Open('API_PROXY:'+f)  #Some jp2s crash on open<br>
        result = do_some_operation(ds) #Some crash on I/O<br>
        break<br>
    except:<br>
        if d:d.Deregister()#skip crashing driver<br>
<br>
gdal.AllRegister() #Reset drivers<br>
<br>
However, setting GDAL_SKIP seems to work so I'll use that instead.<br>
<br>
drivers=filter(None,[gdal.GetDriverByName(d) for d in ['JP2ECW','JP2KAK','JP2MrSID']])<br>
drivers=[d.ShortName for d in drivers]+[''] #Filter the list to only installed drivers<br>
for d in drivers:<br>
    try:<br>
        ds=gdal.Open('API_PROXY:'+f) #Some jp2s crash on open<br>
        result = do_some_operation(ds) #Some crash on I/O<br>
        break<br>
    except:<br>
        os.environ['GDAL_SKIP']=d #skip crashing driver or reset env<br>
<br>
Luke</span><o:p></o:p></p>
</div>
<p>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.</p>
</body>
</html>