[Liblas-commits] laszip: fixed for chunked compression of 0 points
liblas-commits at liblas.org
liblas-commits at liblas.org
Tue Jun 28 11:08:59 EDT 2011
details: http://hg.liblas.orglaszip/rev/379b1fd606a6
changeset: 263:379b1fd606a6
user: isenburg
date: Tue Jun 28 08:12:29 2011 -0700
description:
fixed for chunked compression of 0 points
diffstat:
src/lasreadpoint.cpp | 33 ++++++++++++++++-----------------
src/laswritepoint.cpp | 25 ++++++++++++++++++-------
2 files changed, 34 insertions(+), 24 deletions(-)
diffs (95 lines):
diff -r 8326e4c5f9ef -r 379b1fd606a6 src/lasreadpoint.cpp
--- a/src/lasreadpoint.cpp Mon Jun 27 14:39:15 2011 -0500
+++ b/src/lasreadpoint.cpp Tue Jun 28 08:12:29 2011 -0700
@@ -385,10 +385,6 @@
{
return FALSE;
}
- if (number_chunks == 0)
- {
- return FALSE;
- }
if (chunk_totals) delete [] chunk_totals;
chunk_totals = 0;
if (chunk_starts) delete [] chunk_starts;
@@ -397,20 +393,23 @@
chunk_starts = new long[number_chunks+1];
if (chunk_size == U32_MAX) chunk_totals[0] = 0;
chunk_starts[0] = chunks_start;
- U32 i;
- dec->init(instream);
- IntegerCompressor ic(dec, 32, 2);
- ic.initDecompressor();
- for (i = 1; i <= number_chunks; i++)
+ if (number_chunks > 0)
{
- if (chunk_size == U32_MAX) chunk_totals[i] = ic.decompress((i>1 ? chunk_totals[i-1] : 0), 0);
- chunk_starts[i] = ic.decompress((i>1 ? chunk_starts[i-1] : 0), 1);
- }
- dec->done();
- for (i = 1; i <= number_chunks; i++)
- {
- if (chunk_size == U32_MAX) chunk_totals[i] += chunk_totals[i-1];
- chunk_starts[i] += chunk_starts[i-1];
+ U32 i;
+ dec->init(instream);
+ IntegerCompressor ic(dec, 32, 2);
+ ic.initDecompressor();
+ for (i = 1; i <= number_chunks; i++)
+ {
+ if (chunk_size == U32_MAX) chunk_totals[i] = ic.decompress((i>1 ? chunk_totals[i-1] : 0), 0);
+ chunk_starts[i] = ic.decompress((i>1 ? chunk_starts[i-1] : 0), 1);
+ }
+ dec->done();
+ for (i = 1; i <= number_chunks; i++)
+ {
+ if (chunk_size == U32_MAX) chunk_totals[i] += chunk_totals[i-1];
+ chunk_starts[i] += chunk_starts[i-1];
+ }
}
instream->seek(chunks_start);
return TRUE;
diff -r 8326e4c5f9ef -r 379b1fd606a6 src/laswritepoint.cpp
--- a/src/laswritepoint.cpp Mon Jun 27 14:39:15 2011 -0500
+++ b/src/laswritepoint.cpp Tue Jun 28 08:12:29 2011 -0700
@@ -285,6 +285,14 @@
return write_chunk_table();
}
}
+ else if (writers == 0)
+ {
+ if (chunk_start_position)
+ {
+ return write_chunk_table();
+ }
+ }
+
return TRUE;
}
@@ -343,15 +351,18 @@
{
return FALSE;
}
- enc->init(outstream);
- IntegerCompressor ic(enc, 32, 2);
- ic.initCompressor();
- for (i = 0; i < number_chunks; i++)
+ if (number_chunks > 0)
{
- if (chunk_size == U32_MAX) ic.compress((i ? chunk_sizes[i-1] : 0), chunk_sizes[i], 0);
- ic.compress((i ? chunk_bytes[i-1] : 0), chunk_bytes[i], 1);
+ enc->init(outstream);
+ IntegerCompressor ic(enc, 32, 2);
+ ic.initCompressor();
+ for (i = 0; i < number_chunks; i++)
+ {
+ if (chunk_size == U32_MAX) ic.compress((i ? chunk_sizes[i-1] : 0), chunk_sizes[i], 0);
+ ic.compress((i ? chunk_bytes[i-1] : 0), chunk_bytes[i], 1);
+ }
+ enc->done();
}
- enc->done();
if (!chunk_table_start_position) // stream is not-seekable
{
if (!outstream->put64bitsLE((U8*)&position))
More information about the Liblas-commits
mailing list