[Gdal-dev] Re: gdal fails on vrt (virtual raster) file
WolfgangZ
wollez at gmx.net
Wed Sep 5 15:43:40 EDT 2007
Even Rouault schrieb:
> Answering to my self and after a few more investigations, we can read in
> jpeglib.h :
>
> /* Limit on memory allocation for this JPEG object. (Note that this is
> * merely advisory, not a guaranteed maximum; it only affects the space
> * used for virtual-array buffers.) May be changed by outer application
> * after creating the JPEG object.
> */
> long max_memory_to_use;
>
>
> So, an alternative to define JPEGMEM (which seems to do what I thought it
> should do in my previous message) or could be to add the following lines :
> if (getenv("JPEGMEM") == NULL)
> poDS->sDInfo.mem->max_memory_to_use = 500 * 1024 * 1024;
> just after creating the decompression object done by :
> jpeg_create_decompress( &(poDS->sDInfo) ) ;
>
> This way, we don't need to patch libjpeg and if the user wants to define it's
> own value, he's still able to do so.
>
> FYI, on my Ubuntu system, I found out that libjpeg is build by default with
> 1GB for DEFAULT_MAX_MEM.
> I've tried to define JPEGMEM to a small value but couldn't reproduce
> Wolfgang's crash. I think it's because, in jmemansi.c, we can see that the
> temporary file is created by the C library "tmpfile()" call. On Linux, I
> think this file is created in /tmp : doing a "lsof | grep gdalinfo" with
> small values of JPEGMEM on a 10000x10000 progressive jpeg seems to confirm
> this intuition. I don't know where the MS C library tries to create the
> temporary file. The answer to this question could show a need for a specific
> patch in libjpeg for FWTool to create the temporary file in an appropriate
> directory.
>
> To answer one of Wolfgang's question, it may be surprising that gdalinfo is
> affected by this issue. But in JPGDataset::Open, we call
> jpeg_start_decompress that is really slow when I set a small value for
> JPEGMEM. Then we read image size, color space and other information. The
> question is : do we really need to do jpeg_start_decompress to get this
> values ? Probably, but I we don't, it could speed up gdalinfo.
>
>
> On Wednesday 05 September 2007 20:17:16 Even Rouault wrote:
>> Hi,
>>
>> I've just had a quick look into libjpeg. You may not need to patch the
>> #define DEFAULT_MAX_MEM, as the only indirect use of this I can see is in
>> jmemmgr.c where it can be overloaded by the JPEGMEM environment variable.
>> So, even with FWTools, if you do "JPEGMEM=500M gdalinfo blah.jpeg", you
>> should have the same behaviour as the gdal SVN patched libjpeg.
>> That's just theory. I haven't tested anything.
>>
>> Best regards
>>
>> On Wednesday 05 September 2007 18:04:47 Frank Warmerdam wrote:
>>> WolfgangZ wrote:
>>>> this patch is probably not jet applied in the FWTools. But I'm
>>>> wondering why even gdalinfo needs to create a temporary file? Why is
>>>> there the need from gdalinfo or gdal_translate to read in the full
>>>> image? Do I understand that that limit equals the maximum file size
>>>> that can be handled? Where is this temporary file usually generated?
>>>> I'm working on W2k.
>>> Wolfgang,
>>>
>>> I agree that the patch is likely not in FWTools because FWTools uses
>>> a stock external libjpeg instead of the adjusted GDAL libjpeg.
>>>
>>> I'm not exactly clear what the temp file is for. I have the vague
>>> impression it is only needed with progressive jpegs, but I could be
>>> wrong.
>>>
>>> I don't know for sure where it is created.
>>>
>>> Best regards,
>>>
I will try tomorrow to convert these data on my linux machine (with
FWTools) again. Furthermore I will try a "gdal_translate -of JPEG
input.jpg out.jpg" on all tiles to get non progressive jpgs (hopefully).
At least a more clear error would be nice to get a better hint where the
error is. Would it also be possible to add to gdalinfo which compression
is used (ie tiff has several possibilities (JPEG, LZW,...) and jpeg has
a progressive and nonprogressive mode). I would suggest a --verbose mode
for gdalinfo.
Thanks for your help so far!
Kind regards
Wolfgang
More information about the Gdal-dev
mailing list