openni_ir_image.cpp
Go to the documentation of this file.
00001 /*
00002  * Software License Agreement (BSD License)
00003  *
00004  *  Copyright (c) 2011 Willow Garage, Inc.
00005  *    Suat Gedikli <gedikli@willowgarage.com>
00006  *
00007  *  All rights reserved.
00008  *
00009  *  Redistribution and use in source and binary forms, with or without
00010  *  modification, are permitted provided that the following conditions
00011  *  are met:
00012  *
00013  *   * Redistributions of source code must retain the above copyright
00014  *     notice, this list of conditions and the following disclaimer.
00015  *   * Redistributions in binary form must reproduce the above
00016  *     copyright notice, this list of conditions and the following
00017  *     disclaimer in the documentation and/or other materials provided
00018  *     with the distribution.
00019  *   * Neither the name of Willow Garage, Inc. nor the names of its
00020  *     contributors may be used to endorse or promote products derived
00021  *     from this software without specific prior written permission.
00022  *
00023  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00024  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00025  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00026  *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00027  *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00028  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00029  *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00030  *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00031  *  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00032  *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00033  *  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00034  *  POSSIBILITY OF SUCH DAMAGE.
00035  *
00036  */
00037 
00038 #include <pcl/pcl_config.h>
00039 #ifdef HAVE_OPENNI
00040 
00041 #include <pcl/io/openni_camera/openni_ir_image.h>
00042 #include <sstream>
00043 #include <limits>
00044 #include <iostream>
00045 
00046 using namespace std;
00047 
00048 namespace openni_wrapper
00049 {
00050 void IRImage::fillRaw (unsigned width, unsigned height, unsigned short* ir_buffer, unsigned line_step) const
00051 {
00052   if (width > ir_md_->XRes () || height > ir_md_->YRes ())
00053     THROW_OPENNI_EXCEPTION ("upsampling not supported: %d x %d -> %d x %d", ir_md_->XRes (), ir_md_->YRes (), width, height);
00054 
00055   if (ir_md_->XRes () % width != 0 || ir_md_->YRes () % height != 0)
00056     THROW_OPENNI_EXCEPTION ("downsampling only supported for integer scale: %d x %d -> %d x %d", ir_md_->XRes (), ir_md_->YRes (), width, height);
00057 
00058   if (line_step == 0)
00059     line_step = width * static_cast<unsigned> (sizeof (unsigned short));
00060 
00061   // special case no sclaing, no padding => memcopy!
00062   if (width == ir_md_->XRes () && height == ir_md_->YRes () && (line_step == width * sizeof (unsigned short)))
00063   {
00064     memcpy (ir_buffer, ir_md_->Data(), ir_md_->DataSize ());
00065     return;
00066   }
00067 
00068   // padding skip for destination image
00069   unsigned bufferSkip = line_step - width * static_cast<unsigned> (sizeof (unsigned short));
00070 
00071   // step and padding skip for source image
00072   unsigned xStep = ir_md_->XRes () / width;
00073   unsigned ySkip = (ir_md_->YRes () / height - 1) * ir_md_->XRes ();
00074 
00075   unsigned irIdx = 0;
00076 
00077   for (unsigned yIdx = 0; yIdx < height; ++yIdx, irIdx += ySkip)
00078   {
00079     for (unsigned xIdx = 0; xIdx < width; ++xIdx, irIdx += xStep, ++ir_buffer)
00080       *ir_buffer = static_cast<unsigned short> (ir_md_->Data()[irIdx]);
00081 
00082     // if we have padding
00083     if (bufferSkip > 0)
00084     {
00085       char* cBuffer = reinterpret_cast<char*> (ir_buffer);
00086       ir_buffer = reinterpret_cast<unsigned short*> (cBuffer + bufferSkip);
00087     }
00088   }
00089 }
00090 } // namespace openni_wrapper
00091 
00092 #endif //HAVE_OPENNI
00093 


pcl
Author(s): Open Perception
autogenerated on Mon Oct 6 2014 03:16:02