Point Cloud Library (PCL)
1.7.0
|
00001 /* 00002 * Software License Agreement (BSD License) 00003 * 00004 * Point Cloud Library (PCL) - www.pointclouds.org 00005 * Copyright (c) 2000-2008 Marc Alexander Lehmann <schmorp@schmorp.de> 00006 * Copyright (c) 2010-2011, Willow Garage, Inc. 00007 * 00008 * All rights reserved. 00009 * 00010 * Redistribution and use in source and binary forms, with or without 00011 * modification, are permitted provided that the following conditions 00012 * are met: 00013 * 00014 * * Redistributions of source code must retain the above copyright 00015 * notice, this list of conditions and the following disclaimer. 00016 * * Redistributions in binary form must reproduce the above 00017 * copyright notice, this list of conditions and the following 00018 * disclaimer in the documentation and/or other materials provided 00019 * with the distribution. 00020 * 00021 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00022 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00023 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 00024 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 00025 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 00026 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 00027 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00028 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 00029 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00030 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 00031 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00032 * POSSIBILITY OF SUCH DAMAGE. 00033 * 00034 * $Id$ 00035 * 00036 */ 00037 00038 #ifndef PCL_IO_LZF_H 00039 #define PCL_IO_LZF_H 00040 00041 #include <pcl/pcl_macros.h> 00042 00043 namespace pcl 00044 { 00045 /** \brief Compress in_len bytes stored at the memory block starting at 00046 * \a in_data and write the result to \a out_data, up to a maximum length 00047 * of \a out_len bytes using Marc Lehmann's LZF algorithm. 00048 * 00049 * If the output buffer is not large enough or any error occurs return 0, 00050 * otherwise return the number of bytes used, which might be considerably 00051 * more than in_len (but less than 104% of the original size), so it 00052 * makes sense to always use out_len == in_len - 1), to ensure _some_ 00053 * compression, and store the data uncompressed otherwise (with a flag, of 00054 * course. 00055 * 00056 * \note The buffers must not be overlapping. 00057 * 00058 * \param[in] in_data the input uncompressed buffer 00059 * \param[in] in_len the length of the input buffer 00060 * \param[out] out_data the output buffer where the compressed result will be stored 00061 * \param[out] out_len the length of the output buffer 00062 * 00063 */ 00064 PCL_EXPORTS unsigned int 00065 lzfCompress (const void *const in_data, unsigned int in_len, 00066 void *out_data, unsigned int out_len); 00067 00068 /** \brief Decompress data compressed with the \a lzfCompress function and 00069 * stored at location \a in_data and length \a in_len. The result will be 00070 * stored at \a out_data up to a maximum of \a out_len characters. 00071 * 00072 * If the output buffer is not large enough to hold the decompressed 00073 * data, a 0 is returned and errno is set to E2BIG. Otherwise the number 00074 * of decompressed bytes (i.e. the original length of the data) is 00075 * returned. 00076 * 00077 * If an error in the compressed data is detected, a zero is returned and 00078 * errno is set to EINVAL. 00079 * 00080 * This function is very fast, about as fast as a copying loop. 00081 * \param[in] in_data the input compressed buffer 00082 * \param[in] in_len the length of the input buffer 00083 * \param[out] out_data the output buffer (must be resized to \a out_len) 00084 * \param[out] out_len the length of the output buffer 00085 */ 00086 PCL_EXPORTS unsigned int 00087 lzfDecompress (const void *const in_data, unsigned int in_len, 00088 void *out_data, unsigned int out_len); 00089 } 00090 00091 #endif /* PCL_IO_LZF */ 00092