Hi He,

On Nov 13, 2012, at 6:17 PM, [email protected] wrote:

> Hi Quincey
>    The problem is the image is not allocated by me,  it is from another 
> library,  for some hardware reason, the image data always add some padding 
> data, and so it can be processed faster, for example, the opengl has 1 or ,2, 
> 4 bytes alignment, and the intel ipp library has its own malloc fuction, in 
> those image class/structure, there always is a step member which is the 
> length in bytes to show the scanline length. For most case, we can assume it 
> will align perfectly, but there may have some special case, the padding bits 
> is not integer multiply element size. so I want to know if hdf5 api directly 
> support the image scanline length, as most image processing library support 
> it. But It seems I have to use a buffer to strip out it myself.  
>    HDF5 have been used a lot in remote sensing and satellite image processing 
> application. the tiff format should have this kind of problem.  Hope in the 
> future it will support those steps. 
>    Thanks for answer my problem.

        Hmm, I think you may have misunderstood my previous response - you can 
make multiple H5Dwrite calls to perform this I/O, by setting the memory buffer 
pointer to H5Dwrite to different locations within the awkwardly structured 
buffer you receive from the other library, and selecting a small number of 
elements to write each time.  It'll just take a larger number of H5Dwrite calls 
than otherwise...  :-)

        We'll definitely keep the use case in mind, in the future.

                Quincey

> He Yang
> 
> 
> 
> On Tue, Nov 13, 2012 at 5:26 PM, Quincey Koziol <[email protected]> wrote:
> 
> On Nov 13, 2012, at 5:08 PM, [email protected] wrote:
> 
>> Hi Quincey
>>    I have tried this, the problem is the padding part is only partial of the 
>> element size, so the stride can only be set to be interger, which means 
>> if  i have scan line like   00000000, 11111111, 00  here the element size is 
>> 8bit, but the padding bits is 2bit,  if i select hyperslab, the stride can 
>> be only the interger, which means the padding bits at least 8bit.  So it 
>> will cause problem. 
> 
>       
> *blah* What an awkward data layout :-)  I suppose you could create the 
> packed, matrix-like dataset in the file and then write small pieces of your 
> buffer in memory to regions of the dataset in the file, with multiple I/O 
> calls.  Not the best performance possibly, but if you use chunked dataset 
> stored for the dataset in the file, the chunk caching in the HDF5 library 
> should mitigate that performance issue significantly.
> 
>       Quincey
> 
>>    Thanks
>> He Yang
>> 
>> 
>> 
>> On Tue, Nov 13, 2012 at 4:45 PM, Quincey Koziol <[email protected]> wrote:
>> Hi He,
>>      You can build up this sort of selection with the H5Sselect_hyperslab() 
>> routine by using the H5S_SELECT_OR operator (or another convenient operator).
>> 
>>              Quincey
>> 
>> 
>> On Nov 13, 2012, at 1:06 PM, [email protected] wrote:
>> 
>>> Hi 
>>>  The problem is the hyperslab's  strid is meaused by the number of  pixels, 
>>> not bytes, so I i have a 8 16bit pixels, and a 4 padding bits, 
>>> the stride will not work. as if the stride is 1 it will be 16bit not 4bits.
>>>  
>>> He Yang
>>> 
>>> 
>>> 
>>> On Tue, Nov 13, 2012 at 12:24 PM, Quincey Koziol <[email protected]> 
>>> wrote:
>>> 
>>> On Nov 12, 2012, at 8:52 AM, [email protected] wrote:
>>> 
>>> > Hi All
>>> >     I am trying to save image data to the dataset,  the image data is 
>>> > allocated by other library,  so the image's scanline length is not equal 
>>> > to the number
>>> > of pixels, and will have the padding bytes.  I want save it into hdf5 as 
>>> > a matrix,  which don't  have those padding bytes,  as the image can be 
>>> > float, unsigned short, and come from other data, the scanline length(/ 
>>> > step ) between each row may not be the multiples of the pixels.  for 
>>> > example, the
>>> > image has 9 unsigned short pixels, and the sacn line length is defined by 
>>> > allocate 9*(16/2)+4=76 bytes, the stride in hdf5 can only be the interger 
>>> > times the elements length.  so it can not work.  And I don't want use a 
>>> > temporary buffer to change the memory layout. I also want all other hdf5 
>>> > application can directly read the image out as matrix, so I don't want 
>>> > use raw data format.   Is there a way which can directly use hdf5's api 
>>> > and it will automatically strip the padding bytes for image data.
>>> 
>>>         You should be able to use hyperslab or point selections to achieve 
>>> what you want.
>>> 
>>>                 Quincey
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> Hdf-forum is for HDF software users discussion.
>>> [email protected]
>>> http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org
>>> 
>>> _______________________________________________
>>> Hdf-forum is for HDF software users discussion.
>>> [email protected]
>>> http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org
>> 
>> 
>> _______________________________________________
>> Hdf-forum is for HDF software users discussion.
>> [email protected]
>> http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org
>> 
>> 
>> _______________________________________________
>> Hdf-forum is for HDF software users discussion.
>> [email protected]
>> http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org
> 
> 
> _______________________________________________
> Hdf-forum is for HDF software users discussion.
> [email protected]
> http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org
> 
> 
> _______________________________________________
> Hdf-forum is for HDF software users discussion.
> [email protected]
> http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org

_______________________________________________
Hdf-forum is for HDF software users discussion.
[email protected]
http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org

Reply via email to