Program Listing for File FrameData_impl.h¶
↰ Return to documentation for file (lib/DataStructures/FrameData_impl.h)
#include "DataStructures/FrameMemory.h"
namespace lsd_slam {
template< int __LEVELS >
FrameData<__LEVELS>::FrameData( const Camera &cam, const ImageSize &slamImageSize, const unsigned char *img )
: hasIDepthBeenSet( false ),
validity_reAct( 0 ),
idepthVar_reAct( 0 ),
idepth_reAct( 0 ),
refPixelWasGood( 0 )
{
commonInitialization( cam, slamImageSize );
CHECK( (imgSize[0].width & (PYRAMID_DIVISOR-1)) == 0 ) << "Image width " << imgSize[0].width << " isn't divisible by " << PYRAMID_DIVISOR;
CHECK( (imgSize[0].height & (PYRAMID_DIVISOR-1)) == 0 ) << "Image height " << imgSize[0].width << " isn't divisible by " << PYRAMID_DIVISOR;
image[0] = FrameMemory::getInstance().getFloatBuffer(imgSize[0].area());
float *pt = image[0];
for(unsigned int i = 0; i < imgSize[0].area(); ++i, ++pt ) {
*pt = img[i];
}
imageValid[0] = true;
}
template< int __LEVELS >
FrameData<__LEVELS>::FrameData( const Camera &cam, const ImageSize &slamImageSize, const float *img )
: hasIDepthBeenSet( false ),
validity_reAct( 0 ),
idepthVar_reAct( 0 ),
idepth_reAct( 0 ),
refPixelWasGood( 0 )
{
commonInitialization( cam, slamImageSize );
CHECK( (imgSize[0].width & (PYRAMID_DIVISOR-1)) == 0 ) << "Image width " << imgSize[0].width << " isn't divisible by " << PYRAMID_DIVISOR;
CHECK( (imgSize[0].height & (PYRAMID_DIVISOR-1)) == 0 ) << "Image height " << imgSize[0].width << " isn't divisible by " << PYRAMID_DIVISOR;
image[0] = FrameMemory::getInstance().getFloatBuffer( imgSize[0].area() );
memcpy(image[0], img, imgSize[0].area() * sizeof(float));
imageValid[0] = true;
}
template< int __LEVELS >
void FrameData<__LEVELS>::commonInitialization( const Camera &cam, const ImageSize &slamImageSize )
{
camera[0] = cam;
for (int level = 0; level < __LEVELS; ++ level)
{
imgSize[level] = ImageSize( slamImageSize.width >> level, slamImageSize.height >> level );
imageValid[level] = false;
gradientsValid[level] = false;
maxGradientsValid[level] = false;
idepthValid[level] = false;
idepthVarValid[level] = false;
image[level] = 0;
gradients[level] = 0;
maxGradients[level] = 0;
idepth[level] = 0;
idepthVar[level] = 0;
reActivationDataValid = false;
// refIDValid[level] = false;
if (level > 0) camera[level] = camera[0].scale( 1.0f / (int)(1<<level) );
}
}
template< int __LEVELS >
FrameData<__LEVELS>::~FrameData() {
for (int level = 0; level < __LEVELS; ++ level)
{
FrameMemory::getInstance().returnBuffer(image[level]);
FrameMemory::getInstance().returnBuffer(reinterpret_cast<float*>(gradients[level]));
FrameMemory::getInstance().returnBuffer(maxGradients[level]);
FrameMemory::getInstance().returnBuffer(idepth[level]);
FrameMemory::getInstance().returnBuffer(idepthVar[level]);
}
FrameMemory::getInstance().returnBuffer((float*)validity_reAct);
FrameMemory::getInstance().returnBuffer(idepth_reAct);
FrameMemory::getInstance().returnBuffer(idepthVar_reAct);
}
}