$search
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 <openni_camera/openni_ir_image.h> 00039 #include <sstream> 00040 #include <limits> 00041 #include <iostream> 00042 00043 using namespace std; 00044 00045 namespace openni_wrapper 00046 { 00047 void IRImage::fillRaw (unsigned width, unsigned height, unsigned short* ir_buffer, unsigned line_step) const throw (OpenNIException) 00048 { 00049 if (width > ir_md_->XRes () || height > ir_md_->YRes ()) 00050 THROW_OPENNI_EXCEPTION ("upsampling not supported: %d x %d -> %d x %d", ir_md_->XRes (), ir_md_->YRes (), width, height); 00051 00052 if (ir_md_->XRes () % width != 0 || ir_md_->YRes () % height != 0) 00053 THROW_OPENNI_EXCEPTION ("downsampling only supported for integer scale: %d x %d -> %d x %d", ir_md_->XRes (), ir_md_->YRes (), width, height); 00054 00055 if (line_step == 0) 00056 line_step = width * sizeof (unsigned short); 00057 00058 // special case no sclaing, no padding => memcopy! 00059 if (width == ir_md_->XRes () && height == ir_md_->YRes () && (line_step == width * sizeof (unsigned short))) 00060 { 00061 memcpy (ir_buffer, ir_md_->Data(), ir_md_->DataSize ()); 00062 return; 00063 } 00064 00065 // padding skip for destination image 00066 unsigned bufferSkip = line_step - width * sizeof (unsigned short); 00067 00068 // step and padding skip for source image 00069 unsigned xStep = ir_md_->XRes () / width; 00070 unsigned ySkip = (ir_md_->YRes () / height - 1) * ir_md_->XRes (); 00071 00072 unsigned irIdx = 0; 00073 00074 for (unsigned yIdx = 0; yIdx < height; ++yIdx, irIdx += ySkip) 00075 { 00076 for (unsigned xIdx = 0; xIdx < width; ++xIdx, irIdx += xStep, ++ir_buffer) 00077 *ir_buffer = (unsigned short) (ir_md_->Data()[irIdx]); 00078 00079 // if we have padding 00080 if (bufferSkip > 0) 00081 { 00082 char* cBuffer = reinterpret_cast<char*> (ir_buffer); 00083 ir_buffer = reinterpret_cast<unsigned short*> (cBuffer + bufferSkip); 00084 } 00085 } 00086 } 00087 } // namespace openni_wrapper