Full Code of pamela-project/slambench2 for AI

master 8a9deeaa5124 cached
417 files
27.2 MB
7.1M tokens
1021 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (28,585K chars total). Download the full file to get everything.
Repository: pamela-project/slambench2
Branch: master
Commit: 8a9deeaa5124
Files: 417
Total size: 27.2 MB

Directory structure:
gitextract_mua7h2yd/

├── .clang-format
├── .dockerignore
├── .gitignore
├── .travis.yml
├── CMakeLists.txt
├── CONTRIBUTORS
├── LICENSE
├── Makefile
├── README.md
├── _config.yml
├── benchmarks/
│   └── CMakeLists.txt
├── cmake_modules/
│   ├── CUDACheckCompute.cmake
│   ├── FindBrisk.cmake
│   ├── FindCVD.cmake
│   ├── FindCeres.cmake
│   ├── FindEigen.cmake
│   ├── FindEigen3.cmake
│   ├── FindFreeImage.cmake
│   ├── FindG2O.cmake
│   ├── FindGVARS.cmake
│   ├── FindGlog.cmake
│   ├── FindLIBYAML.cmake
│   ├── FindOpenCL.cmake
│   ├── FindOpenNI.cmake
│   ├── FindOpenNI2.cmake
│   ├── FindPAPI.cmake
│   ├── FindSLAMBENCH.cmake
│   ├── FindSuiteSparse.cmake
│   ├── FindTooN.cmake
│   └── cuda_compute_capability.c
├── docker/
│   ├── Makefile
│   ├── cuda-ubuntu-16.04.docker
│   ├── fastCI.docker
│   ├── fedora-24.docker
│   ├── fedora-25.docker
│   ├── fedora-26.docker
│   ├── github.docker
│   ├── run_cuda.sh
│   ├── travis-deps.docker
│   ├── ubuntu-14.04-bitbucket.docker
│   ├── ubuntu-14.04-deps.docker
│   ├── ubuntu-14.04.docker
│   ├── ubuntu-16.04.docker
│   └── ubuntu-16.10.docker
├── framework/
│   ├── CMakeLists.txt
│   ├── makefiles/
│   │   ├── README.md
│   │   ├── brisk.make
│   │   ├── ceres.make
│   │   ├── cvd.make
│   │   ├── dataset-utils.makefile
│   │   ├── deps.makefile
│   │   ├── download_benchmarks.py
│   │   ├── download_datasets.py
│   │   ├── eigen3.make
│   │   ├── flann.make
│   │   ├── freeimage.make
│   │   ├── g2o.make
│   │   ├── gcc.make
│   │   ├── gvars.make
│   │   ├── libopencl-stub.make
│   │   ├── opencv.make
│   │   ├── opengv.make
│   │   ├── openni.make
│   │   ├── opentuner.make
│   │   ├── pangolin.make
│   │   ├── pcl.make
│   │   ├── sophus.make
│   │   ├── suitesparse.make
│   │   └── toon.make
│   ├── patchs/
│   │   ├── OpenNI2_SLAMBench.patch
│   │   ├── OpenNI_SLAMBench.patch
│   │   ├── SensorKinect_SLAMBench.patch
│   │   ├── freeimage.patch
│   │   └── libopencl-stub_SLAMBench.patch
│   ├── shared/
│   │   ├── CMakeLists.txt
│   │   ├── include/
│   │   │   ├── ColumnWriter.h
│   │   │   ├── ParameterComponent.h
│   │   │   ├── ParameterManager.h
│   │   │   ├── Parameters.h
│   │   │   ├── ResultWriter.h
│   │   │   ├── SLAMBenchAPI.h
│   │   │   ├── SLAMBenchConfiguration.h
│   │   │   ├── SLAMBenchException.h
│   │   │   ├── SLAMBenchLibraryHelper.h
│   │   │   ├── SLAMBenchUI.h
│   │   │   ├── SLAMBenchUI_Pangolin.h
│   │   │   ├── TimeStamp.h
│   │   │   ├── io/
│   │   │   │   ├── Event.h
│   │   │   │   ├── FrameBuffer.h
│   │   │   │   ├── FrameBufferSource.h
│   │   │   │   ├── FrameFormat.h
│   │   │   │   ├── FrameSource.h
│   │   │   │   ├── InputInterface.h
│   │   │   │   ├── InputInterfaceManager.h
│   │   │   │   ├── PixelFormat.h
│   │   │   │   ├── SLAMFile.h
│   │   │   │   ├── SLAMFrame.h
│   │   │   │   ├── SensorType.h
│   │   │   │   ├── core/
│   │   │   │   │   └── Core.h
│   │   │   │   ├── deserialisation/
│   │   │   │   │   ├── Deserialiser.h
│   │   │   │   │   ├── SLAMFileDeserialiser.h
│   │   │   │   │   ├── SLAMFileHeaderDeserialiser.h
│   │   │   │   │   ├── SLAMFrameDeserialiser.h
│   │   │   │   │   └── SensorCollectionDeserialiser.h
│   │   │   │   ├── format/
│   │   │   │   │   ├── DataFormatter.h
│   │   │   │   │   ├── EventDataFormatter.h
│   │   │   │   │   ├── ImageDataFormatter.h
│   │   │   │   │   └── PointCloud.h
│   │   │   │   ├── openni15/
│   │   │   │   │   ├── ONI15Frame.h
│   │   │   │   │   ├── ONI15FrameStream.h
│   │   │   │   │   └── ONI15InputInterface.h
│   │   │   │   ├── openni2/
│   │   │   │   │   ├── ONI2Frame.h
│   │   │   │   │   ├── ONI2FrameStream.h
│   │   │   │   │   └── ONI2InputInterface.h
│   │   │   │   ├── realsense/
│   │   │   │   │   ├── RealSense2Frame.h
│   │   │   │   │   ├── RealSense2FrameStream.h
│   │   │   │   │   └── RealSense2InputInterface.h
│   │   │   │   ├── sensor/
│   │   │   │   │   ├── AccelerometerSensor.h
│   │   │   │   │   ├── CameraSensor.h
│   │   │   │   │   ├── CameraSensorFinder.h
│   │   │   │   │   ├── DepthSensor.h
│   │   │   │   │   ├── EventCameraSensor.h
│   │   │   │   │   ├── GroundTruthSensor.h
│   │   │   │   │   ├── GyroSensor.h
│   │   │   │   │   ├── IMUSensor.h
│   │   │   │   │   ├── OdomSensor.h
│   │   │   │   │   ├── PointCloudSensor.h
│   │   │   │   │   ├── Sensor.h
│   │   │   │   │   ├── SensorCollection.h
│   │   │   │   │   ├── SensorDatabase.h
│   │   │   │   │   └── sensor_builder.h
│   │   │   │   └── serialisation/
│   │   │   │       ├── SLAMFileHeaderSerialiser.h
│   │   │   │       ├── SLAMFileSerialiser.h
│   │   │   │       ├── SLAMFrameSerialiser.h
│   │   │   │       └── Serialiser.h
│   │   │   ├── lodepng.h
│   │   │   ├── math_types.h
│   │   │   ├── metrics/
│   │   │   │   ├── ATEMetric.h
│   │   │   │   ├── DepthEstimationMetric.h
│   │   │   │   ├── DurationMetric.h
│   │   │   │   ├── FrameData.h
│   │   │   │   ├── MemoryMetric.h
│   │   │   │   ├── Metric.h
│   │   │   │   ├── MetricManager.h
│   │   │   │   ├── MetricValue.h
│   │   │   │   ├── Phase.h
│   │   │   │   ├── PointCloudMetric.h
│   │   │   │   ├── PowerMetric.h
│   │   │   │   ├── RPEMetric.h
│   │   │   │   ├── memory_utils/
│   │   │   │   │   └── CUDAMonitor.h
│   │   │   │   └── power_utils/
│   │   │   │       ├── PAPIMonitor.h
│   │   │   │       ├── PowerMonitor.h
│   │   │   │       └── XU3Monitor.h
│   │   │   ├── outputs/
│   │   │   │   ├── Output.h
│   │   │   │   ├── OutputManager.h
│   │   │   │   ├── OutputManagerWriter.h
│   │   │   │   ├── PoseOutput.h
│   │   │   │   ├── TrajectoryAlignmentMethod.h
│   │   │   │   └── TrajectoryInterface.h
│   │   │   ├── sb_malloc.h
│   │   │   ├── sysutils.h
│   │   │   ├── timings.h
│   │   │   ├── utils.h
│   │   │   └── values/
│   │   │       ├── Value.h
│   │   │       ├── ValueDispatch.h
│   │   │       ├── ValueInterface.h
│   │   │       └── ValuePrinter.h
│   │   └── src/
│   │       ├── ColumnWriter.cpp
│   │       ├── ParameterComponent.cpp
│   │       ├── ParameterManager.cpp
│   │       ├── ResultWriter.cpp
│   │       ├── SLAMBenchConfiguration.cpp
│   │       ├── SLAMBenchUI_Pangolin.cpp
│   │       ├── dummy_library.cpp
│   │       ├── io/
│   │       │   ├── FrameBuffer.cpp
│   │       │   ├── FrameBufferSource.cpp
│   │       │   ├── FrameFormat.cpp
│   │       │   ├── FrameSource.cpp
│   │       │   ├── InputInterface.cpp
│   │       │   ├── InputInterfaceManager.cpp
│   │       │   ├── PixelFormat.cpp
│   │       │   ├── SLAMFile.cpp
│   │       │   ├── SLAMFrame.cpp
│   │       │   ├── core/
│   │       │   │   └── Core.cpp
│   │       │   ├── deserialisation/
│   │       │   │   ├── Deserialiser.cpp
│   │       │   │   ├── SLAMFileDeserialiser.cpp
│   │       │   │   ├── SLAMFileHeaderDeserialiser.cpp
│   │       │   │   ├── SLAMFrameDeserialiser.cpp
│   │       │   │   └── SensorCollectionDeserialiser.cpp
│   │       │   ├── format/
│   │       │   │   ├── DataFormatter.cpp
│   │       │   │   └── PointCloud.cpp
│   │       │   ├── openni/
│   │       │   │   ├── ONI2Frame.cpp
│   │       │   │   ├── ONI2FrameStream.cpp
│   │       │   │   └── ONI2InputInterface.cpp
│   │       │   ├── openni15/
│   │       │   │   ├── ONI15Frame.cpp
│   │       │   │   ├── ONI15FrameStream.cpp
│   │       │   │   └── ONI15InputInterface.cpp
│   │       │   ├── realsense/
│   │       │   │   ├── RealSense2Frame.cpp
│   │       │   │   ├── RealSense2FrameStream.cpp
│   │       │   │   └── RealSense2InputInterface.cpp
│   │       │   ├── sensor/
│   │       │   │   ├── AccelerometerSensor.cpp
│   │       │   │   ├── CameraSensor.cpp
│   │       │   │   ├── CameraSensorFinder.cpp
│   │       │   │   ├── DepthSensor.cpp
│   │       │   │   ├── EventCameraSensor.cpp
│   │       │   │   ├── GroundTruthSensor.cpp
│   │       │   │   ├── GyroSensor.cpp
│   │       │   │   ├── IMUSensor.cpp
│   │       │   │   ├── OdomSensor.cpp
│   │       │   │   ├── PointCloudSensor.cpp
│   │       │   │   ├── Sensor.cpp
│   │       │   │   ├── SensorCollection.cpp
│   │       │   │   └── SensorDatabase.cpp
│   │       │   └── serialisation/
│   │       │       ├── SLAMFileHeaderSerialiser.cpp
│   │       │       ├── SLAMFileSerialiser.cpp
│   │       │       ├── SLAMFrameSerialiser.cpp
│   │       │       └── Serialiser.cpp
│   │       ├── library_wrapper.cpp
│   │       ├── lodepng.cpp
│   │       ├── metrics/
│   │       │   ├── ATEMetric.cpp
│   │       │   ├── DepthEstimationMetric.cpp
│   │       │   ├── DurationMetric.cpp
│   │       │   ├── MemoryMetric.cpp
│   │       │   ├── Metric.cpp
│   │       │   ├── MetricManager.cpp
│   │       │   ├── Phase.cpp
│   │       │   ├── PointCloudMetric.cpp
│   │       │   ├── PowerMetric.cpp
│   │       │   ├── RPEMetric.cpp
│   │       │   ├── memory_utils/
│   │       │   │   └── CUDAMonitor.cpp
│   │       │   └── power_utils/
│   │       │       ├── PAPIMonitor.cpp
│   │       │       └── XU3Monitor.cpp
│   │       ├── outputs/
│   │       │   ├── Output.cpp
│   │       │   ├── OutputManager.cpp
│   │       │   ├── OutputManagerWriter.cpp
│   │       │   ├── TrajectoryAlignmentMethod.cpp
│   │       │   └── TrajectoryInterface.cpp
│   │       ├── sb_malloc.cpp
│   │       └── values/
│   │           ├── Value.cpp
│   │           ├── ValueDispatch.cpp
│   │           ├── ValueInterface.cpp
│   │           └── ValuePrinter.cpp
│   └── tools/
│       ├── CMakeLists.txt
│       ├── README.md
│       ├── accuracy-tools/
│       │   ├── CMakeLists.txt
│       │   └── pointcloud_aligner.cpp
│       ├── dataset-tools/
│       │   ├── BONN.cpp
│       │   ├── CMakeLists.txt
│       │   ├── ETHI.cpp
│       │   ├── EUROCMAV.cpp
│       │   ├── ICL.cpp
│       │   ├── ICLNUIM.cpp
│       │   ├── OpenLORIS.cpp
│       │   ├── SVO.cpp
│       │   ├── TUM-ROSBAG.cpp
│       │   ├── TUM.cpp
│       │   ├── UZHFPV.cpp
│       │   ├── VolumeDeform.cpp
│       │   ├── dataset-generator.cpp
│       │   ├── include/
│       │   │   ├── BONN.h
│       │   │   ├── DatasetReader.h
│       │   │   ├── ETHI.h
│       │   │   ├── EUROCMAV.h
│       │   │   ├── ICL.h
│       │   │   ├── ICLNUIM.h
│       │   │   ├── OpenLORIS.h
│       │   │   ├── SVO.h
│       │   │   ├── TUM.h
│       │   │   ├── UZHFPV.h
│       │   │   ├── VolumeDeform.h
│       │   │   └── utils/
│       │   │       ├── PlyASCIIReader.h
│       │   │       ├── RegexPattern.h
│       │   │       ├── dataset_utils.h
│       │   │       └── tinyply.h
│       │   ├── io-inspect.cpp
│       │   ├── io-monoslam.cpp
│       │   ├── io-readply.cpp
│       │   ├── lodepng.cpp
│       │   └── lodepng.h
│       ├── loaders/
│       │   ├── CMakeLists.txt
│       │   ├── benchmark_loader.cpp
│       │   ├── pangolin_loader.cpp
│       │   └── slambench_app.cpp
│       └── profiling-tools/
│           ├── CMakeLists.txt
│           └── OCLWrapper.cpp
├── icra2018_results/
│   ├── 1080/
│   │   ├── memory_efusion_living_room_traj2_loop.log
│   │   ├── memory_infinitam_living_room_traj2_loop.log
│   │   ├── memory_kfusion_living_room_traj2_loop.log
│   │   ├── memory_lsdslam_living_room_traj2_loop.log
│   │   ├── memory_orbslam2_living_room_traj2_loop.log
│   │   ├── violons_libefusion-cuda_living_room_traj0_loop.log
│   │   ├── violons_libefusion-cuda_living_room_traj1_loop.log
│   │   ├── violons_libefusion-cuda_living_room_traj2_loop.log
│   │   ├── violons_libefusion-cuda_living_room_traj3_loop.log
│   │   ├── violons_libefusion-cuda_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_libefusion-cuda_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_libefusion-cuda_rgbd_dataset_freiburg2_rpy.log
│   │   ├── violons_libefusion-cuda_rgbd_dataset_freiburg2_xyz.log
│   │   ├── violons_libinfinitam-cpp_living_room_traj0_loop.log
│   │   ├── violons_libinfinitam-cpp_living_room_traj1_loop.log
│   │   ├── violons_libinfinitam-cpp_living_room_traj2_loop.log
│   │   ├── violons_libinfinitam-cpp_living_room_traj3_loop.log
│   │   ├── violons_libinfinitam-cpp_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_libinfinitam-cpp_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_libinfinitam-cpp_rgbd_dataset_freiburg2_rpy.log
│   │   ├── violons_libinfinitam-cpp_rgbd_dataset_freiburg2_xyz.log
│   │   ├── violons_libinfinitam-cuda_living_room_traj0_loop.log
│   │   ├── violons_libinfinitam-cuda_living_room_traj1_loop.log
│   │   ├── violons_libinfinitam-cuda_living_room_traj2_loop.log
│   │   ├── violons_libinfinitam-cuda_living_room_traj3_loop.log
│   │   ├── violons_libinfinitam-cuda_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_libinfinitam-cuda_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_libinfinitam-cuda_rgbd_dataset_freiburg2_rpy.log
│   │   ├── violons_libinfinitam-cuda_rgbd_dataset_freiburg2_xyz.log
│   │   ├── violons_libkfusion-cpp_living_room_traj0_loop.log
│   │   ├── violons_libkfusion-cpp_living_room_traj1_loop.log
│   │   ├── violons_libkfusion-cpp_living_room_traj2_loop.log
│   │   ├── violons_libkfusion-cpp_living_room_traj3_loop.log
│   │   ├── violons_libkfusion-cpp_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_libkfusion-cpp_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_libkfusion-cpp_rgbd_dataset_freiburg2_rpy.log
│   │   ├── violons_libkfusion-cpp_rgbd_dataset_freiburg2_xyz.log
│   │   ├── violons_libkfusion-cuda_living_room_traj0_loop.log
│   │   ├── violons_libkfusion-cuda_living_room_traj1_loop.log
│   │   ├── violons_libkfusion-cuda_living_room_traj2_loop.log
│   │   ├── violons_libkfusion-cuda_living_room_traj3_loop.log
│   │   ├── violons_libkfusion-cuda_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_libkfusion-cuda_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_libkfusion-cuda_rgbd_dataset_freiburg2_rpy.log
│   │   ├── violons_libkfusion-cuda_rgbd_dataset_freiburg2_xyz.log
│   │   ├── violons_liblsdslam-cpp_living_room_traj0_loop.log
│   │   ├── violons_liblsdslam-cpp_living_room_traj1_loop.log
│   │   ├── violons_liblsdslam-cpp_living_room_traj2_loop.log
│   │   ├── violons_liblsdslam-cpp_living_room_traj3_loop.log
│   │   ├── violons_liblsdslam-cpp_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_liblsdslam-cpp_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_liblsdslam-cpp_rgbd_dataset_freiburg2_rpy.log
│   │   ├── violons_liblsdslam-cpp_rgbd_dataset_freiburg2_xyz.log
│   │   ├── violons_liborbslam2-original_living_room_traj0_loop.log
│   │   ├── violons_liborbslam2-original_living_room_traj1_loop.log
│   │   ├── violons_liborbslam2-original_living_room_traj2_loop.log
│   │   ├── violons_liborbslam2-original_living_room_traj3_loop.log
│   │   ├── violons_liborbslam2-original_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_liborbslam2-original_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_liborbslam2-original_rgbd_dataset_freiburg2_rpy.log
│   │   └── violons_liborbslam2-original_rgbd_dataset_freiburg2_xyz.log
│   ├── Makefile
│   ├── paper_run.sh
│   ├── plotutils.py
│   ├── slamlog.py
│   ├── tegra/
│   │   ├── memory_efusion_living_room_traj2_loop.log
│   │   ├── memory_infinitam_living_room_traj2_loop.log
│   │   ├── memory_kfusion_living_room_traj2_loop.log
│   │   ├── memory_lsdslam_living_room_traj2_loop.log
│   │   ├── memory_orbslam2_living_room_traj2_loop.log
│   │   ├── violons_libefusion-cuda_living_room_traj0_loop.log
│   │   ├── violons_libefusion-cuda_living_room_traj1_loop.log
│   │   ├── violons_libefusion-cuda_living_room_traj2_loop.log
│   │   ├── violons_libefusion-cuda_living_room_traj3_loop.log
│   │   ├── violons_libefusion-cuda_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_libefusion-cuda_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_libefusion-cuda_rgbd_dataset_freiburg2_rpy.log
│   │   ├── violons_libefusion-cuda_rgbd_dataset_freiburg2_xyz.log
│   │   ├── violons_libinfinitam-cpp_living_room_traj0_loop.log
│   │   ├── violons_libinfinitam-cpp_living_room_traj1_loop.log
│   │   ├── violons_libinfinitam-cpp_living_room_traj2_loop.log
│   │   ├── violons_libinfinitam-cpp_living_room_traj3_loop.log
│   │   ├── violons_libinfinitam-cpp_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_libinfinitam-cpp_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_libinfinitam-cpp_rgbd_dataset_freiburg2_rpy.log
│   │   ├── violons_libinfinitam-cpp_rgbd_dataset_freiburg2_xyz.log
│   │   ├── violons_libinfinitam-cuda_living_room_traj0_loop.log
│   │   ├── violons_libinfinitam-cuda_living_room_traj1_loop.log
│   │   ├── violons_libinfinitam-cuda_living_room_traj2_loop.log
│   │   ├── violons_libinfinitam-cuda_living_room_traj3_loop.log
│   │   ├── violons_libinfinitam-cuda_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_libinfinitam-cuda_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_libinfinitam-cuda_rgbd_dataset_freiburg2_rpy.log
│   │   ├── violons_libinfinitam-cuda_rgbd_dataset_freiburg2_xyz.log
│   │   ├── violons_libkfusion-cpp_living_room_traj0_loop.log
│   │   ├── violons_libkfusion-cpp_living_room_traj1_loop.log
│   │   ├── violons_libkfusion-cpp_living_room_traj2_loop.log
│   │   ├── violons_libkfusion-cpp_living_room_traj3_loop.log
│   │   ├── violons_libkfusion-cpp_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_libkfusion-cpp_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_libkfusion-cpp_rgbd_dataset_freiburg2_rpy.log
│   │   ├── violons_libkfusion-cpp_rgbd_dataset_freiburg2_xyz.log
│   │   ├── violons_libkfusion-cuda_living_room_traj0_loop.log
│   │   ├── violons_libkfusion-cuda_living_room_traj1_loop.log
│   │   ├── violons_libkfusion-cuda_living_room_traj2_loop.log
│   │   ├── violons_libkfusion-cuda_living_room_traj3_loop.log
│   │   ├── violons_libkfusion-cuda_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_libkfusion-cuda_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_libkfusion-cuda_rgbd_dataset_freiburg2_rpy.log
│   │   ├── violons_libkfusion-cuda_rgbd_dataset_freiburg2_xyz.log
│   │   ├── violons_liblsdslam-cpp_living_room_traj0_loop.log
│   │   ├── violons_liblsdslam-cpp_living_room_traj1_loop.log
│   │   ├── violons_liblsdslam-cpp_living_room_traj2_loop.log
│   │   ├── violons_liblsdslam-cpp_living_room_traj3_loop.log
│   │   ├── violons_liblsdslam-cpp_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_liblsdslam-cpp_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_liblsdslam-cpp_rgbd_dataset_freiburg2_rpy.log
│   │   ├── violons_liblsdslam-cpp_rgbd_dataset_freiburg2_xyz.log
│   │   ├── violons_liborbslam2-original_living_room_traj0_loop.log
│   │   ├── violons_liborbslam2-original_living_room_traj1_loop.log
│   │   ├── violons_liborbslam2-original_living_room_traj2_loop.log
│   │   ├── violons_liborbslam2-original_living_room_traj3_loop.log
│   │   ├── violons_liborbslam2-original_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_liborbslam2-original_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_liborbslam2-original_rgbd_dataset_freiburg2_rpy.log
│   │   └── violons_liborbslam2-original_rgbd_dataset_freiburg2_xyz.log
│   ├── utils.py
│   └── violins.py
└── scripts/
    ├── evaluate.py
    └── tum_evaluate_tools/
        ├── __init__.py
        ├── associate.py
        └── evaluate_ate.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .clang-format
================================================
---
BasedOnStyle: Google
NamespaceIndentation: All
ColumnLimit: 120
IndentWidth: 4
...


================================================
FILE: .dockerignore
================================================
docker/
bitbucket-pipelines.yml


================================================
FILE: .gitignore
================================================
# Docker files
/docker/tmp
/docker/nvidia-driver.run
docker/workspace/
framework/makefiles/benchmarks.makefile
framework/makefiles/datasets.makefile
# Build files
/build/
/install/
/android-build/

# Eclipse and other IDE files
.cproject
.project
.settings/
.idea
.pydevproject
*~

# Python
*.pyc

# Dependencies 
/deps
/android-deps/


# Ignore benchmarks folders
benchmarks/*
!benchmarks/CMakeLists.txt


# DSE Files
/opentuner.db/

# Paper results
paper/*.aux
paper/*.pdf
paper/*.tex


# Datasets

/datasets
/iros2020_results_backup
/iros2020_results
!/datasets/README.md
!/datasets/datasets.repos

# macOS
.DS_Store



================================================
FILE: .travis.yml
================================================
language: cpp
dist: trusty
sudo: required

services:
  - docker
  

script:
  - make -C docker github-docker-image
 

================================================
FILE: CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.10)

project(slambench)

# CMake variables
#######################################################
MESSAGE(STATUS CMAKE_MODULE_PATH=${CMAKE_MODULE_PATH})

SET(EXECUTABLE_OUTPUT_PATH         ${PROJECT_BINARY_DIR}/bin CACHE PATH "Build directory" FORCE)
SET(LIBRARY_OUTPUT_PATH            ${PROJECT_BINARY_DIR}/lib CACHE PATH "Build directory" FORCE)
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
SET(CMAKE_BUILD_FILES_DIRECTORY    ${PROJECT_BINARY_DIR}/bfd)
SET(CMAKE_BINARY_DIR               ${PROJECT_BINARY_DIR}/bindir)
SET(CMAKE_CACHEFILE_DIR            ${PROJECT_BINARY_DIR}/cache)
SET(CMAKE_BUILD_DIRECTORY          ${PROJECT_BINARY_DIR}/builddir)

# Most common compiler flags
#######################################################

set(GENERAL_COMPILATION_FLAGS "-g -O3 -Wall  -Wextra")

if(CMAKE_COMPILER_IS_GNUCC)
    add_definitions(-D_FILE_OFFSET_BITS=64) ## Workaround for 32 bit boards with fwrite 2G limit

    set(GENERAL_COMPILATION_FLAGS "${GENERAL_COMPILATION_FLAGS} -Wno-error=deprecated-declarations ") # Eigen raises deprecated declarations warnings and int-in-bool-context warnings.
    set(GENERAL_COMPILATION_FLAGS "${GENERAL_COMPILATION_FLAGS} -Wno-unknown-pragmas -Wno-error=deprecated-declarations -Wno-error=unused-result -Wno-error=reorder")

    if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 6.0)
        set(GENERAL_COMPILATION_FLAGS "${GENERAL_COMPILATION_FLAGS} -Wno-error=ignored-attributes -Wno-misleading-indentation")
    endif()

    if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 7.0)
        set(GENERAL_COMPILATION_FLAGS "${GENERAL_COMPILATION_FLAGS} -Wno-error=implicit-fallthrough= -Wno-int-in-bool-context ")
    endif()
endif()

if(APPLE)
    set(GENERAL_COMPILATION_FLAGS "${GENERAL_COMPILATION_FLAGS} -D__APPLE__")
endif(APPLE)

include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++2a" COMPILER_SUPPORTS_CXX20)
CHECK_CXX_COMPILER_FLAG("-std=c++17" COMPILER_SUPPORTS_CXX17)
CHECK_CXX_COMPILER_FLAG("-std=c++14" COMPILER_SUPPORTS_CXX14)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
if(COMPILER_SUPPORTS_CXX20)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++2a")
    message(STATUS "Using flag -std=c++2a")
elseif(COMPILER_SUPPORTS_CXX17)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
    message(STATUS "Using flag -std=c++17")
elseif(COMPILER_SUPPORTS_CXX14)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
    message(STATUS "Using flag -std=c++14")
elseif(COMPILER_SUPPORTS_CXX11)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
    message(STATUS "Using flag -std=c++11")
else()
    message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()

set(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS}   ${GENERAL_COMPILATION_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GENERAL_COMPILATION_FLAGS}")


# DEFINE SLAMBENCH LIBS/INCLUDES
######################################################
find_package(Eigen3 REQUIRED)

SET(SLAMBENCH_INCLUDE_DIR  ${EIGEN3_INCLUDE_DIR} ${CMAKE_SOURCE_DIR}/framework/shared/include CACHE STRING "The include paths needed to use SLAMBENCH")
SET(SLAMBENCH_LIBRARIES    slambench-utils         -Wl,--whole-archive slambench-io                slambench-metrics  -Wl,--no-whole-archive)
SET(SLAMBENCH_C_WRAPPER                            -Wl,--whole-archive slambench-c-wrapper                            -Wl,--no-whole-archive)

# SLAMBENCH FUNCTIONS 
#######################################################
if(NOT WIN32)
    string(ASCII 27 Esc)
    set(ColorReset  "${Esc}[m")
    set(Red         "${Esc}[31m")
    set(Green       "${Esc}[32m")
endif()

SET(NULL_FILE_PATH ${PROJECT_BINARY_DIR}/null.cpp)
if (NOT EXISTS ${NULL_FILE_PATH})
    file(WRITE ${NULL_FILE_PATH} "")
ENDIF()

function(explore_implementations algorithm_name implementations_path)
    set(appname ${algorithm_name})
    FILE(GLOB VERSIONS ${implementations_path})

    FOREACH(version_dir ${VERSIONS})
        IF(IS_DIRECTORY ${version_dir})
            get_filename_component(appversion ${version_dir} NAME)
            MESSAGE(STATUS "Load version ${appversion} of ${appname}.")
            ADD_SUBDIRECTORY(${version_dir})
        ENDIF()
    ENDFOREACH(version_dir)
endfunction()

function(generate_slam_binaries_only library_name )
    message(STATUS "Potential interfaces are ${SLAMBENCH_INTERFACES}...")
    FOREACH(INTERFACE ${SLAMBENCH_INTERFACES})
        message(STATUS "${Green}Generation of ${library_name}-${INTERFACE} : Activated${ColorReset}")

        add_executable(${library_name}-${INTERFACE}  ${NULL_FILE_PATH})
        target_link_libraries(${library_name}-${INTERFACE} PRIVATE ${library_name} ${INTERFACE} ${library_name})
        SET_TARGET_PROPERTIES(${library_name}-${INTERFACE} PROPERTIES LINK_FLAGS "${ARGN}")
        install(TARGETS ${library_name}-${INTERFACE}  DESTINATION  bin/)
    ENDFOREACH()
endfunction()

function(generate_slam_library library_name )

    message(STATUS "Potential interfaces are ${SLAMBENCH_INTERFACES}...")
    FOREACH(INTERFACE ${SLAMBENCH_INTERFACES})
        message(STATUS "${Green}Generation of ${library_name}-${INTERFACE} : Activated${ColorReset}")

        add_executable(${library_name}-${INTERFACE}  ${NULL_FILE_PATH})
        target_link_libraries(${library_name}-${INTERFACE} PRIVATE ${library_name} ${INTERFACE} ${library_name})
        SET_TARGET_PROPERTIES(${library_name}-${INTERFACE} PROPERTIES LINK_FLAGS "${ARGN}")
        install(TARGETS ${library_name}-${INTERFACE}  DESTINATION  bin/)
    ENDFOREACH()

    message(STATUS "${Green}Generation of ${library_name}-library : Activated${ColorReset}")
    add_library(${library_name}-library SHARED ${NULL_FILE_PATH})
    target_link_libraries(${library_name}-library PRIVATE ${SLAMBENCH_C_WRAPPER} ${library_name})
    SET_TARGET_PROPERTIES(${library_name}-library PROPERTIES LINK_FLAGS "${ARGN}")
    install(TARGETS ${library_name}-library  DESTINATION  lib/)

endfunction()

#### SUB FOLDERS ####
add_subdirectory(framework)  # SLAMBench framework
add_subdirectory(benchmarks) # Benchmarks


================================================
FILE: CONTRIBUTORS
================================================
 - Bodin Bruno
 - Mawer John
 - Melot Nicolas
 - Moldovan Adrian
 - Nardi Luigi
 - Nisbet Andy
 - Saeedi Sajad 
 - Vespa Emanuele
 - Wagstaff Harry
 - Zia M Zeeshan  


================================================
FILE: LICENSE
================================================
The MIT License (MIT)

 Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.
 Developed in the PAMELA project, EPSRC Programme Grant EP/K008730/1

Authors are (in alphabetical order): 
 - Bodin Bruno
 - Mawer John
 - Melot Nicolas
 - Moldovan Adrian
 - Nardi Luigi
 - Nisbet Andy
 - Saeedi Sajad 
 - Vespa Emanuele
 - Wagstaff Harry
 - Zia M Zeeshan  

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

The MIT license is limited to the ***PAMELA*** software.

The libraries used that are not under the same license are: 
 - Eigen3 (LGPLv3)
 - Pangolin (MIT)
 - OpenNI (Apache License 2.0)
 - PCL (3-clauses BSD)
 - PAPI (BSD)
 - Boost (Boost Software Licence)
 - libyaml (MIT)
 - LodePNG (zlib License)

The SLAM algorithms that are using SLAMbench and that can be downloaded in the "benchmark" folder have the following licences:
 - OKVIS  (BSD 3-Clause)
 - KFusion: (MIT License)
 - LSDSLAM (GPLv3)
 - orbslam2 (GPLv3)
 - PTAM (GPLv3)
 - SVO (GPLv3)
 - monoslam (Custom permissive licence)
 - ElasticFusion (Elastic Fusion license)
 - InfiniTAM (Oxford/Isis licence)

Several of those SLAM systems include third-party libraries:
 - Sophus (MIT)
 - vikit_common (no licence file found)

The additionnal dependencies used by those algorithms are that can be downloaded in the "deps" folder have the following licences:
 - OpenCV (BSD)
 - G2O (BSD)
 - BRISK (BSD)
 - CVD (two-clause BSD)
 - Flann (BSD)
 - gvars (BSD)
 - opengv (BSD)
 - TooN (2-clause BSD)
 - suitesparse (3-clause BSD)
 


================================================
FILE: Makefile
================================================
ECHO=/bin/echo
#SHELL := /bin/bash
WGET:=wget
GET_REPLY:=read REPLY
ifeq ("${SBQUIET}","1")
GET_REPLY:=REPLY="y"
WGET:=wget -q
endif

BoldGreen=\033[1;32m
BoldRed=\033[1;31m
ColorOff=\033[0m

#### SLAMBENCH INFOS ####
infos:
	@${ECHO} -e "\n*** SLAMBench is an evaluation framework for SLAM algorithms. *** "
	@${ECHO} -e "\n\
	  (1) First, several dependencies are needed to compile SLAMBench and its use-cases.\n\
	      We suggest that you to download and install them automatically using the following command:\n\
     ${BoldGreen} - make deps ${ColorOff}\n\
	  (2) Then, to compile the SLAMBench framework you just need to type:\n\
	     ${BoldGreen} - make slambench ${ColorOff}\n\
	  (3) SLAMBench integrates a number of algorithms, however they are not directly distribute with the framework\n\
	      To download and build all the available algorithms, use:\n\
	     ${BoldGreen} - make algorithms${ColorOff}\n\
	      Alternatively, to see the list of available algorithms, use:\n\
	     ${BoldGreen} - make usecases ${ColorOff}\n\
	  (4) For information about downloading and building one of the available datasets, use:\n\
	     ${BoldGreen} - make datasetslist ${ColorOff}\n\
	  (5) Once the desired datasets and algorithms were built, you can run the benchmark using:\n\
	     ${BoldGreen} - ./build/bin/slambench -i path/to/dataset.slam -load path/to/algorithm-library.so ${ColorOff}\n\
	"

#### Dependencies ####
include ./framework/makefiles/deps.makefile

#### Compilation targets ####
build/Makefile : framework/CMakeLists.txt
	mkdir -p build/
	${DEPS_ENV} cmake -U * -Bbuild -H.  -DAPPS="${APPS}"  ${DEPS_ARGS} -D"CMAKE_MODULE_PATH:PATH=${ROOT_DIR}/cmake_modules" ..

slambench: build/Makefile
	$(MAKE) -C build $(MFLAGS)
	@echo ""
	@echo "================================================================================================================="
	@echo "The SLAMBench library should have been compiled, you will find binaries in build/bin, and libraries in build/lib."
	@echo ""
	@echo "Tools/Debugger available: "
	@echo -n "  - build/bin/slambench:          " ; if [ -f build/bin/slambench ] ; then echo -e "${BoldGreen}Found${ColorOff}" ; else echo -e "${BoldRed}Not found (Missing dependencies?)${ColorOff}" ; fi
	@echo -n "  - build/bin/pointcloud_aligner: " ; if [ -f build/bin/pointcloud_aligner ] ; then echo -e "${BoldGreen}Found${ColorOff}" ; else echo -e "${BoldRed}Not found (Missing dependencies (i.e. pcl)?)${ColorOff}" ; fi
	@echo -n "  - build/bin/dataset-generator:  " ; if [ -f build/bin/dataset-generator ] ; then echo -e "${BoldGreen}Found${ColorOff}" ; else echo -e "${BoldRed}Not found (Missing dependencies?)${ColorOff}" ; fi
	@echo -n "  - build/bin/io-inspect-file:    " ; if [ -f build/bin/io-inspect-file ] ; then echo -e "${BoldGreen}Found${ColorOff}" ; else echo -e "${BoldRed}Not found (Missing dependencies?)${ColorOff}" ; fi
	@echo -n "  - build/bin/io-readply:         " ; if [ -f build/bin/io-readply ] ; then echo -e "${BoldGreen}Found${ColorOff}" ; else echo -e "${BoldRed}Not found (Missing dependencies?)${ColorOff}" ; fi
	@echo ""
	@echo "The list of current algorithms available is:"
	@echo ""                                                                      
	@for f in `ls build/lib/lib*-library.so 2> /dev/null || echo Nothing` ; do echo $$f ; done
	@echo ""
	@echo "The list of current filters available is:"
	@echo ""
	@for f in `ls build/lib/lib*-filter.so 2> /dev/null || echo Nothing` ; do echo $$f ; done
	@echo ""
	@echo "As a next step we suggest you to run \"make usecases\" or \"make slambench APPS=all\"."

.PHONY: build/Makefile

#### Benchmarks ####
framework/makefiles/benchmarks.makefile : framework/makefiles/download_benchmarks.py benchmarks/benchmarks.json
	python $^ > $@
include framework/makefiles/benchmarks.makefile

#### Datasets ####
framework/makefiles/datasets.makefile : framework/makefiles/download_datasets.py datasets/datasets.repos
	python $^ > $@
include framework/makefiles/dataset-utils.makefile
include framework/makefiles/datasets.makefile

.PHONY: slambench benchmarks datasets

#### ORBSLAM Voc ####
./benchmarks/orbslam2/src/original/Vocabulary/ORBvoc.txt : ./benchmarks/orbslam2/src/original/Vocabulary/ORBvoc.txt.tar.gz
	cd ./benchmarks/orbslam2/src/original/Vocabulary/ && tar -xf ORBvoc.txt.tar.gz

#### CLEAN TOOLS ####
clean :
	rm -rf build install android-build android-install docker/tmp/

cleandatasets :
	find datasets/ | grep [.]slam | xargs rm 2> /dev/null || true
	@echo "Datasets cleaned"

cleandeps :
	rm -rf deps

cleanall : clean cleandatasets cleandeps

.PHONY: clean cleandeps cleandatasets cleanall

#### DEMO PART ####
demo-prepare :
	make slambench APPS=all
	make datasets/ICL_NUIM/living_room_traj2_loop.slam
	make datasets/EuRoCMAV/machine_hall/MH_01_easy/MH_01_easy.slam
	make datasets/TUM/freiburg2/rgbd_dataset_freiburg2_desk.slam

demo-droneflight :
	$(MAKE) open_vins $(MFLAGS)
	$(MAKE) slambench APPS=open_vins $(MFLAGS)
	$(MAKE) datasets/UZHFPV/indoor_forward_3_snapdragon_with_gt.slam $(MFLAGS)
	@echo "You can now run ${BoldGreen}./build/bin/slambench -i datasets/UZHFPV/indoor_forward_3_snapdragon_with_gt.slam -load build/lib/libopen_vins-original-library.so${ColorOff}"

demo-lib :
	clear
	@${ECHO} -e "                        "
	@${ECHO} -e " ======================="
	@${ECHO} -e " Pick gui and whether to use lifelong SLAM mode: "
	@${ECHO} -e " ./build/bin/slambench -gui <false|true> -lifelong <false|true>"
	@${ECHO} -e " ======================="
	@${ECHO} -e " Pick dataset           "
	@${ECHO} -e "                        "
	@for d in `find datasets/ | grep [.]slam` ; do ${ECHO} " -i $$d" ; done
	@${ECHO} -e "                        "
	@${ECHO} -e " ======================="
	@${ECHO} -e " Pick libraries          "
	@${ECHO} -e "   *  may requires parameters"
	@${ECHO} -e "   *  do not need to be open source"
	@${ECHO} -e " ======================="
	@${ECHO} -e "                        "
	@for d in `find  build/lib/| grep [-]library[.]so` ; do ${ECHO} " -load $$d" ; done
	@${ECHO} -e "                        "
	@${ECHO} -e "                        "
	@${ECHO} -e " ======================="

.PHONY: demo-droneflight demo-lib demo-prepare
#### TESTS ####
regression_test :
	make -C docker fastCI-docker-image # First test compilation of slambench and run kfusion
	make -C docker ubuntu-14.04-docker-image # Second compilation for embedded systems such as Odroid or TK1
# third run slambench for multiple datasets and check ATE and Memory usage

test :
	make -C docker fastCI-docker-image


================================================
FILE: README.md
================================================
# SLAMBench 

[![Build Status](https://travis-ci.org/pamela-project/slambench2.svg?branch=master)](https://travis-ci.org/pamela-project/slambench2)

Code has been added for the most recent paper based on SLAMBench:

[Robust SLAM Systems: Are We There Yet?](https://arxiv.org/abs/2109.13160) \
https://robustslam.github.io/evaluation

## Contents

* [What is SLAMBench?](#what-is-slambench)
* [How to set up SLAMBench?](#how-to-set-up-slambench)
* [What algorithms does SLAMBench support?](#what-algorithms-does-slambench-support)
* [How to run an existing algorithm with SLAMBench?](#how-to-run-an-existing-algorithm-with-slambench)
* [How to add a new benchmark in SLAMBench?](#how-to-add-a-new-benchmark-in-slambench)
* [Known Issues](#known-issues)
* [Release History](#release-history)

## Most frequent questions ##

### Where are the algorithms ? ###

Use the following command to list all available algorithms:

```
make usecases
```

## What is SLAMBench? ##

SLAMBench is a SLAM performance benchmark that combines a framework for quantifying quality-of-result with instrumentation of accuracy, execution time, memory usage and energy consumption. It also include a graphical interface to visualize these information.

SLAMBench offers a platform for a broad spectrum of future research in jointly exploring the design space of algorithmic and implementation-level optimisations. It targets desktop, laptop, mobile and embedded platforms. Some of the benchmarks (in particular KFusion) were tested on Ubuntu, OS X and Android (more information about android here [https://github.com/bbodin/slambench-android](https://github.com/bbodin/slambench-android)).

SLAMBench currently supports the following algorithms:

* ORB-SLAM3 [Campos et al, ARXIV'20]: C++ as distributed by https://github.com/UZ-SLAMLab
* ReFusion [Palazollo et al. IROS'19]: CUDA as distributed by https://github.com/PRBonn
* OpenVINS [Geneva et al. IROS'19]: C++ as distributed by https://github.com/rpng/
* Supereight [Vespa et al. RA-L'18]: C++, OpenMP as distributed by https://github.com/emanuelev
* BundleFusion [Dai et al. ACM TOG'17]: CUDA as distributed by https://github.com/niessner
* SemanticFusion [McCormac et al. ICRA'17]: CUDA as distributed by https://github.com/seaun163
* ORB-SLAM2 [Mur-Artal et al, TOR'15 and TOR'17]: C++ as distributed by https://github.com/raulmur
* DSO [Engel et al. Arxiv'16]: C++ as distributed by https://github.com/JakobEngel
* ElasticFusion [Whelan et al, IJRR'16]: CUDA as distributed by https://github.com/mp3guy
* InfiniTAMv2 [Kahler et al, ISMAR'15]: C++, OpenMP and CUDA versions as distributed by https://github.com/victorprad/
* KinectFusion [Newcombe et al. ISMAR'11]: C++, OpenMP, OpenCL and CUDA inspired by https://github.com/GerhardR
* LSDSLAM [Engel et al, ECCV'14]: C++, and threaded as distributed by https://github.com/tum-vision/ and modified by https://github.com/mp3guy
* MonoSLAM [Davison et al, TPAMI'07]: Original version as distributed by https://github.com/hanmekim/
* OKVIS [Leutenegger et al, IJRR'15]: Original version as distributed by https://github.com/ethz-asl
* PTAM [Klein et al, ISMAR'07 and ECCV'08]: Original version as distributed by https://github.com/Oxford-PTAM/
* SVO [Forster et al, ICRA'14]: Original version as distributed by https://github.com/uzh-rpg/rpg_svo/ (a more recent version available at http://rpg.ifi.uzh.ch/svo2.html)

**IMPORTANT: If you use any of those algorithms in scientific publications, you should refer to the respective publications.**

In addition, if you use SLAMBench in scientific publications, we would appreciate citations to the following papers:
```

@inproceedings{bujanca2021robust,  
  author={Bujanca, Mihai and Shi, Xuesong and Spear, Matthew and Zhao, Pengpeng and Lennox, Barry and Luj{\'a}n, Mikel},
  booktitle={2021 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)},
  title={Robust SLAM Systems: Are We There Yet?},
  year={2021},
  doi={10.1109/IROS51168.2021.9636814}
}

@inproceedings{bujanca2019slambench,
  title={SLAMBench 3.0: Systematic automated reproducible evaluation of SLAM systems for robot vision challenges and scene understanding},
  author={Bujanca, Mihai and Gafton, Paul and Saeedi, Sajad and Nisbet, Andy and Bodin, Bruno and O'Boyle, Michael FP and Davison, {Andrew J} and Kelly, {Paul H.J.} and Riley, Graham and Lennox, Barry and Luj{\'a}n, Mikel and Furber, Steven},
  booktitle={2019 International Conference on Robotics and Automation (ICRA)},
  pages={6351--6358},
  year={2019},
  organization={IEEE}
}

@inproceedings{Bodin2018,
author    = "Bruno Bodin and Harry Wagstaff and Sajad Saeedi and Luigi Nardi and Emanuele Vespa and Mayer, {John H} and Andy Nisbet and Mikel Luj{\'a}n and Steve Furber and Davison, {Andrew J} and Kelly, {Paul H.J.} and Michael O'Boyle",
title     = "SLAMBench2: Multi-Objective Head-to-Head Benchmarking for Visual SLAM",
booktitle = "{IEEE Intl. Conf. on Robotics and Automation (ICRA)}",
year = {2018},
month = {May}
}

@inproceedings{Nardi2015,
  title={Introducing SLAMBench, a performance and accuracy benchmarking methodology for SLAM},
  author={Nardi, Luigi and Bodin, Bruno and Zia, M Zeeshan and Mawer, John and Nisbet, Andy and Kelly, Paul HJ and Davison, Andrew J and Luj{\'a}n, Mikel and O'Boyle, Michael FP and Riley, Graham and others},
  booktitle={2015 IEEE international conference on robotics and automation (ICRA)},
  pages={5783--5790},
  year={2015},
  organization={IEEE}
}
```

## How to set up SLAMBench?

As SLAMBench deals with multiple SLAM algorithms, dependencies might be difficult to install on any systems.
To ease the usage of SLAMBench we provide auto-installation of dependencies and recommend the use fresh installation of Ubuntu 18/20 or Fedora 24-29.
### Dependency installation

#### Required by SLAMBench framework
* CMake 2.8.11 or higher is required.
* Make
* GCC C/C++
* Boost (Optional)
* GLUT (Optional)

#### Required by benchmarks and datasets
* Git
* Mercurial
* wget
* unzip
* lapack
* blas
* findutils
* cvs
* glog
* gflags
* p7zip

#### To install them

With Fedora 29: `dnf install -y yaml-cpp-devel gtk2-devel mesa-libEGL-devel vtk-devel cmake make git mercurial wget unzip gcc gcc-c++ lapack blas lapack-devel blas-devel findutils  cvs  glut-devel glew-devel boost-devel glog-devel gflags-devel libXmu-devel p7zip`

With Fedora 24:
```dnf install -y gtk2-devel vtk-devel cmake make git mercurial wget unzip gcc gcc-c++ lapack blas lapack-devel blas-devel findutils  cvs  glut-devel glew-devel boost-devel glog-devel gflags-devel libXmu-devel```

With Ubuntu 20.04:
``` apt-get -y install libvtk6.3 libvtk6-dev unzip libflann-dev wget mercurial git gcc g++ cmake python-numpy freeglut3 freeglut3-dev libglew-dev libglu1-mesa libglu1-mesa-dev libgl1-mesa-glx libgl1-mesa-dev libxmu-dev libxi-dev  libboost-all-dev cvs libgoogle-glog-dev libatlas-base-dev gfortran  gtk2.0 libgtk2.0-dev  libyaml-dev build-essential libyaml-cpp-dev ```

With Ubuntu 18.04:
``` apt-get -y install libvtk6.3 libvtk6-dev unzip libflann-dev wget mercurial git gcc g++ cmake python-numpy freeglut3 freeglut3-dev libglew-dev libglu1-mesa libglu1-mesa-dev libgl1-mesa-glx libgl1-mesa-dev libxmu-dev libxi-dev libboost-all-dev cvs libgoogle-glog-dev libatlas-base-dev gfortran gtk2.0 libgtk2.0-dev  libyaml-dev build-essential libyaml-cpp-dev ```

#### Special requirements for CUDA

To run the CUDA implementation of some of the algorithms, you will need extra dependencies.

With Ubuntu: `apt-get -y install nvidia-cuda-toolkit clinfo`

With Fedora: `yum install cuda`

### Compilation of SLAMBench and its benchmarks

#### 1. Dependencies

Install dependencies first [NOTE can be installed by the user on its system as well]:

```bash
make deps
```
The idea is to maximise the chance of a good build, by selection the best cocktail of libraries.
This will download and compile the following applications: Brisk, Ceres, CVD, Eigen3, Flann, FreeImage, G2O, Gvars, OpenCV, OpenGV, OpenTuner, Pangolin, PCL, Suitesparse, TooN.

You can also install each ofthese individually, using the commands such as: `eigen3`, `flann`, `g2o`, `opencv`, `opengv`, `pcl`, `toon`, `suitesparse`, ...

more information is available in the `framework/makefiles/README.md` file.

#### 2. SLAMBench Framework

SLAMBench is a framework that can be compiled by simply running:

```bash
make slambench
```

Although, by doing this, you only compile the libraries of SLAMBench.

#### 3. Usecases

To download use-cases, there are specific target named after the type of algorithm you need to test:

```bash
make kfusion lsdslam
```

Then to compile these specific use-case, you will need to specify identifiers together with the slambench target:

```bash
make slambench APPS=kfusion,lsdslam
```

The current benchmarks identifiers are efusion, infinitam, kfusion, lsdslam, monoslam, okvis, ptam, orbslam2, svo.
You will find more information to download and compile use-cases with the `make usecases` command.

#### 4. Datasets

To test a SLAM algorithm you can use a Live camera, or a dataset. 
SLAMBench provides tools to automatically download some of the most popular datasets, that is ICL-NUIM and TUM RGB-D. 
The file format (*.slam) will then include all the most important information about the dataset, those are **Camera calibration setting**, **initial position of the sensors**, and the **ground truth**.

As an example to download and generate the Living Room Trajectory 2 from the ICLNUIM dataset, you can run the following :

```bash
> make datasets/ICL_NUIM/living_room_traj2_loop.slam
```

SLAMBench currently supports the following datasets:

* OpenLORIS [Shi et al, ICRA'20]: Lifelong SLAM dataset
* Bonn Dynamic [Palazollo et al. IROS'19]: Dynamic scene dataset
* UZH-FPV [Delmerico et al. ICRA'19]: Drone racing dataset
* ETH Illumination [Park et al, ICRA'17]: Illumination changes dataset
* VolumeDeform [Innmann et al, ECCV'16]: Non-rigid reconstruction
* EuRoC MAV [Burri et al, IJRR'16]: Micro Aerial Vehicle dataset
* ICL-NUIM [Handa et al, ICRA'14]: Synthetic dataset
* TUM RGB-D [Sturm et al, IROS'12]: A standard SLAM benchmark
A complete list of the datasets available is provided by the command `make datasets`.

## What algorithms does SLAMBench support?

SLAMBench is already compatible with a wide range of algorithms which are not included in this repository (see [above](#what-is-slambench) for list of algorithms).

However you can easily integrate those algorithms using the command:

```bash
make usecases
```

This command will explain in details how to integrate algorithms that are already compatible with SLAMBench.

## How to run an existing algorithm with SLAMBench?

Once you have compiled a benchmark, there are several ways to run it.
For each implementation of this benchmark, you will find a specific library. 
As an example, with KinectFusion, after running `make slambench APPS=kfusion`, you may find the following libraries in the `build/lib` directory :

```bash
> ls build/lib/libkfusion-*-library.so

build/lib/libkfusion-cpp-library.so   
build/lib/libkfusion-notoon-library.so      
build/lib/libkfusion-openmp-library.so
build/lib/libkfusion-cuda-library.so  
build/lib/libkfusion-opencl-library.so
```

We can see five different implementations (cpp, notoon, and openmp, cuda and opencl). The list of available binaries depends of the dependencies you installed beforehand. For example, you need CUDA to compile the kfusion-cuda. A complete list of the dependencies is available at the end of this README.

### Running a benchmark (e.g. KinectFusion)

To run one algorithm you will need to use a **loader**. 
There are three different loaders supported, **benchmark**, **pangolin**, and **lifelong**.
The first two loaders are used the same way, except that **benchmark** is a command line application dedicated to measurements, while **pangolin** is a graphical user interface less precise in term of measurement but which provide a good interface for demonstrations. The **lifelong** loader can take multiple input (multiple .slam files following the -i option, separated by ',') which will be sent to the benchmark one by one. Other than that it is similar to the **benchmark** loader. There is currently no loader both supporting loading multiple input and having a graphical user interface.


Each loader has a series of parameters to specify such as the dataset location, or the libraries to run. 
The list of those parameters is available by using the "--help" parameters.

```bash
> ./build/bin/benchmark_loader --help 
== SLAMBench Configuration ==
Available parameters :
-fl            --frame-limit           : last frame to compute (Default=0)
-o             --log-file              : Output log file (Default=)
-i             --input                 : Specify the input file or mode. (Default=)
-load          --load-library          : Load a specific SLAM library. (Default=)
-dse           --dse                   : Output solution space of parameters. (Default=false)
-h             --help                  : Print the help. (Default=false)
-nf            --negative-focal-length : negative focal length (Default=false)
-realtime      --realtime-mode         : realtime frame loading mode (Default=false)
-realtime-mult --realtime-multiplier   : realtime frame loading mode (Default=1)
-fo            --file-output           : File to write slamfile containing outputs (Default=)
```


Then if you run the loader again, while providing a dataset file `-i dataset.slam`, you will see new parameters dedicated to the dataset: 


```bash
> ./build/bin/benchmark_loader -i datasets/ICL_NUIM/living_room_traj2_loop.slam --help
== SLAMBench Configuration ==
Available parameters :
....
-Camera-intrisics --Camera-intrisics       : (Default=nullptr  Current=0.751875,1,0.4992185,0.4989583)
-Depth-intrisics  --Depth-intrisics        : (Default=nullptr  Current=0.751875,1,0.4992185,0.4989583)
-Depth-dip        --Depth-disparity-params : (Default=nullptr  Current=0.001,0)
-Camera-intrisics --Camera-intrisics       : (Default=nullptr  Current=0.751875,1,0.4992185,0.4989583)
```

Finally is you add a library name `-load libname`, more parameter can be seen: 

```bash
> ./build/bin/benchmark_loader -i datasets/ICL_NUIM/living_room_traj2_loop.slam -load ./build/lib/libkfusion-cpp-library.so  --help
== SLAMBench Configuration ==
Available parameters :

....

-c                --compute-size-ratio     : Compute ratio (Default=1)
-r                --integration-rate       : integration-rate  (Default=2)
-t                --tracking-rate          : tracking-rate     (Default=1)
-z                --rendering-rate         : rendering-rate    (Default=4)
-l                --icp-threshold          : icp-threshold     (Default=1e-05)
-m                --mu                     : mu                (Default=0.1)
-s                --volume-size            : volume-size       (Default=8,8,8)
-d                --volume-direction       : volume-direction  (Default=4,4,4)
-v                --volume-resolution      : volume-resolution (Default=256,256,256)
-y1               --pyramid-level1         : pyramid-level1    (Default=10)
-y2               --pyramid-level2         : pyramid-level2    (Default=5)
-y3               --pyramid-level3         : pyramid-level3    (Default=4)
```


You can run a loader with **only one dataset** at a time and **it must be specified first**.

In the next section we will explain how to use SLAMBench to evaluate the performance of a SLAM algorithm.

### Evaluating a benchmark (eg. KinectFusion)

SLAMBench works with Metrics and Outputs elements. 
When you run the ```benchmark_loader``` or the ```pangolin_loader``` or the ```lifelong_loader``` these are those elements that you can visualize.
Metrics are components generated by SLAMBench framework really, while Outputs are generated by the algorithm or may be elements post-processed by SLAMBench (such as the aligned trajectory with the ground truth).

Let us run the benchmark loader. Its output is composed of two main parts, the `Properties` section, and the `Statistics` section. 
the properties section details all the parameters used for the experiment (could been changed or not via the command line). 
the statistics section report all the outputs and metrics selection for output in the benchmark loader.

```bash
> ./build/bin/benchmark_loader -i datasets/ICL_NUIM/living_room_traj2_loop.slam -load ./build/lib/libkfusion-cpp-library.so 

SLAMBench Report run started:	2018-02-02 04:41:31

Properties:
=================

frame-limit: 0
log-file: 
input: datasets/ICL_NUIM/living_room_traj2_loop.slam
load-library: ./build/lib/libkfusion-cpp-library.so
dse: false
help: false
negative-focal-length: false
realtime-mode: false
realtime-multiplier: 1
file-output: 
Camera-intrisics: 0.751875,1,0.4992185,0.4989583
Depth-intrisics: 0.751875,1,0.4992185,0.4989583
Depth-disparity-params: 0.001,0
Camera-intrisics: 0.751875,1,0.4992185,0.4989583
compute-size-ratio: 1
integration-rate: 2
tracking-rate: 1
rendering-rate: 4
icp-threshold: 1e-05
mu: 0.1
volume-size: 8,8,8
volume-direction: 4,4,4
volume-resolution: 256,256,256
pyramid-level1: 10
pyramid-level2: 5
pyramid-level3: 4
Statistics:
=================

Frame Number	Timestamp	Duration_Frame	GPU_Memory	CPU_Memory		Duration_Preprocessing	Duration_Tracking	Duration_Integration	Duration_Raycasting	Duration_Render	X	Y	ZATE_Frame
1	0.0000000000	0.7679200000	0	623801799		0.1254800000	0.0195420000	0.0561620000	0.0000030000	0.5667170000	4.0000000000	4.0000000000	4.0000000000	0.0000002980
2	1.0000000000	0.2003970000	0	623801799		0.1242030000	0.0156470000	0.0581670000	0.0000000000	0.0023710000	4.0000000000	4.0000000000	4.0000000000	0.0010031639
3	2.0000000000	0.1989980000	0	623801799		0.1233680000	0.0152360000	0.0580180000	0.0000000000	0.0023690000	4.0000000000	4.0000000000	4.0000000000	0.0055015362
4	3.0000000000	0.7518580000	0	623801799		0.1220660000	0.0152080000	0.0563070000	0.5559520000	0.0023170000	4.0000000000	4.0000000000	4.0000000000	0.0036504765
5	4.0000000000	1.3683420000	0	623801799		0.1240890000	0.0767240000	0.0581630000	0.5504240000	0.5589330000	3.9957129955	4.0020360947	4.0009112358	0.0021276891
...
```

## How to add a new benchmark in SLAMBench?

The main reason to provide a new version of SLAMBench is not only because of the introduction of new benchmarks but also because we provide now 
a clear and specific API for SLAM algorithms to be implemented in order to add a new algorithm.

```
bool sb_new_slam_configuration(SLAMBenchLibraryHelper * slam_settings);
bool sb_init_slam_system(SLAMBenchLibraryHelper * slam_settings);
bool sb_update_frame(SLAMBenchLibraryHelper * slam_settings, slambench::io::SLAMFrame * type);
bool sb_process_once(SLAMBenchLibraryHelper * slam_settings);
bool sb_relocalize(SLAMBenchLibraryHelper * slam_settings);
bool sb_update_outputs(SLAMBenchLibraryHelper *lib, const slambench::TimeStamp *latest_output);
bool sb_clean_slam_system();
bool sb_update_outputs(SLAMBenchUI *);
```

**If each of those functions are correctly implemented for a specific implementation of a specific algorithm, then this algorithm is compatible with SLAMBench and can be evaluated as well.**

In this section we will present those functions one by one.

### bool sb\_new\_slam\_configuration(SLAMBenchLibraryHelper * slam\_settings)

This function is called first, and only once, SLAM systems is expected to provide its parameters.

Example :

```cpp
bool sb_new_slam_configuration(SLAMBenchLibraryHelper * slam_settings)  {
	slam_settings->addParameter(TypedParameter<float>("c", "confidence",    "Confidence",   &confidence,    &default_confidence));
	slam_settings->addParameter(TypedParameter<float>("d", "depth",         "Depth",        &depth,         &default_depth));
	slam_settings->addParameter(TypedParameter<int>  ("td", "textureDim",   "textureDim",   &textureDim,    &default_textureDim));
	return true;
}
```

should always return `true` or an exception will be raised.


### bool sb\_init\_slam\_system(SLAMBenchLibraryHelper * slam\_settings)

This function is called second, and only once, SLAM systems is expected to allocate memory, retrieve sensor informations.


To retrieve sensor there is `SensorFinder`:
```cpp
slambench::io::CameraSensorFinder sensor_finder;
auto rgb_sensor = sensor_finder.FindOne(slam_settings->get_sensors(), {{"camera_type", "rgb"}});
```

SLAM systems are also expected to define there output, there is one mandatory output, the pose:

```cpp
pose_output = new slambench::outputs::Output("Pose", slambench::values::VT_POSE, true);
slam_settings->GetOutputManager().RegisterOutput(pose_output);
```
should always return `true` or an exception will be raised.

### bool sb_update_frame (SLAMBenchLibraryHelper *slam_settings, slambench::io::SLAMFrame *frame)

Algorithms receive frames ordered by timestamp.
When `sb_update_frame` returns `false`, `sb_update_frame` will be directly called again with the next frame, if it returns `true`, `sb_process_once` will be called once.

### bool sb_process_once (SLAMBenchLibraryHelper *slam_settings)

Should always return `true` or an exception will be raised.

### bool sb_relocalize (SLAMBenchLibraryHelper *slam_settings)

This is newly introduced to support lifelong SLAM evaluation. It will be called when the input sequence has been switched to the next one. The implementation is expected to explicitly trigger tracking lost and invoke the algorithm's re-localization procedure (if there be). It should return whether the relocalization is sucessful from the algorithm's perspective.

For backward compatibility, this function is allowed to be unimplemented in a benchmark. In such cases, the ```sb_process_once``` function will be called in a re-localization situation.

### bool sb_clean_slam_system()

This function is called last, and only once, SLAM systems is expected to clean everything (free memory).

```cpp
bool sb_clean_slam_system() {
	delete eFusion;
	delete inputRGB;
	delete inputDepth;
	return true;
}
```

should always return `true` or an exception will be raised.

### bool sb_update_outputs(SLAMBenchLibraryHelper *slam_settings, const slambench::TimeStamp *timestamp) 

The algorithm will return visible outputs (Pose, Point cloud, Frames) as defined by the `sb_init_slam_system` function.

Example :

```cpp
bool sb_update_outputs(SLAMBenchLibraryHelper *lib, const slambench::TimeStamp *ts_p) {
slambench::TimeStamp ts = *ts_p;

if(pose_output->IsActive()) {
	// Get the current pose as an eigen matrix
	Eigen::Matrix4f mat = eFusion->getCurrPose();

	std::lock_guard<FastLock> lock (lib->GetOutputManager().GetLock());
	pose_output->AddPoint(ts, new slambench::values::PoseValue(mat));
}
```

should always return `true` or an exception will be raised.

## Known Issues

### KFusion CUDA version

KFusion CUDA requires GCC 4.9 to work. To specify a new gcc compiler for CUDA only, you can use the `CUDA_HOST_COMPILER` flag as follows :

```bash
make slambench APPS=kfusion CUDA_HOST_COMPILER=$(which gcc-4.9)
```

Modern O.S. are now using more recent version of this compiler, this may introduce several compatibility issues.
To fix one of them, in the compilation process, when compiling CUDA application we use the ` -D_GLIBCXX_USE_CXX11_ABI=0 ` flag.

## Release History
Version 4.0 (Oct 2021)
- Robustness evaluation

Version 3.0 (May 2019)
- Depth estimation 
- Dynamic reconstruction
- Semantic reconstruction

Version 2.0 (Feb 2018)

* This release is a complete new version

Release candidate 1.1 (17 Mar 2015)

* Bugfix : Move bilateralFilterKernel from preprocessing to tracking
* Bugfix : Wrong interpretation of ICP Threshold parameter.
* Esthetic : Uniformisation of HalfSampleRobustImage kernel
* Performance : Change float3 to float4 for the rendering kernels (No effect on OpenCL, but high performance improvement with CUDA)
* Performance : Add a dedicated buffer for the OpenCL rendering
* Feature : Add OSX support

Release candidate 1.0 (12 Nov 2014)

* First public release

Copyright (c) 2014-2021 University of Edinburgh, Imperial College, University of Manchester.
Developed in the PAMELA project, EPSRC Programme Grant EP/K008730/1 and

The RAIN Hub, funded by the Industrial Strategy Challenge Fund,
part of the UK government’s modern Industrial Strategy. The fund is
delivered by UK Research and Innovation and managed by EPSRC [EP/R026084/1].


================================================
FILE: _config.yml
================================================
theme: jekyll-theme-cayman

================================================
FILE: benchmarks/CMakeLists.txt
================================================
#######################################################
# This file is the CMAKE script for Benchmarks Libraries
#######################################################
cmake_minimum_required(VERSION 3.10)

project(benchmarks)
if (NOT SLAMBENCH_INCLUDE_DIR)
  message( FATAL_ERROR "SLAMBENCH_INCLUDE_DIR not found")
  else ()
  include_directories(${SLAMBENCH_INCLUDE_DIR})
endif()

## EXTERNAL SOURCE CODE, SKIP WARNINGS ....
############################################################
set(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS}    -Wno-error")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}  -Wno-error")

#### ADD USE-CASES DIRECTORIES ###
############################################################
if ("${APPS}" STREQUAL "all")
    message(STATUS "Select all applications...")
    set(APPS_MOD "efusion;kfusion;lsdslam;monoslam;infinitam;ptam;okvis;orbslam2;orbslam3;svo;flame,refusion,kinectfusion,dso,fullfusion")
else()
    message(STATUS "Select only ${APPS} applications...")
    string(REPLACE "," ";" APPS_MOD "${APPS}")     
endif()  

set(app_list ${APPS_MOD})
  MESSAGE(STATUS "Application loop over ${APPS_MOD}")
FOREACH(app ${app_list})
    IF(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${app}")
      MESSAGE(STATUS "Load application ${app}")
      ADD_SUBDIRECTORY(${app})
    ELSE()
      MESSAGE(STATUS "Use-case ${app} not found. Please try \" make ${app} \" to download the usecase.")
    ENDIF()
ENDFOREACH(app)


================================================
FILE: cmake_modules/CUDACheckCompute.cmake
================================================
#############################
#Sourced from:
#https://raw.githubusercontent.com/jwetzl/CudaLBFGS/master/CheckComputeCapability.cmake
#############################
# Check for GPUs present and their compute capability
# based on http://stackoverflow.com/questions/2285185/easiest-way-to-test-for-existence-of-cuda-capable-gpu-from-cmake/2297877#2297877 (Christopher Bruns)

if(CUDA_FOUND)
    message(STATUS "Try to compile and run : ${PROJECT_SOURCE_DIR}/cmake/cuda_compute_capability.c")
    try_run(RUN_RESULT_VAR COMPILE_RESULT_VAR
        ${CMAKE_BINARY_DIR}
        ${CMAKE_SOURCE_DIR}/cmake_modules/cuda_compute_capability.c
        CMAKE_FLAGS
        -DINCLUDE_DIRECTORIES:STRING=${CUDA_TOOLKIT_INCLUDE}
        -DLINK_LIBRARIES:STRING=${CUDA_CUDART_LIBRARY}
        COMPILE_OUTPUT_VARIABLE COMPILE_OUTPUT_VAR
        RUN_OUTPUT_VARIABLE RUN_OUTPUT_VAR)
    message(STATUS "Compile: ${RUN_OUTPUT_VAR}")
    if (COMPILE_RESULT_VAR)
        message(STATUS "compiled -> " ${RUN_RESULT_VAR})
    else()
        message(STATUS "didn't compile")
    endif()
    # COMPILE_RESULT_VAR is TRUE when compile succeeds
    # RUN_RESULT_VAR is zero when a GPU is found
    if(COMPILE_RESULT_VAR AND NOT RUN_RESULT_VAR)
        message(STATUS "worked")
        set(CUDA_HAVE_GPU TRUE CACHE BOOL "Whether CUDA-capable GPU is present")
        set(CUDA_COMPUTE_CAPABILITY ${RUN_OUTPUT_VAR} CACHE STRING "Compute capability of CUDA-capable GPU present")
        mark_as_advanced(CUDA_COMPUTE_CAPABILITY)
    else()
        message(STATUS "didn't work")
        set(CUDA_HAVE_GPU FALSE CACHE BOOL "Whether CUDA-capable GPU is present")
    endif()
endif()


================================================
FILE: cmake_modules/FindBrisk.cmake
================================================

find_path(BRISK_INCLUDE_PATH Brisk/Brisk.h
	~/usr/include
	~/usr/.local/include
	~/.local/include
	~/usr/local/include
	/usr/include
	/usr/local/include
	thirdparty
)

if(BRISK_INCLUDE_PATH)
	set(BRISK_FOUND TRUE)
	set(BRISK_INCLUDE_PATHS ${BRISK_INCLUDE_PATH} CACHE STRING "The include paths needed to use BRISK")
endif()

mark_as_advanced(
	BRISK_INCLUDE_PATHS
)


# Generate appropriate messages
if(BRISK_FOUND)
    if(NOT BRISK_FIND_QUIETLY)
    	   message("-- Found Brisk: ${BRISK_INCLUDE_PATH}")
    endif(NOT BRISK_FIND_QUIETLY)
else(BRISK_FOUND)
    if(BRISK_FIND_REQUIRED)
	message(FATAL_ERROR "-- Could NOT find BRISK (missing: BRISK_INCLUDE_PATH)")
    endif(BRISK_FIND_REQUIRED)
endif(BRISK_FOUND)


================================================
FILE: cmake_modules/FindCVD.cmake
================================================
# - Try to find libCVD
#
#  CVD_FOUND - system has libCVD
#  CVD_INCLUDE_DIR - the libCVD include directories
#  CVD_LIBRARY - link these to use libCVD

FIND_PATH(
  CVD_INCLUDE_DIR
  NAMES cvd/cvd_image.h
  PATHS
    /usr/include
    /usr/local/include
)

FIND_LIBRARY(
  CVD_LIBRARY
  NAMES cvd
  PATHS
    /usr/lib
    /usr/local/lib
) 

IF(CVD_INCLUDE_DIR AND CVD_LIBRARY)
  SET(CVD_FOUND TRUE)
ENDIF()

IF(CVD_FOUND)
   IF(NOT CVD_FIND_QUIETLY)
      MESSAGE(STATUS "Found CVD: ${CVD_LIBRARY}")
   ENDIF()
ELSE()
   IF(CVD_FIND_REQUIRED)
      MESSAGE(FATAL_ERROR "Could not find CVD")
   ENDIF()
ENDIF()


================================================
FILE: cmake_modules/FindCeres.cmake
================================================
# -*- mode: cmake; -*-
###############################################################################
# Find Ceres
#
# This sets the following variables:
# CERES_FOUND - True if CERES was found.
# CERES_INCLUDE_DIRS - Directories containing the CERES include files.
# CERES_LIBRARIES - Libraries needed to use CERES.
#

find_path(CERES_INCLUDE_PATH ceres/ceres.h
  ${CERES_DIR}/include	
  NO_DEFAULT_PATH
)

find_library(CERES_DYNAMIC_LIBRARY NAMES libceres.so PATHS
  ${CERES_DIR}/lib64
  ${CERES_DIR}/lib
  NO_DEFAULT_PATH
)
find_library(CERES_STATIC_LIBRARY NAMES libceres.a PATHS
  ${CERES_DIR}/lib64
  ${CERES_DIR}/lib
    NO_DEFAULT_PATH
  )

message(STATUS "CERES_DIR=${CERES_DIR}")
message(STATUS "CERES_INCLUDE_PATH=${CERES_INCLUDE_PATH}")
message(STATUS "CERES_DYNAMIC_LIBRARY=${CERES_DYNAMIC_LIBRARY}")
message(STATUS "CERES_STATIC_LIBRARY=${CERES_STATIC_LIBRARY}")


if(CERES_STATIC_LIBRARY OR CERES_DYNAMIC_LIBRARY)
if(CERES_INCLUDE_PATH)
	set(CERES_FOUND TRUE)
	set(CERES_INCLUDE_PATHS ${CERES_INCLUDE_PATH} CACHE STRING "The include paths needed to use CERES")
	if(CERES_STATIC_LIBRARY)
	  set(CERES_LIBRARIES "${CERES_STATIC_LIBRARY}" CACHE STRING "The libraries needed to use CERES")
	ELSE()
	  set(CERES_LIBRARIES "${CERES_DYNAMIC_LIBRARY}" CACHE STRING "The libraries needed to use CERES")
	ENDIF()
else()
    if(Ceres_FIND_REQUIRED)
	message(FATAL_ERROR "-- Could NOT find CERES (missing: CERES_INCLUDE_PATH)")
    endif(Ceres_FIND_REQUIRED)
endif()
else()
    if(Ceres_FIND_REQUIRED)
	message(FATAL_ERROR "-- Could NOT find CERES (missing: CERES_STATIC_LIBRARY or CERES_DYNAMIC_LIBRARY)")
    endif(Ceres_FIND_REQUIRED)
endif()

mark_as_advanced(
  CERES_INCLUDE_PATHS
  CERES_LIBRARIES
)



# Generate appropriate messages
if(Ceres_FOUND)
    if(NOT Ceres_FIND_QUIETLY)
    	   message("-- Found CERES: ${CERES_INCLUDE_PATH}")
    endif(NOT Ceres_FIND_QUIETLY)
endif(Ceres_FOUND)


================================================
FILE: cmake_modules/FindEigen.cmake
================================================
# - Try to find Eigen3 lib
#
# This module supports requiring a minimum version, e.g. you can do
#   find_package(Eigen3 3.1.2)
# to require version 3.1.2 or newer of Eigen3.
#
# Once done this will define
#
#  EIGEN3_FOUND - system has eigen lib with correct version
#  EIGEN3_INCLUDE_DIR - the eigen include directory
#  EIGEN3_VERSION - eigen version

# Copyright (c) 2006, 2007 Montel Laurent, <montel@kde.org>
# Copyright (c) 2008, 2009 Gael Guennebaud, <g.gael@free.fr>
# Copyright (c) 2009 Benoit Jacob <jacob.benoit.1@gmail.com>
# Redistribution and use is allowed according to the terms of the 2-clause BSD license.

if(NOT Eigen3_FIND_VERSION)
  if(NOT Eigen3_FIND_VERSION_MAJOR)
    set(Eigen3_FIND_VERSION_MAJOR 2)
  endif(NOT Eigen3_FIND_VERSION_MAJOR)
  if(NOT Eigen3_FIND_VERSION_MINOR)
    set(Eigen3_FIND_VERSION_MINOR 91)
  endif(NOT Eigen3_FIND_VERSION_MINOR)
  if(NOT Eigen3_FIND_VERSION_PATCH)
    set(Eigen3_FIND_VERSION_PATCH 0)
  endif(NOT Eigen3_FIND_VERSION_PATCH)

  set(Eigen3_FIND_VERSION "${Eigen3_FIND_VERSION_MAJOR}.${Eigen3_FIND_VERSION_MINOR}.${Eigen3_FIND_VERSION_PATCH}")
endif(NOT Eigen3_FIND_VERSION)

macro(_eigen3_check_version)
  file(READ "${EIGEN3_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h" _eigen3_version_header)

  string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen3_world_version_match "${_eigen3_version_header}")
  set(EIGEN3_WORLD_VERSION "${CMAKE_MATCH_1}")
  string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen3_major_version_match "${_eigen3_version_header}")
  set(EIGEN3_MAJOR_VERSION "${CMAKE_MATCH_1}")
  string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen3_minor_version_match "${_eigen3_version_header}")
  set(EIGEN3_MINOR_VERSION "${CMAKE_MATCH_1}")

  set(EIGEN3_VERSION ${EIGEN3_WORLD_VERSION}.${EIGEN3_MAJOR_VERSION}.${EIGEN3_MINOR_VERSION})
  if(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})
    set(EIGEN3_VERSION_OK FALSE)
  else(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})
    set(EIGEN3_VERSION_OK TRUE)
  endif(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})

  if(NOT EIGEN3_VERSION_OK)

    message(STATUS "Eigen3 version ${EIGEN3_VERSION} found in ${EIGEN3_INCLUDE_DIR}, "
                   "but at least version ${Eigen3_FIND_VERSION} is required")
  endif(NOT EIGEN3_VERSION_OK)
endmacro(_eigen3_check_version)

if (EIGEN3_INCLUDE_DIR)

  # in cache already
  _eigen3_check_version()
  set(EIGEN3_FOUND ${EIGEN3_VERSION_OK})

else (EIGEN3_INCLUDE_DIR)

  find_path(EIGEN3_INCLUDE_DIR NAMES signature_of_eigen3_matrix_library
      PATHS
      ${CMAKE_INSTALL_PREFIX}/include
      ${KDE4_INCLUDE_DIR}
      PATH_SUFFIXES eigen3 eigen
    )

  if(EIGEN3_INCLUDE_DIR)
    _eigen3_check_version()
  endif(EIGEN3_INCLUDE_DIR)

  include(FindPackageHandleStandardArgs)
  find_package_handle_standard_args(Eigen3 DEFAULT_MSG EIGEN3_INCLUDE_DIR EIGEN3_VERSION_OK)

  mark_as_advanced(EIGEN3_INCLUDE_DIR)

endif(EIGEN3_INCLUDE_DIR)



================================================
FILE: cmake_modules/FindEigen3.cmake
================================================
# - Try to find Eigen3 lib
#
# This module supports requiring a minimum version, e.g. you can do
#   find_package(Eigen3 3.1.2)
# to require version 3.1.2 or newer of Eigen3.
#
# Once done this will define
#
#  EIGEN3_FOUND - system has eigen lib with correct version
#  EIGEN3_INCLUDE_DIR - the eigen include directory
#  EIGEN3_VERSION - eigen version

# Copyright (c) 2006, 2007 Montel Laurent, <montel@kde.org>
# Copyright (c) 2008, 2009 Gael Guennebaud, <g.gael@free.fr>
# Copyright (c) 2009 Benoit Jacob <jacob.benoit.1@gmail.com>
# Redistribution and use is allowed according to the terms of the 2-clause BSD license.

if(NOT Eigen3_FIND_VERSION)
  if(NOT Eigen3_FIND_VERSION_MAJOR)
    set(Eigen3_FIND_VERSION_MAJOR 2)
  endif(NOT Eigen3_FIND_VERSION_MAJOR)
  if(NOT Eigen3_FIND_VERSION_MINOR)
    set(Eigen3_FIND_VERSION_MINOR 91)
  endif(NOT Eigen3_FIND_VERSION_MINOR)
  if(NOT Eigen3_FIND_VERSION_PATCH)
    set(Eigen3_FIND_VERSION_PATCH 0)
  endif(NOT Eigen3_FIND_VERSION_PATCH)

  set(Eigen3_FIND_VERSION "${Eigen3_FIND_VERSION_MAJOR}.${Eigen3_FIND_VERSION_MINOR}.${Eigen3_FIND_VERSION_PATCH}")
endif(NOT Eigen3_FIND_VERSION)

macro(_eigen3_check_version)
  file(READ "${EIGEN3_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h" _eigen3_version_header)

  string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen3_world_version_match "${_eigen3_version_header}")
  set(EIGEN3_WORLD_VERSION "${CMAKE_MATCH_1}")
  string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen3_major_version_match "${_eigen3_version_header}")
  set(EIGEN3_MAJOR_VERSION "${CMAKE_MATCH_1}")
  string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen3_minor_version_match "${_eigen3_version_header}")
  set(EIGEN3_MINOR_VERSION "${CMAKE_MATCH_1}")

  set(EIGEN3_VERSION ${EIGEN3_WORLD_VERSION}.${EIGEN3_MAJOR_VERSION}.${EIGEN3_MINOR_VERSION})
  if(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})
    set(EIGEN3_VERSION_OK FALSE)
  else(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})
    set(EIGEN3_VERSION_OK TRUE)
  endif(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})

  if(NOT EIGEN3_VERSION_OK)

    message(STATUS "Eigen3 version ${EIGEN3_VERSION} found in ${EIGEN3_INCLUDE_DIR}, "
                   "but at least version ${Eigen3_FIND_VERSION} is required")
  endif(NOT EIGEN3_VERSION_OK)
endmacro(_eigen3_check_version)

if (EIGEN3_INCLUDE_DIR)

  # in cache already
  _eigen3_check_version()
  set(EIGEN3_FOUND ${EIGEN3_VERSION_OK})

else (EIGEN3_INCLUDE_DIR)

  find_path(EIGEN3_INCLUDE_DIR NAMES signature_of_eigen3_matrix_library
      PATHS
      ${CMAKE_INSTALL_PREFIX}/include
      ${KDE4_INCLUDE_DIR}
      PATH_SUFFIXES eigen3 eigen
    )

  if(EIGEN3_INCLUDE_DIR)
    _eigen3_check_version()
  endif(EIGEN3_INCLUDE_DIR)

  include(FindPackageHandleStandardArgs)
  find_package_handle_standard_args(Eigen3 DEFAULT_MSG EIGEN3_INCLUDE_DIR EIGEN3_VERSION_OK)

  mark_as_advanced(EIGEN3_INCLUDE_DIR)

endif(EIGEN3_INCLUDE_DIR)



================================================
FILE: cmake_modules/FindFreeImage.cmake
================================================
#
# Try to find the FreeImage library and include path.
# Once done this will define
#
# FREEIMAGE_FOUND
# FREEIMAGE_INCLUDE_PATH
# FREEIMAGE_LIBRARY
# FREEIMAGE_STATIC_LIBRARY
# FREEIMAGE_DYNAMIC_LIBRARY
#

OPTION(USE_FreeImage_STATIC "Use Static FreeImage Lib" OFF)

FIND_PATH(FreeImage_INCLUDE_PATH
    NAMES FreeImage.h
    PATHS
    /usr/include
    /usr/local/include
    /sw/include
    /opt/local/include
    DOC "The directory where FreeImage.h resides")

FIND_LIBRARY(FreeImage_DYNAMIC_LIBRARY
    NAMES FreeImage freeimage
    PATHS
    /usr/lib64
    /usr/lib
    /usr/local/lib64
    /usr/local/lib
    /sw/lib
    /opt/local/lib
    DOC "The FreeImage library")

SET(PX ${CMAKE_STATIC_LIBRARY_PREFIX})
SET(SX ${CMAKE_STATIC_LIBRARY_SUFFIX})

FIND_LIBRARY(FreeImage_STATIC_LIBRARY
    NAMES ${PX}FreeImageLIB${SX} ${PX}FreeImage${SX} ${PX}freeimage${SX}
    HINTS ${PROJECT_SOURCE_DIR}/FreeImage
    PATHS
    /usr/lib64
    /usr/lib
    /usr/local/lib64
    /usr/local/lib
    /sw/lib
    /opt/local/lib
    DOC "The FreeImage library")
  
UNSET(PX)
UNSET(SX)

IF(USE_FreeImage_STATIC)
  
  IF(FreeImage_STATIC_LIBRARY)
    ADD_DEFINITIONS(-D$FREEIMAGE_LIB)
    SET(FreeImage_LIBRARY ${FreeImage_STATIC_LIBRARY})
    MESSAGE(STATUS "Using Static FreeImage Lib FreeImage_LIBRARY = " ${FreeImage_LIBRARY})
  else(FreeImage_STATIC_LIBRARY)  
    if(FreeImage_FIND_REQUIRED AND NOT FreeImage_FIND_QUIETLY)
      message(FATAL_ERROR "Could not find FREEIMAGE static libs ")
    endif(FreeImage_FIND_REQUIRED AND NOT FreeImage_FIND_QUIETLY)
  endif(FreeImage_STATIC_LIBRARY)
  

ELSE(USE_FreeImage_STATIC)

  IF(FreeImage_DYNAMIC_LIBRARY)
    REMOVE_DEFINITIONS(-DFREEIMAGE_LIB)
    SET(FreeImage_LIBRARY ${FreeImage_DYNAMIC_LIBRARY})
    MESSAGE(STATUS "Using Dynamic FreeImage Lib FreeImage_LIBRARY = " ${FreeImage_LIBRARY})
  else(FreeImage_DYNAMIC_LIBRARY)  
    if(FreeImage_FIND_REQUIRED AND NOT FreeImage_FIND_QUIETLY)
      message(FATAL_ERROR "Could not find FREEIMAGE dynamic libs ")
    endif(FreeImage_FIND_REQUIRED AND NOT FreeImage_FIND_QUIETLY)
  endif(FreeImage_DYNAMIC_LIBRARY)

ENDIF(USE_FreeImage_STATIC)


IF(FreeImage_INCLUDE_PATH)
    MESSAGE(STATUS "Using FreeImage include dir") 
    SET(FreeImage_INCLUDE_DIRS ${FreeImage_INCLUDE_PATH})   
else(FreeImage_INCLUDE_PATH)  
  if(FreeImage_FIND_REQUIRED AND NOT FreeImage_FIND_QUIETLY)
    message(FATAL_ERROR "Could not find FREEIMAGE include directory")
  endif(FreeImage_FIND_REQUIRED AND NOT FreeImage_FIND_QUIETLY)
endif(FreeImage_INCLUDE_PATH)



INCLUDE(FindPackageHandleStandardArgs)
  
FIND_PACKAGE_HANDLE_STANDARD_ARGS(FREEIMAGE DEFAULT_MSG
  FreeImage_INCLUDE_DIRS FreeImage_LIBRARY)





MARK_AS_ADVANCED(
    FreeImage_INCLUDE_DIRS
    FreeImage_DYNAMIC_LIBRARY
    FreeImage_STATIC_LIBRARY
    FreeImage_LIBRARY
    )

================================================
FILE: cmake_modules/FindG2O.cmake
================================================
# Find the header files

FIND_PATH(G2O_INCLUDE_DIR g2o/core/base_vertex.h
  ${G2O_ROOT}/include
  $ENV{G2O_ROOT}/include
  $ENV{G2O_ROOT}
  /usr/local/include
  /usr/include
  /opt/local/include
  /sw/local/include
  /sw/include
  NO_DEFAULT_PATH
  )

# Macro to unify finding both the debug and release versions of the
# libraries; this is adapted from the OpenSceneGraph FIND_LIBRARY
# macro.

MACRO(FIND_G2O_LIBRARY MYLIBRARY MYLIBRARYNAME)

  FIND_LIBRARY("${MYLIBRARY}_DEBUG"
    NAMES "g2o_${MYLIBRARYNAME}_d"
    PATHS
    ${G2O_ROOT}/lib/Debug
    ${G2O_ROOT}/lib
    $ENV{G2O_ROOT}/lib/Debug
    $ENV{G2O_ROOT}/lib
    NO_DEFAULT_PATH
    )

  FIND_LIBRARY("${MYLIBRARY}_DEBUG"
    NAMES "g2o_${MYLIBRARYNAME}_d"
    PATHS
    ~/Library/Frameworks
    /Library/Frameworks
    /usr/local/lib
    /usr/local/lib64
    /usr/lib
    /usr/lib64
    /opt/local/lib
    /sw/local/lib
    /sw/lib
    )
  
  FIND_LIBRARY(${MYLIBRARY}
    NAMES "g2o_${MYLIBRARYNAME}"
    PATHS
    ${G2O_ROOT}/lib/Release
    ${G2O_ROOT}/lib
    $ENV{G2O_ROOT}/lib/Release
    $ENV{G2O_ROOT}/lib
    NO_DEFAULT_PATH
    )

  FIND_LIBRARY(${MYLIBRARY}
    NAMES "g2o_${MYLIBRARYNAME}"
    PATHS
    ~/Library/Frameworks
    /Library/Frameworks
    /usr/local/lib
    /usr/local/lib64
    /usr/lib
    /usr/lib64
    /opt/local/lib
    /sw/local/lib
    /sw/lib
    )
  
  IF(NOT ${MYLIBRARY}_DEBUG)
    IF(MYLIBRARY)
      SET(${MYLIBRARY}_DEBUG ${MYLIBRARY})
    ENDIF(MYLIBRARY)
  ENDIF( NOT ${MYLIBRARY}_DEBUG)
  
ENDMACRO(FIND_G2O_LIBRARY LIBRARY LIBRARYNAME)

# Find the core elements
FIND_G2O_LIBRARY(G2O_STUFF_LIBRARY stuff)
FIND_G2O_LIBRARY(G2O_CORE_LIBRARY core)

# Find the CLI library
FIND_G2O_LIBRARY(G2O_CLI_LIBRARY cli)

# Find the pluggable solvers
FIND_G2O_LIBRARY(G2O_SOLVER_CHOLMOD solver_cholmod)
FIND_G2O_LIBRARY(G2O_SOLVER_CSPARSE solver_csparse)
FIND_G2O_LIBRARY(G2O_SOLVER_CSPARSE_EXTENSION csparse_extension)
FIND_G2O_LIBRARY(G2O_SOLVER_DENSE solver_dense)
FIND_G2O_LIBRARY(G2O_SOLVER_PCG solver_pcg)
FIND_G2O_LIBRARY(G2O_SOLVER_SLAM2D_LINEAR solver_slam2d_linear)
FIND_G2O_LIBRARY(G2O_SOLVER_STRUCTURE_ONLY solver_structure_only)
FIND_G2O_LIBRARY(G2O_SOLVER_EIGEN solver_eigen)

# Find the predefined types
FIND_G2O_LIBRARY(G2O_TYPES_DATA types_data)
FIND_G2O_LIBRARY(G2O_TYPES_ICP types_icp)
FIND_G2O_LIBRARY(G2O_TYPES_SBA types_sba)
FIND_G2O_LIBRARY(G2O_TYPES_SCLAM2D types_sclam2d)
FIND_G2O_LIBRARY(G2O_TYPES_SIM3 types_sim3)
FIND_G2O_LIBRARY(G2O_TYPES_SLAM2D types_slam2d)
FIND_G2O_LIBRARY(G2O_TYPES_SLAM3D types_slam3d)

# G2O solvers declared found if we found at least one solver
SET(G2O_SOLVERS_FOUND "NO")
IF(G2O_SOLVER_CHOLMOD OR G2O_SOLVER_CSPARSE OR G2O_SOLVER_DENSE OR G2O_SOLVER_PCG OR G2O_SOLVER_SLAM2D_LINEAR OR G2O_SOLVER_STRUCTURE_ONLY OR G2O_SOLVER_EIGEN)
  SET(G2O_SOLVERS_FOUND "YES")
ENDIF(G2O_SOLVER_CHOLMOD OR G2O_SOLVER_CSPARSE OR G2O_SOLVER_DENSE OR G2O_SOLVER_PCG OR G2O_SOLVER_SLAM2D_LINEAR OR G2O_SOLVER_STRUCTURE_ONLY OR G2O_SOLVER_EIGEN)

# G2O itself declared found if we found the core libraries and at least one solver
IF(G2O_STUFF_LIBRARY AND G2O_CORE_LIBRARY AND G2O_INCLUDE_DIR AND G2O_SOLVERS_FOUND)
  SET(G2O_FOUND "YES")
ENDIF(G2O_STUFF_LIBRARY AND G2O_CORE_LIBRARY AND G2O_INCLUDE_DIR AND G2O_SOLVERS_FOUND)


================================================
FILE: cmake_modules/FindGVARS.cmake
================================================
# - Try to find GVARS
#
#  GVARS_FOUND - system has GVARS
#  GVARS_INCLUDE_DIR - the GVARS include directories
#  GVARS_LIBRARY - link these to use GVARS

FIND_PATH(
  GVARS_INCLUDE_DIR
  NAMES gvars3/config.h
  PATHS
    /usr/include
    /usr/local/include
)

FIND_LIBRARY(
  GVARS_LIBRARY
  NAMES GVars3
  PATHS
    /usr/lib
    /usr/local/lib
) 

IF(GVARS_INCLUDE_DIR AND GVARS_LIBRARY)
  SET(GVARS_FOUND TRUE)
ENDIF()

IF(GVARS_FOUND)
   IF(NOT GVARS_FIND_QUIETLY)
      MESSAGE(STATUS "Found GVARS: ${GVARS_LIBRARY}")
   ENDIF()
ELSE()
   IF(GVARS_FIND_REQUIRED)
      MESSAGE(FATAL_ERROR "Could not find GVARS")
   ENDIF()
ENDIF()


================================================
FILE: cmake_modules/FindGlog.cmake
================================================
# Ceres Solver - A fast non-linear least squares minimizer
# Copyright 2015 Google Inc. All rights reserved.
# http://ceres-solver.org/
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
#   this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
#   this list of conditions and the following disclaimer in the documentation
#   and/or other materials provided with the distribution.
# * Neither the name of Google Inc. nor the names of its contributors may be
#   used to endorse or promote products derived from this software without
#   specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
# Author: alexs.mac@gmail.com (Alex Stewart)
#

# FindGlog.cmake - Find Google glog logging library.
#
# This module defines the following variables:
#
# GLOG_FOUND: TRUE iff glog is found.
# GLOG_INCLUDE_DIRS: Include directories for glog.
# GLOG_LIBRARIES: Libraries required to link glog.
#
# The following variables control the behaviour of this module:
#
# GLOG_INCLUDE_DIR_HINTS: List of additional directories in which to
#                         search for glog includes, e.g: /timbuktu/include.
# GLOG_LIBRARY_DIR_HINTS: List of additional directories in which to
#                         search for glog libraries, e.g: /timbuktu/lib.
#
# The following variables are also defined by this module, but in line with
# CMake recommended FindPackage() module style should NOT be referenced directly
# by callers (use the plural variables detailed above instead).  These variables
# do however affect the behaviour of the module via FIND_[PATH/LIBRARY]() which
# are NOT re-called (i.e. search for library is not repeated) if these variables
# are set with valid values _in the CMake cache_. This means that if these
# variables are set directly in the cache, either by the user in the CMake GUI,
# or by the user passing -DVAR=VALUE directives to CMake when called (which
# explicitly defines a cache variable), then they will be used verbatim,
# bypassing the HINTS variables and other hard-coded search locations.
#
# GLOG_INCLUDE_DIR: Include directory for glog, not including the
#                   include directory of any dependencies.
# GLOG_LIBRARY: glog library, not including the libraries of any
#               dependencies.

# Reset CALLERS_CMAKE_FIND_LIBRARY_PREFIXES to its value when
# FindGlog was invoked.
macro(GLOG_RESET_FIND_LIBRARY_PREFIX)
  if (MSVC)
    set(CMAKE_FIND_LIBRARY_PREFIXES "${CALLERS_CMAKE_FIND_LIBRARY_PREFIXES}")
  endif (MSVC)
endmacro(GLOG_RESET_FIND_LIBRARY_PREFIX)

# Called if we failed to find glog or any of it's required dependencies,
# unsets all public (designed to be used externally) variables and reports
# error message at priority depending upon [REQUIRED/QUIET/<NONE>] argument.
macro(GLOG_REPORT_NOT_FOUND REASON_MSG)
  unset(GLOG_FOUND)
  unset(GLOG_INCLUDE_DIRS)
  unset(GLOG_LIBRARIES)
  # Make results of search visible in the CMake GUI if glog has not
  # been found so that user does not have to toggle to advanced view.
  mark_as_advanced(CLEAR GLOG_INCLUDE_DIR
                         GLOG_LIBRARY)

  glog_reset_find_library_prefix()

  # Note <package>_FIND_[REQUIRED/QUIETLY] variables defined by FindPackage()
  # use the camelcase library name, not uppercase.
  if (Glog_FIND_QUIETLY)
    message(STATUS "Failed to find glog - " ${REASON_MSG} ${ARGN})
  elseif (Glog_FIND_REQUIRED)
    message(FATAL_ERROR "Failed to find glog - " ${REASON_MSG} ${ARGN})
  else()
    # Neither QUIETLY nor REQUIRED, use no priority which emits a message
    # but continues configuration and allows generation.
    message("-- Failed to find glog - " ${REASON_MSG} ${ARGN})
  endif ()
endmacro(GLOG_REPORT_NOT_FOUND)

# Handle possible presence of lib prefix for libraries on MSVC, see
# also GLOG_RESET_FIND_LIBRARY_PREFIX().
if (MSVC)
  # Preserve the caller's original values for CMAKE_FIND_LIBRARY_PREFIXES
  # s/t we can set it back before returning.
  set(CALLERS_CMAKE_FIND_LIBRARY_PREFIXES "${CMAKE_FIND_LIBRARY_PREFIXES}")
  # The empty string in this list is important, it represents the case when
  # the libraries have no prefix (shared libraries / DLLs).
  set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "" "${CMAKE_FIND_LIBRARY_PREFIXES}")
endif (MSVC)

# Search user-installed locations first, so that we prefer user installs
# to system installs where both exist.
list(APPEND GLOG_CHECK_INCLUDE_DIRS
  /usr/local/include
  /usr/local/homebrew/include # Mac OS X
  /opt/local/var/macports/software # Mac OS X.
  /opt/local/include
  /usr/include)
# Windows (for C:/Program Files prefix).
list(APPEND GLOG_CHECK_PATH_SUFFIXES
  glog/include
  glog/Include
  Glog/include
  Glog/Include)

list(APPEND GLOG_CHECK_LIBRARY_DIRS
  /usr/local/lib
  /usr/local/homebrew/lib # Mac OS X.
  /opt/local/lib
  /usr/lib)
# Windows (for C:/Program Files prefix).
list(APPEND GLOG_CHECK_LIBRARY_SUFFIXES
  glog/lib
  glog/Lib
  Glog/lib
  Glog/Lib)

# Search supplied hint directories first if supplied.
find_path(GLOG_INCLUDE_DIR
  NAMES glog/logging.h
  PATHS ${GLOG_INCLUDE_DIR_HINTS}
  ${GLOG_CHECK_INCLUDE_DIRS}
  PATH_SUFFIXES ${GLOG_CHECK_PATH_SUFFIXES})
if (NOT GLOG_INCLUDE_DIR OR
    NOT EXISTS ${GLOG_INCLUDE_DIR})
  glog_report_not_found(
    "Could not find glog include directory, set GLOG_INCLUDE_DIR "
    "to directory containing glog/logging.h")
endif (NOT GLOG_INCLUDE_DIR OR
       NOT EXISTS ${GLOG_INCLUDE_DIR})

find_library(GLOG_LIBRARY NAMES glog
  PATHS ${GLOG_LIBRARY_DIR_HINTS}
  ${GLOG_CHECK_LIBRARY_DIRS}
  PATH_SUFFIXES ${GLOG_CHECK_LIBRARY_SUFFIXES})
if (NOT GLOG_LIBRARY OR
    NOT EXISTS ${GLOG_LIBRARY})
  glog_report_not_found(
    "Could not find glog library, set GLOG_LIBRARY "
    "to full path to libglog.")
endif (NOT GLOG_LIBRARY OR
       NOT EXISTS ${GLOG_LIBRARY})

# Mark internally as found, then verify. GLOG_REPORT_NOT_FOUND() unsets
# if called.
set(GLOG_FOUND TRUE)

# Glog does not seem to provide any record of the version in its
# source tree, thus cannot extract version.

# Catch case when caller has set GLOG_INCLUDE_DIR in the cache / GUI and
# thus FIND_[PATH/LIBRARY] are not called, but specified locations are
# invalid, otherwise we would report the library as found.
if (GLOG_INCLUDE_DIR AND
    NOT EXISTS ${GLOG_INCLUDE_DIR}/glog/logging.h)
  glog_report_not_found(
    "Caller defined GLOG_INCLUDE_DIR:"
    " ${GLOG_INCLUDE_DIR} does not contain glog/logging.h header.")
endif (GLOG_INCLUDE_DIR AND
       NOT EXISTS ${GLOG_INCLUDE_DIR}/glog/logging.h)
# TODO: This regex for glog library is pretty primitive, we use lowercase
#       for comparison to handle Windows using CamelCase library names, could
#       this check be better?
string(TOLOWER "${GLOG_LIBRARY}" LOWERCASE_GLOG_LIBRARY)
if (GLOG_LIBRARY AND
    NOT "${LOWERCASE_GLOG_LIBRARY}" MATCHES ".*glog[^/]*")
  glog_report_not_found(
    "Caller defined GLOG_LIBRARY: "
    "${GLOG_LIBRARY} does not match glog.")
endif (GLOG_LIBRARY AND
       NOT "${LOWERCASE_GLOG_LIBRARY}" MATCHES ".*glog[^/]*")

# Set standard CMake FindPackage variables if found.
if (GLOG_FOUND)
  set(GLOG_INCLUDE_DIRS ${GLOG_INCLUDE_DIR})
  set(GLOG_LIBRARIES ${GLOG_LIBRARY})
endif (GLOG_FOUND)

glog_reset_find_library_prefix()

# Handle REQUIRED / QUIET optional arguments.
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Glog DEFAULT_MSG
  GLOG_INCLUDE_DIRS GLOG_LIBRARIES)

# Only mark internal variables as advanced if we found glog, otherwise
# leave them visible in the standard GUI for the user to set manually.
if (GLOG_FOUND)
  mark_as_advanced(FORCE GLOG_INCLUDE_DIR
                         GLOG_LIBRARY)
endif (GLOG_FOUND)


================================================
FILE: cmake_modules/FindLIBYAML.cmake
================================================
# CMake module to search for the libyaml library
# (library for parsing YAML files)
#
# If it's found it sets LIBYAML_FOUND to TRUE
# and following variables are set:
#    LIBYAML_INCLUDE_DIR
#    LIBYAML_LIBRARY


FIND_PATH(LIBYAML_INCLUDE_DIR NAMES yaml.h 
	HINTS 
	/usr/include/yaml-cpp/)
FIND_LIBRARY(LIBYAML_LIBRARY NAMES yaml-cpp
	HINTS
	/usr/lib64)

if(LIBYAML_LIBRARY)
  message(STATUS "Found LIBYAML Library: ${LIBYAML_LIBRARY}")
else()
  message(STATUS "NOT Found LIBYAML Library: ${LIBYAML_LIBRARY}")
endif()

if(LIBYAML_INCLUDE_DIR)
  message(STATUS "Found LIBYAML includes: ${LIBYAML_INCLUDE_DIR}")
else()
  message(STATUS "NOT Found LIBYAML includes: ${LIBYAML_INCLUDE_DIR}")
endif()

if(LIBYAML_LIBRARY AND LIBYAML_INCLUDE_DIR)
  message(STATUS "Found LIBYAML: ${LIBYAML_LIBRARY}")
  set(LIBYAML_FOUND TRUE)
ELSE()
  IF(LIBYAML_FIND_REQUIRED)
    message(FATAL_ERROR "NOT FOUND: LIBYAML")
  ELSE()
    message(STATUS "NOT FOUND: LIBYAML")
  ENDIF()
endif()
  
mark_as_advanced(
        LIBYAML_INCLUDE_DIR
        LIBYAML_LIBRARY
	)


================================================
FILE: cmake_modules/FindOpenCL.cmake
================================================
# Module for locating OpenCL.
#
# Customizable variables:
#   OPENCL_ROOT_DIR
#     Specifies OpenCL's root directory. The find module uses this variable to
#     locate OpenCL. The variable will be filled automatically unless explicitly
#     set using CMake's -D command-line option. Instead of setting a CMake
#     variable, an environment variable called OCLROOT can be used.
#     While locating the root directory, the module will try to detect OpenCL
#     implementations provided by AMD's Accelerated Parallel Processing SDK,
#     NVIDIA's GPU Computing Toolkit and Intel's OpenCL SDK by examining the
#     AMDAPPSDKROOT, CUDA_PATH and INTELOCLSDKROOT environment variables,
#     respectively.
#
# Read-only variables:
#   OPENCL_FOUND
#     Indicates whether OpenCL has been found.
#
#   OPENCL_INCLUDE_DIRS
#     Specifies the OpenCL include directories.
#
#   OPENCL_LIBRARIES
#     Specifies the OpenCL libraries that should be passed to
#     target_link_libararies.
#
#
# Copyright (c) 2012 Sergiu Dotenco
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTOPENCLLAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.

INCLUDE (FindPackageHandleStandardArgs)

IF (CMAKE_SIZEOF_VOID_P EQUAL 8)
  SET (_OPENCL_POSSIBLE_LIB_SUFFIXES lib/Win64 lib/x86_64 lib/x64 lib lib64)
ELSE (CMAKE_SIZEOF_VOID_P EQUAL 8)
  SET (_OPENCL_POSSIBLE_LIB_SUFFIXES lib/Win32 lib/x86 lib)
ENDIF (CMAKE_SIZEOF_VOID_P EQUAL 8)

LIST (APPEND _OPENCL_POSSIBLE_LIB_SUFFIXES lib/nvidia-current)

FIND_PATH (OPENCL_ROOT_DIR
  NAMES OpenCL/cl.h
        CL/cl.h
        include/CL/cl.h
        include/nvidia-current/CL/cl.h
  HINTS ${CUDA_TOOLKIT_ROOT_DIR}
  PATHS ENV OCLROOT
        ENV AMDAPPSDKROOT
        ENV CUDA_PATH
        ENV INTELOCLSDKROOT
  PATH_SUFFIXES cuda
  DOC "OpenCL root directory")

FIND_PATH (OPENCL_INCLUDE_DIR
  NAMES OpenCL/cl.h CL/cl.h
  HINTS ${OPENCL_ROOT_DIR}
  PATH_SUFFIXES include include/nvidia-current
  DOC "OpenCL include directory")

FIND_LIBRARY (OPENCL_LIBRARY
  NAMES OpenCL 
  HINTS ${OPENCL_ROOT_DIR}  /usr/local/lib/mali/fbdev/ 
  PATH_SUFFIXES ${_OPENCL_POSSIBLE_LIB_SUFFIXES}
  DOC "OpenCL library")

SET (OPENCL_INCLUDE_DIRS ${OPENCL_INCLUDE_DIR})
SET (OPENCL_LIBRARIES ${OPENCL_LIBRARY})

IF (OPENCL_INCLUDE_DIR AND OPENCL_LIBRARY)
  SET (_OPENCL_VERSION_TEST_SOURCE
"
#if __APPLE__
#include <OpenCL/cl.h>
#else /* !__APPLE__ */
#include <CL/cl.h>
#endif /* __APPLE__ */

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char *version;
    cl_int result;
    cl_platform_id id;
    size_t n;

    result = clGetPlatformIDs(1, &id, NULL);

    if (result == CL_SUCCESS) {
        result = clGetPlatformInfo(id, CL_PLATFORM_VERSION, 0, NULL, &n);

        if (result == CL_SUCCESS) {
            version = (char*)malloc(n * sizeof(char));

            result = clGetPlatformInfo(id, CL_PLATFORM_VERSION, n, version,
                NULL);

            if (result == CL_SUCCESS) {
                printf(\"%s\", version);
                fflush(stdout);
            }

            free(version);
        }
    }

    return result == CL_SUCCESS ? EXIT_SUCCESS : EXIT_FAILURE;
}
")

  SET (_OPENCL_VERSION_SOURCE
    "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/openclversion.c")

  FILE (WRITE ${_OPENCL_VERSION_SOURCE} "${_OPENCL_VERSION_TEST_SOURCE}\n")

  TRY_RUN (_OPENCL_VERSION_RUN_RESULT _OPENCL_VERSION_COMPILE_RESULT
    ${CMAKE_BINARY_DIR} ${_OPENCL_VERSION_SOURCE}
    RUN_OUTPUT_VARIABLE _OPENCL_VERSION_STRING
    CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${OPENCL_INCLUDE_DIRS}"
                "-DLINK_LIBRARIES:STRING=${OPENCL_LIBRARIES}")

  IF (_OPENCL_VERSION_RUN_RESULT EQUAL 0)
    STRING (REGEX REPLACE "OpenCL[ \t]+([0-9]+)\\.[0-9]+.*" "\\1"
      OPENCL_VERSION_MAJOR "${_OPENCL_VERSION_STRING}")
    STRING (REGEX REPLACE "OpenCL[ \t]+[0-9]+\\.([0-9]+).*" "\\1"
      OPENCL_VERSION_MINOR "${_OPENCL_VERSION_STRING}")

    SET (OPENCL_VERSION_COMPONENTS 2)
    SET (OPENCL_VERSION "${OPENCL_VERSION_MAJOR}.${OPENCL_VERSION_MINOR}")
  ENDIF (_OPENCL_VERSION_RUN_RESULT EQUAL 0)


ENDIF (OPENCL_INCLUDE_DIR AND OPENCL_LIBRARY)


IF(OPENCL_LIBRARY)
    MESSAGE(STATUS "Using OPENCL_LIBRARY = ${OPENCL_LIBRARY}" ) 
else(OPENCL_LIBRARY)  
  if(OpenCL_FIND_REQUIRED AND NOT OpenCL_FIND_QUIETLY)
    message(FATAL_ERROR "Could not find OpenCL libary")
  endif(OpenCL_FIND_REQUIRED AND NOT OpenCL_FIND_QUIETLY)
endif(OPENCL_LIBRARY)



MARK_AS_ADVANCED (OPENCL_INCLUDE_DIR OPENCL_LIBRARY)

FIND_PACKAGE_HANDLE_STANDARD_ARGS (OpenCL REQUIRED_VARS OPENCL_ROOT_DIR
  OPENCL_INCLUDE_DIR OPENCL_LIBRARY VERSION_VAR OPENCL_VERSION)


================================================
FILE: cmake_modules/FindOpenNI.cmake
================================================
# -*- mode: cmake; -*-
###############################################################################
# Find OpenNI
#
# This sets the following variables:
# OPENNI_FOUND - True if OPENNI was found.
# OPENNI_INCLUDE_DIRS - Directories containing the OPENNI include files.
# OPENNI_LIBRARIES - Libraries needed to use OPENNI.
# OPENNI_DEFINITIONS - Compiler flags for OPENNI.
#
# File forked from augmented_dev, project of alantrrs
# (https://github.com/alantrrs/augmented_dev).

find_package(PkgConfig)
if(${CMAKE_VERSION} VERSION_LESS 2.8.2)
  pkg_check_modules(PC_OPENNI openni-dev)
else()
  pkg_check_modules(PC_OPENNI QUIET openni-dev)
endif()

set(OPENNI_DEFINITIONS ${PC_OPENNI_CFLAGS_OTHER})

#using the 64bit version of OpenNi if generating for 64bit
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
    set(PROGRAMFILES_ "$ENV{PROGRAMW6432}")
    set(OPENNI_SUFFIX "64")
else(CMAKE_SIZEOF_VOID_P EQUAL 8)
    set(PROGRAMFILES_ "$ENV{PROGRAMFILES}")
    set(OPENNI_SUFFIX "")
endif(CMAKE_SIZEOF_VOID_P EQUAL 8)

#add a hint so that it can find it without the pkg-config
find_path(OPENNI_INCLUDE_DIR XnStatus.h
    HINTS ${PC_OPENNI_INCLUDEDIR} ${PC_OPENNI_INCLUDE_DIRS} /usr/include/ni /usr/include/openni
    "${PROGRAMFILES_}/OpenNI/Include"
    PATH_SUFFIXES openni)
#add a hint so that it can find it without the pkg-config
find_library(OPENNI_LIBRARY
    NAMES OpenNI64 OpenNI
    HINTS ${PC_OPENNI_LIBDIR} ${PC_OPENNI_LIBRARY_DIRS} /usr/lib "${PROGRAMFILES_}/OpenNI/Lib${OPENNI_SUFFIX}")

set(OPENNI_INCLUDE_DIRS ${OPENNI_INCLUDE_DIR})
set(OPENNI_LIBRARIES ${OPENNI_LIBRARY})

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(OpenNI DEFAULT_MSG
    OPENNI_LIBRARY OPENNI_INCLUDE_DIR)

mark_as_advanced(OPENNI_LIBRARY OPENNI_INCLUDE_DIR)


================================================
FILE: cmake_modules/FindOpenNI2.cmake
================================================
find_library(OPENNI2_LIBRARY
        NAMES OpenNI2
    	PATHS ~/usr/lib ~/usr/local/lib ~/.local/lib64  ~/.local/lib  /usr/lib /usr/local/lib /data/Repositories/OpenNI2-2.2-beta2/Bin/x64-Release /scratch/cad/OpenNI/Redist /data/sw/OpenNI/OpenNI2-2.2-beta2/Bin/x64-Release 
        PATH_SUFFIXES openni2 ni2
	)
if(OPENNI2_LIBRARY)
else()
find_library(OPENNI2_LIBRARY
        NAMES OpenNI2
	PATHS  /usr/lib /usr/local/lib
)
endif()

find_path(OPENNI2_INCLUDE_PATH
        NAMES OpenNI.h
        PATHS ~/usr/include ~/.local/include ~/usr/local/include /usr/include /usr/local/include /scratch/cad/OpenNI/Include /data/sw/OpenNI/OpenNI2-2.2-beta2/Include 
        PATH_SUFFIXES openni2 ni2
	)


if(OPENNI2_LIBRARY)
else()
        message(STATUS "NOT Found OpenNI2 Library: ${OPENNI2_LIBRARY}")
endif()
if(OPENNI2_INCLUDE_PATH)
  set(OPENNI2_INCLUDE_DIR ${OPENNI2_INCLUDE_PATH})
else()
        message(STATUS "NOT Found OpenNI2 includes: ${OPENNI2_INCLUDE_PATH}")
endif()
if(OPENNI2_LIBRARY AND OPENNI2_INCLUDE_PATH)
        message(STATUS "Found OpenNI2: ${OPENNI2_LIBRARY}")
	set(OpenNI2_FOUND TRUE)
        set(OPENNI2_INCLUDE_PATHS ${OPENNI2_INCLUDE_PATH} CACHE STRING "The include paths needed to use OpenNI2")
        set(OPENNI2_LIBRARIES ${OPENNI2_LIBRARY} CACHE STRING "The libraries needed to use OpenNI2")
else()
    message(STATUS "NOT FOUND: OpenNI2")
endif()

mark_as_advanced(
        OPENNI2_INCLUDE_PATHS
        OPENNI2_LIBRARIES
	)


================================================
FILE: cmake_modules/FindPAPI.cmake
================================================
# Try to find PAPI headers and libraries.
#
# Usage of this module as follows:
#
#     find_package(PAPI)
#
# Variables used by this module, they can change the default behaviour and need
# to be set before calling find_package:
#
#  PAPI_PREFIX         Set this variable to the root installation of
#                      libpapi if the module has problems finding the
#                      proper installation path.
#
# Variables defined by this module:
#
#  PAPI_FOUND              System has PAPI libraries and headers
#  PAPI_LIBRARIES          The PAPI library
#  PAPI_INCLUDE_DIRS       The location of PAPI headers
 
find_path(PAPI_PREFIX
    NAMES include/papi.h
)

find_library(PAPI_LIBRARY
    # Pick the static library first for easier run-time linking.
    NAMES libpapi.a papi
    HINTS ${PAPI_PREFIX}/lib ${HILTIDEPS}/lib
)

find_library(SENSORS_LIBRARY
  NAMES sensors
  DOCS "LM_SENSORS Library"
  )


find_path(PAPI_INCLUDE_DIRS
    NAMES papi.h
    HINTS ${PAPI_PREFIX}/include ${HILTIDEPS}/include
)

if (PAPI_LIBRARY AND SENSORS_LIBRARY)
	SET(PAPI_LIBRARIES ${PAPI_LIBRARY} ${SENSORS_LIBRARY})
ENDIF()

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(PAPI DEFAULT_MSG
    PAPI_LIBRARY
    SENSORS_LIBRARY
    PAPI_INCLUDE_DIRS
)


mark_as_advanced(
    PAPI_PREFIX_DIRS
    PAPI_LIBRARIES
    PAPI_INCLUDE_DIRS
)


================================================
FILE: cmake_modules/FindSLAMBENCH.cmake
================================================


find_path(SLAMBENCH_INCLUDE_PATH SLAMBenchAPI.h)

find_library(SLAMBENCH_UTILS_LIBRARY libslambench-utils.a PATH ${SLAMBENCH_LIBRARY_PATH})
find_library(SLAMBENCH_IO_LIBRARY libslambench-io.a PATH ${SLAMBENCH_LIBRARY_PATH})
find_library(SLAMBENCH_C_WRAPPER_LIBRARY libslambench-c-wrapper.a PATH ${SLAMBENCH_LIBRARY_PATH})
find_library(SLAMBENCH_METRICS_LIBRARY libslambench-metrics.a PATH ${SLAMBENCH_LIBRARY_PATH})

if(SLAMBENCH_INCLUDE_PATH)
  if(SLAMBENCH_UTILS_LIBRARY)
    set(SLAMBENCH_FOUND TRUE)
    SET(SLAMBENCH_INCLUDE_DIR  ${EIGEN3_INCLUDE_DIR} ${SLAMBENCH_INCLUDE_PATH} CACHE STRING "The include paths needed to use SLAMBENCH")
    SET(SLAMBENCH_LIBRARIES    ${SLAMBENCH_UTILS_LIBRARY} -Wl,--whole-archive ${SLAMBENCH_IO_LIBRARY}        ${SLAMBENCH_METRICS_LIBRARY}  -Wl,--no-whole-archive)
    SET(SLAMBENCH_C_WRAPPER                               -Wl,--whole-archive ${SLAMBENCH_C_WRAPPER_LIBRARY}                               -Wl,--no-whole-archive)
  else()
    MESSAGE(STATUS "SLAMBENCH libraries are missing.")
  endif()
else()
  MESSAGE(STATUS "SLAMBENCH headers are missing.")
endif()
mark_as_advanced(
  SLAMBENCH_INCLUDE_DIR
  SLAMBENCH_LIBRARIES
  SLAMBENCH_C_WRAPPER
  )


# Generate appropriate messages
if(SLAMBENCH_FOUND)
  if(NOT SLAMBENCH_FIND_QUIETLY)
    message("-- Found SLAMbench2: ${SLAMBENCH_INCLUDE_DIR}")
  endif(NOT SLAMBENCH_FIND_QUIETLY)
else(SLAMBENCH_FOUND)
  if(SLAMBENCH_FIND_REQUIRED)
    if(NOT SLAMBENCH_INCLUDE_PATH)
      message(FATAL_ERROR "-- Could NOT find SLAMBENCH (missing: SLAMBENCH_INCLUDE_PATH)")
    else ()
      message(FATAL_ERROR "-- Could NOT find SLAMBENCH (missing: SLAMBENCH_LIBRARY_PATH)")
    endif()
    
  endif(SLAMBENCH_FIND_REQUIRED)
endif(SLAMBENCH_FOUND)


================================================
FILE: cmake_modules/FindSuiteSparse.cmake
================================================

IF(SuiteSparse_FOUND)
  SET(SuiteSparse_FIND_QUIETLY TRUE)
ENDIF(SuiteSparse_FOUND)

################ AMD ##################

FIND_PATH(AMD_INCLUDE_DIR NAMES amd.h
  PATHS
  ${SUITE_SPARSE_ROOT}/include
  NO_DEFAULT_PATH
  )

FIND_LIBRARY(AMD_LIBRARY NAMES libamd.a
  PATHS
  ${SUITE_SPARSE_ROOT}/lib
  NO_DEFAULT_PATH
  )


IF(AMD_INCLUDE_DIR AND AMD_LIBRARY)
  message(STATUS "Found AMD_INCLUDE_DIR: ${AMD_INCLUDE_DIR}")
  message(STATUS "Found AMD_LIBRARY:     ${AMD_LIBRARY}")
ENDIF(AMD_INCLUDE_DIR AND AMD_LIBRARY)




################ CAMD ##################

FIND_PATH(CAMD_INCLUDE_DIR NAMES camd.h
  PATHS
  ${SUITE_SPARSE_ROOT}/include
  NO_DEFAULT_PATH
  )

FIND_LIBRARY(CAMD_LIBRARY NAMES libcamd.a
  PATHS
  ${SUITE_SPARSE_ROOT}/lib
  NO_DEFAULT_PATH
  )


IF(CAMD_INCLUDE_DIR AND CAMD_LIBRARY)
  message(STATUS "Found CAMD_INCLUDE_DIR: ${CAMD_INCLUDE_DIR}")
  message(STATUS "Found CAMD_LIBRARY:     ${CAMD_LIBRARY}")
ENDIF(CAMD_INCLUDE_DIR AND CAMD_LIBRARY)


################ COLAMD ##################

FIND_PATH(COALMD_INCLUDE_DIR NAMES colamd.h
    PATHS
    ${SUITE_SPARSE_ROOT}/include
      NO_DEFAULT_PATH
  )

FIND_LIBRARY(COLAMD_LIBRARY NAMES libcolamd.a
     PATHS
     ${SUITE_SPARSE_ROOT}/lib
  NO_DEFAULT_PATH
     )


IF(COLAMD_INCLUDE_DIR AND COLAMD_LIBRARY)
  message(STATUS "Found COLAMD_INCLUDE_DIR: ${COLAMD_INCLUDE_DIR}")
  message(STATUS "Found COLAMD_LIBRARY:     ${COALMD_LIBRARY}")
ENDIF(COLAMD_INCLUDE_DIR AND COLAMD_LIBRARY)





################ SUITESPARSECONFIG ##################

FIND_LIBRARY(SUITESPARSECONFIG_LIBRARY NAMES libsuitesparseconfig.a
  PATHS
  ${SUITE_SPARSE_ROOT}/lib
  NO_DEFAULT_PATH
  )


# Look for csparse; note the difference in the directory specifications!
FIND_PATH(CSPARSE_INCLUDE_DIR NAMES cs.h
  PATHS
  ${SUITE_SPARSE_ROOT}/include
  NO_DEFAULT_PATH
  )

FIND_LIBRARY(CSPARSE_LIBRARY NAMES libcxsparse.a
  PATHS
  ${SUITE_SPARSE_ROOT}/lib
  NO_DEFAULT_PATH
  )

IF(CSPARSE_INCLUDE_DIR AND CSPARSE_LIBRARY AND SUITESPARSECONFIG_LIBRARY)
  message(STATUS "Found CSPARSE_INCLUDE_DIR: ${CSPARSE_INCLUDE_DIR}")
  message(STATUS "Found CSPARSE_LIBRARY:     ${CSPARSE_LIBRARY}")
  message(STATUS "Found SUITESPARSECONFIG_LIBRARY:     ${SUITESPARSECONFIG_LIBRARY}")
  SET(SuiteSparse_FOUND TRUE)
ELSE(CSPARSE_INCLUDE_DIR AND CSPARSE_LIBRARY AND SUITESPARSECONFIG_LIBRARY)
  SET(SuiteSparse_FOUND FALSE)
  if(SuiteSparse_FIND_REQUIRED AND NOT SuiteSparse_FIND_QUIETLY)
      message(FATAL_ERROR "Could not find SuiteSparse libary")
  endif(SuiteSparse_FIND_REQUIRED AND NOT SuiteSparse_FIND_QUIETLY)
ENDIF(CSPARSE_INCLUDE_DIR AND CSPARSE_LIBRARY AND SUITESPARSECONFIG_LIBRARY)

  


################ CHOLMOD ##################

FIND_PATH(CHOLMOD_INCLUDE_DIR NAMES cholmod.h
    PATHS
    ${SUITE_SPARSE_ROOT}/include
  NO_DEFAULT_PATH
    )

FIND_LIBRARY(CHOLMOD_LIBRARY NAMES libcholmod.a
     PATHS
     ${SUITE_SPARSE_ROOT}/lib
  NO_DEFAULT_PATH
   )

IF(CHOLMOD_INCLUDE_DIR AND CHOLMOD_LIBRARY)
 message(STATUS "Found CHOLMOD_INCLUDE_DIR: ${CHOLMOD_INCLUDE_DIR}")
 message(STATUS "Found CHOLMOD_LIBRARY: ${CHOLMOD_LIBRARY}")
ENDIF(CHOLMOD_INCLUDE_DIR AND CHOLMOD_LIBRARY)

find_package(BLAS REQUIRED)
find_package(LAPACK REQUIRED)

SET(CHOLMOD_LIBRARIES ${CHOLMOD_LIBRARY} ${AMD_LIBRARY} ${COLAMD_LIBRARY} ${CSPARSE_LIBRARY} ${SUITESPARSECONFIG_LIBRARY} ${BLA_STATIC}  ${LAPACK_LIBRARIES})


================================================
FILE: cmake_modules/FindTooN.cmake
================================================

find_path(TOON_INCLUDE_PATH TooN/TooN.h
	~/usr/include
	~/usr/.local/include
	~/.local/include
	~/usr/local/include
	/usr/include
	/usr/local/include
	thirdparty
)

if(TOON_INCLUDE_PATH)
	set(TooN_FOUND TRUE)
	set(TOON_INCLUDE_PATHS ${TOON_INCLUDE_PATH} CACHE STRING "The include paths needed to use TooN")
endif()

mark_as_advanced(
	TOON_INCLUDE_PATHS
)


# Generate appropriate messages
if(TooN_FOUND)
    if(NOT TooN_FIND_QUIETLY)
    	   message(STATUS "Found Toon: ${TOON_INCLUDE_PATH}")
    endif(NOT TooN_FIND_QUIETLY)
else(TooN_FOUND)
    if(TooN_FIND_REQUIRED)
	message(FATAL_ERROR "Could NOT find TooN (missing: TOON_INCLUDE_PATH)")
    endif(TooN_FIND_REQUIRED)
endif(TooN_FOUND)


================================================
FILE: cmake_modules/cuda_compute_capability.c
================================================
/*
* Copyright (C) 2011 Florian Rathgeber, florian.rathgeber@gmail.com
*
* This code is licensed under the MIT License.  See the FindCUDA.cmake script
* for the text of the license.
*
* Based on code by Christopher Bruns published on Stack Overflow (CC-BY):
* http://stackoverflow.com/questions/2285185
*/

#include <stdio.h>
#include <cuda_runtime.h>

int main() {
    int deviceCount, device, major = 9999, minor = 9999;
    int gpuDeviceCount = 0;
    struct cudaDeviceProp properties;

    if (cudaGetDeviceCount(&deviceCount) != cudaSuccess)
    {
        printf("Couldn't get device count: %s\n", cudaGetErrorString(cudaGetLastError()));
        return 1;
    }
    /* machines with no GPUs can still report one emulation device */
    for (device = 0; device < deviceCount; ++device) {
        cudaGetDeviceProperties(&properties, device);
        if (properties.major != 9999) {/* 9999 means emulation only */
            ++gpuDeviceCount;
            /*  get minimum compute capability of all devices */
            if (major > properties.major) {
                major = properties.major;
                minor = properties.minor;
            } else if ((major == properties.major) && (minor > properties.minor)) {
                minor = properties.minor;
            }
        }
    }

    /* don't just return the number of gpus, because other runtime cuda
    errors can also yield non-zero return values */
    if (gpuDeviceCount > 0) {
        if ((major == 2 && minor == 1))
        {
            // There is no --arch compute_21 flag for nvcc, so force minor to 0
            minor = 0;
        }
        /* this output will be parsed by FindCUDA.cmake */
        printf("%d%d", major, minor);
        return 0; /* success */
    }
    return 1; /* failure */
}


================================================
FILE: docker/Makefile
================================================

####################################
####       DOCKER PART          ####
####################################

## sudo service docker start

SLAMBENCH2_DIRECTORY=../

.PHONY: ./%-docker-image %-docker-image

./tmp/%-docker-image/DockerFile : ./%.docker
	mkdir -p ./tmp/$*-docker-image/slambench2
	rm -rf ./tmp/$*-docker-image/slambench2/*
	cp -r ${SLAMBENCH2_DIRECTORY}/CMakeLists.txt ${SLAMBENCH2_DIRECTORY}/benchmarks ${SLAMBENCH2_DIRECTORY}/cmake_modules ${SLAMBENCH2_DIRECTORY}/framework ${SLAMBENCH2_DIRECTORY}/Makefile ./tmp/$*-docker-image/slambench2
	cp -rf $< ./tmp/$*-docker-image/DockerFile
#	cp -f nvidia-driver.run ./tmp/$*-docker-image/

fedora24 :
	make fedora-24-docker-image

ubuntu14 :
	make ubuntu-14.04-docker-image

ubuntu16 :
	make ubuntu-16.04-docker-image




nvidia_version=$(shell cat /proc/driver/nvidia/version | head -n 1 | awk '{ print $$8 }')

nvidia-driver.run :
	wget -O nvidia-driver.run "http://us.download.nvidia.com/XFree86/Linux-x86_64/${nvidia_version}/NVIDIA-Linux-x86_64-${nvidia_version}.run"

cuda-ubuntu16 : nvidia-driver.run
	make cuda-ubuntu-16.04-docker-image

%-docker-image: ./%.docker ./tmp/%-docker-image/DockerFile
	docker build -f ./tmp/$*-docker-image/DockerFile -t  bbodin/slambench:$*  ./tmp/$*-docker-image


================================================
FILE: docker/cuda-ubuntu-16.04.docker
================================================
FROM ubuntu:16.04


# Dependencies
##################################################################

RUN apt-get -y update && apt-get -y install libvtk6.2 libvtk6-dev unzip libflann-dev wget mercurial git gcc cmake python-numpy freeglut3 freeglut3-dev libglew1.5 libglew1.5-dev libglu1-mesa libglu1-mesa-dev libgl1-mesa-glx libgl1-mesa-dev libxmu-dev libxi-dev  libboost-all-dev cvs libgoogle-glog-dev libatlas-base-dev gfortran  gtk2.0 libgtk2.0-dev libyaml-cpp-dev libyaml-dev  libproj-dev

RUN apt-get -y update && apt-get -y install libhdf5-dev libhdf5-dev

# Prepare
##################################################################

RUN git config --global user.email "you@example.com"
RUN git config --global user.name "Your Name"


# Copy deps building system only
##################################################################

RUN mkdir -p /slambench2/framework
COPY ./slambench2/Makefile /slambench2/Makefile
COPY ./slambench2/framework/makefiles /slambench2/framework/makefiles
RUN ls -alp /slambench2/ /slambench2/framework/makefiles

# Prepare CUDA 
##################################################################

RUN DEBIAN_FRONTEND=noninteractive apt-get -y install g++-4.8
ADD nvidia-driver.run /tmp/nvidia-driver.run
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y module-init-tools
RUN sh /tmp/nvidia-driver.run -a -N --ui=none --no-kernel-module
RUN rm /tmp/nvidia-driver.run
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y mesa-utils
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install nvidia-cuda-toolkit clinfo


# Build deps
##################################################################

RUN apt-get -y update && apt-get -y install flex
RUN make -C /slambench2  gcc_cuda

RUN make -C /slambench2  toon eigen3 cvd flann freeimage g2o gvars opencv opengv opentuner pangolin pcl suitesparse  brisk ceres 




# Copy entire slambench folder
##################################################################

COPY ./slambench2 /slambench2

# Build slambench2
##################################################################

RUN make -C /slambench2 slambench APPS=all


# Test slambench2
##################################################################


RUN make -C /slambench2 datasets/ICL_NUIM/living_room_traj2_loop.slam

#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-cpp-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-openmp-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-notoon-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/liblsdslam-cpp-library.so -fl 30
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libinfinitam-cuda-library.so -fl 30
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libmonoslam-sequential-library.so -fl 30
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libptam-original_mp-library.so -fl 30
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libokvis-original-library.so -fl 30



================================================
FILE: docker/fastCI.docker
================================================
FROM fedora:26

# Dependencies
##################################################################

RUN  dnf install -y git wget gcc gcc-c++ make mercurial cmake unzip
RUN  dnf install -y yaml-cpp-devel

# Prepare
##################################################################

RUN git config --global user.email "you@example.com"
RUN git config --global user.name "Your Name"

# Copy
##################################################################

RUN mkdir /slambench2
COPY ./slambench2/ /slambench2/
RUN ls /slambench2


# Build deps
##################################################################

RUN make -C /slambench2  toon
RUN make -C /slambench2  eigen3

# Build slambench2
##################################################################

RUN make -C /slambench2 slambench APPS=kfusion

# Test slambench2
##################################################################

RUN make -C /slambench2 datasets/TUM/freiburg1/rgbd_dataset_freiburg1_desk.slam
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/TUM/freiburg1/rgbd_dataset_freiburg1_desk.slam  -load ./build/lib/libkfusion-cpp-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/TUM/freiburg1/rgbd_dataset_freiburg1_desk.slam  -load ./build/lib/libkfusion-cpp-library.so=kf1  -load ./build/lib/libkfusion-openmp-library.so=kf2 -fl 30 -kf1-s 5 -kf2-s 5 -kf1-d  1.71,2.4,1.152 -kf1-z 8 -kf2-d  1.71,2.4,1.152 -kf2-z 8


================================================
FILE: docker/fedora-24.docker
================================================
FROM fedora:24

# Dependencies
##################################################################

RUN dnf install -y emacs gtk2-devel vtk-devel  cmake make git mercurial wget unzip gcc gcc-c++ lapack blas lapack-devel blas-devel findutils  cvs  glut-devel glew-devel boost-devel glog-devel gflags-devel libXmu-devel libyaml libyaml-devel yaml-cpp-devel tar


# Prepare
##################################################################

RUN git config --global user.email "you@example.com"
RUN git config --global user.name "Your Name"

# Copy
##################################################################

RUN mkdir /slambench2
COPY ./slambench2/ /slambench2/
RUN ls /slambench2


# Build deps
##################################################################

RUN make -C /slambench2  toon
RUN make -C /slambench2  eigen3
RUN make -C /slambench2  cvd
RUN make -C /slambench2  flann
RUN make -C /slambench2  freeimage
RUN make -C /slambench2  g2o
RUN make -C /slambench2  gvars
RUN make -C /slambench2  opencv
RUN make -C /slambench2  opengv
RUN make -C /slambench2  opentuner
RUN make -C /slambench2  pangolin
RUN make -C /slambench2  pcl
RUN make -C /slambench2  suitesparse
RUN make -C /slambench2  brisk
RUN make -C /slambench2  ceres 


# Build slambench2
##################################################################

RUN make -C /slambench2 slambench
RUN make -C /slambench2 slambench APPS=okvis
RUN make -C /slambench2 slambench APPS=ptam
RUN make -C /slambench2 slambench APPS=orbslam2
RUN make -C /slambench2 slambench APPS=kfusion
RUN make -C /slambench2 slambench APPS=monoslam
RUN make -C /slambench2 slambench APPS=lsdslam
RUN make -C /slambench2 slambench APPS=efusion


# Test slambench2
##################################################################


RUN make -C /slambench2 datasets/ICL_NUIM/living_room_traj2_loop.slam

RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-cpp-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-openmp-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-notoon-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/liblsdslam-cpp-library.so -fl 30
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libinfinitam-cuda-library.so -fl 30
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libmonoslam-sequential-library.so -fl 30
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libptam-original_mp-library.so -fl 30
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libokvis-original-library.so -fl 30



================================================
FILE: docker/fedora-25.docker
================================================
FROM fedora:25

# Dependencies
##################################################################

RUN dnf install -y emacs gtk2-devel vtk-devel  cmake make git mercurial wget unzip gcc gcc-c++ lapack blas lapack-devel blas-devel findutils  cvs  glut-devel glew-devel boost-devel glog-devel gflags-devel libXmu-devel libyaml libyaml-devel yaml-cpp-devel tar


# Prepare
##################################################################

RUN git config --global user.email "you@example.com"
RUN git config --global user.name "Your Name"

# Copy
##################################################################

RUN mkdir /slambench2
COPY ./slambench2/ /slambench2/
RUN ls /slambench2


# Build deps
##################################################################

RUN make -C /slambench2  toon
RUN make -C /slambench2  eigen3
RUN make -C /slambench2  cvd
RUN make -C /slambench2  flann
RUN make -C /slambench2  freeimage
RUN make -C /slambench2  g2o
RUN make -C /slambench2  gvars
RUN make -C /slambench2  opencv
RUN make -C /slambench2  opengv
RUN make -C /slambench2  opentuner
RUN make -C /slambench2  pangolin
RUN make -C /slambench2  pcl
RUN make -C /slambench2  suitesparse
RUN make -C /slambench2  brisk
RUN make -C /slambench2  ceres 


# Build slambench2
##################################################################

RUN make -C /slambench2 slambench
RUN make -C /slambench2 slambench APPS=okvis
RUN make -C /slambench2 slambench APPS=ptam
RUN make -C /slambench2 slambench APPS=orbslam2
RUN make -C /slambench2 slambench APPS=kfusion
RUN make -C /slambench2 slambench APPS=monoslam
RUN make -C /slambench2 slambench APPS=lsdslam
RUN make -C /slambench2 slambench APPS=efusion


# Test slambench2
##################################################################


RUN make -C /slambench2 datasets/ICL_NUIM/living_room_traj2_loop.slam

RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-cpp-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-openmp-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-notoon-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/liblsdslam-cpp-library.so -fl 30
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libinfinitam-cuda-library.so -fl 30
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libmonoslam-sequential-library.so -fl 30
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libptam-original_mp-library.so -fl 30
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libokvis-original-library.so -fl 30



================================================
FILE: docker/fedora-26.docker
================================================
FROM fedora:26

# Dependencies
##################################################################

RUN dnf install -y emacs gtk2-devel vtk-devel  cmake make git mercurial wget unzip gcc gcc-c++ lapack blas lapack-devel blas-devel findutils  cvs  glut-devel glew-devel boost-devel glog-devel gflags-devel libXmu-devel libyaml libyaml-devel yaml-cpp-devel tar



# Prepare
##################################################################

RUN git config --global user.email "you@example.com"
RUN git config --global user.name "Your Name"

# Copy
##################################################################

RUN mkdir /slambench2
COPY ./slambench2/ /slambench2/
RUN ls /slambench2


# Build deps
##################################################################

RUN make -C /slambench2  toon
RUN make -C /slambench2  eigen3
RUN make -C /slambench2  cvd
RUN make -C /slambench2  flann
RUN make -C /slambench2  freeimage
RUN make -C /slambench2  g2o
RUN make -C /slambench2  gvars
RUN make -C /slambench2  opencv
RUN make -C /slambench2  opengv
RUN make -C /slambench2  opentuner
RUN make -C /slambench2  pangolin
RUN make -C /slambench2  pcl
RUN make -C /slambench2  suitesparse
RUN make -C /slambench2  brisk
RUN make -C /slambench2  ceres 


# Build slambench2
##################################################################

RUN make -C /slambench2 slambench
RUN make -C /slambench2 slambench APPS=okvis
RUN make -C /slambench2 slambench APPS=ptam
RUN make -C /slambench2 slambench APPS=orbslam2
RUN make -C /slambench2 slambench APPS=kfusion
RUN make -C /slambench2 slambench APPS=monoslam
RUN make -C /slambench2 slambench APPS=lsdslam
RUN make -C /slambench2 slambench APPS=efusion


# Test slambench2
##################################################################


RUN make -C /slambench2 datasets/ICL_NUIM/living_room_traj2_loop.slam

RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-cpp-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-openmp-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-notoon-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/liblsdslam-cpp-library.so -fl 30
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libinfinitam-cuda-library.so -fl 30
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libmonoslam-sequential-library.so -fl 30
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libptam-original_mp-library.so -fl 30
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libokvis-original-library.so -fl 30



================================================
FILE: docker/github.docker
================================================
FROM bbodin/slambench:travis-deps

# Copy
##################################################################

COPY ./slambench2/ /slambench2/
RUN ls /slambench2

# Build slambench2
##################################################################

RUN make -C /slambench2 slambench   SBQUIET=1
RUN make -C /slambench2 algorithms  SBQUIET=1
RUN make -C /slambench2 slambench SBQUIET=1 APPS=all

RUN make -C /slambench2 datasets/ICL_NUIM/living_room_traj2_loop.slam  SBQUIET=1 

RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-cpp-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-openmp-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/liblsdslam-cpp-library.so -fl 30
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libinfinitam-cpp-library.so -fl 30
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libmonoslam-cpp-library.so -fl 30
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libptam-original_mp-library.so -fl 30 
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libokvis-original-library.so -fl 30 



================================================
FILE: docker/run_cuda.sh
================================================
#!/bin/sh

#version_gt() { test "$(echo "$@" | tr " " "\n" | sort -V | tail -n 1)" = "$1"; }
#docker_version=$(docker version | grep 'Client version' | awk '{split($0,a,":"); print a[2]}' | tr -d ' ')
# Docker 1.3.0 or later is required for --device

#if test $# -lt 1; then
	# Get the latest opengl-nvidia build
	# and start with an interactive terminal enabled
#	args="-i -t $(docker images | grep ^opengl-nvidia | head -n 1 | awk '{ print $1":"$2 }')"
#else
        # Use this script with derived images, and pass your 'docker run' args
#	args="$@"
#fi



echo "preparation"

XSOCK=/tmp/.X11-unix
XAUTH=/tmp/.docker.xauth
touch $XAUTH
echo "XSOCK=${XSOCK}"
echo "XAUTH=${XAUTH}"
echo "xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -"
xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -

echo "Run"

echo docker run \
	--runtime=nvidia \
	-v $XSOCK:$XSOCK:rw \
	-v $XAUTH:$XAUTH:rw \
	--device=/dev/nvidia0:/dev/nvidia0 \
	--device=/dev/nvidiactl:/dev/nvidiactl \
	--device=/dev/nvidia-uvm:/dev/nvidia-uvm \
	-e DISPLAY=$DISPLAY \
	-e XAUTHORITY=$XAUTH \
	-it \
	bbodin/slambench:cuda-ubuntu-16.04 $@

docker run \
	--runtime=nvidia \
	-v $XSOCK:$XSOCK:rw \
	-v $XAUTH:$XAUTH:rw \
	--device=/dev/nvidia0:/dev/nvidia0 \
	--device=/dev/nvidiactl:/dev/nvidiactl \
	--device=/dev/nvidia-uvm:/dev/nvidia-uvm \
	-e DISPLAY=$DISPLAY \
	-e XAUTHORITY=$XAUTH \
	-it \
	bbodin/slambench:cuda-ubuntu-16.04 $@


================================================
FILE: docker/travis-deps.docker
================================================
FROM ubuntu:16.04


# Dependencies
##################################################################

RUN apt-get -y update && apt-get -y install libvtk6.2 libvtk6-dev unzip libflann-dev wget mercurial git gcc cmake python-numpy freeglut3 freeglut3-dev libglew1.5 libglew1.5-dev libglu1-mesa libglu1-mesa-dev libgl1-mesa-glx libgl1-mesa-dev libxmu-dev libxi-dev  libboost-all-dev cvs libgoogle-glog-dev libatlas-base-dev gfortran  gtk2.0 libgtk2.0-dev libyaml-cpp-dev libyaml-dev  libproj-dev

# Prepare
##################################################################

RUN git config --global user.email "you@example.com"
RUN git config --global user.name "Your Name"


# Copy deps building system only
##################################################################

RUN mkdir -p /slambench2/framework
COPY ./slambench2/Makefile /slambench2/Makefile
COPY ./slambench2/framework/makefiles /slambench2/framework/makefiles
RUN ls -alp /slambench2/ /slambench2/framework/makefiles


# Build deps
##################################################################

RUN make -C /slambench2  toon eigen3 cvd flann freeimage g2o gvars opencv opengv opentuner pangolin pcl suitesparse  brisk ceres 

# Copy entire slambench folder
##################################################################

#COPY ./slambench2 /slambench2

# Build slambench2
##################################################################

#RUN make -C /slambench2 slambench APPS=all


# Test slambench2
##################################################################


#RUN make -C /slambench2 datasets/ICL_NUIM/living_room_traj2_loop.slam

#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-cpp-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-openmp-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-notoon-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/liblsdslam-cpp-library.so -fl 30
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libinfinitam-cuda-library.so -fl 30
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libmonoslam-sequential-library.so -fl 30
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libptam-original_mp-library.so -fl 30
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libokvis-original-library.so -fl 30



================================================
FILE: docker/ubuntu-14.04-bitbucket.docker
================================================
FROM bbodin/slambench:ubuntu-14.04-deps

# Copy
##################################################################

COPY ./slambench2/ /slambench2/
RUN ls /slambench2

# Build slambench2
##################################################################

RUN make -C /slambench2 slambench
RUN make -C /slambench2 slambench APPS=okvis
RUN make -C /slambench2 slambench APPS=ptam
RUN make -C /slambench2 slambench APPS=kfusion
RUN make -C /slambench2 slambench APPS=monoslam
RUN make -C /slambench2 slambench APPS=lsdslam
RUN make -C /slambench2 slambench APPS=efusion
RUN make -C /slambench2 slambench APPS=infinitam

RUN make -C /slambench2 datasets/ICL_NUIM/living_room_traj2_loop.slam

RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-cpp-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-openmp-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-notoon-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/liblsdslam-cpp-library.so -fl 30
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libinfinitam-cuda-library.so -fl 30
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libmonoslam-sequential-library.so -fl 30
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libptam-original_mp-library.so -fl 30 
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libokvis-original-library.so -fl 30 



================================================
FILE: docker/ubuntu-14.04-deps.docker
================================================
FROM ubuntu:14.04

# Dependencies
##################################################################

RUN apt-get -y update && apt-get -y install unzip libflann-dev wget libyaml-cpp-dev mercurial git gcc cmake  python-numpy freeglut3 freeglut3-dev  libglew1.5 libglew1.5-dev libglu1-mesa libglu1-mesa-dev libgl1-mesa-glx libgl1-mesa-dev  libxmu-dev libxi-dev  libboost-all-dev cvs  gfortran  libatlas-base-dev  libgoogle-glog-dev libgtk2.0-dev libvtk5.8 libvtk5-dev 
RUN apt-get -y update && apt-get -y install dictionaries-common
RUN /usr/share/debconf/fix_db.pl
RUN dpkg-reconfigure dictionaries-common
RUN apt-get -y update && apt-get -y install gtk2.0


# Copy
##################################################################

RUN mkdir /slambench2
COPY ./slambench2/ /slambench2/
RUN ls /slambench2


# Build deps
##################################################################

RUN make -C /slambench2  toon
RUN make -C /slambench2  eigen3
RUN make -C /slambench2  cvd
RUN make -C /slambench2  flann
RUN make -C /slambench2  freeimage
RUN make -C /slambench2  g2o
RUN make -C /slambench2  gvars
RUN make -C /slambench2  opencv
RUN make -C /slambench2  opengv
RUN make -C /slambench2  opentuner
RUN make -C /slambench2  pangolin
RUN make -C /slambench2  pcl
RUN make -C /slambench2  suitesparse
RUN make -C /slambench2  brisk
RUN make -C /slambench2  ceres 


# Keep only deps
##################################################################

RUN rm -rf /slambench2/CMakeLists.txt /slambench2/benchmarks /slambench2/cmake /slambench2/interfaces /slambench2/frontends /slambench2/framework /slambench2/Makefile /slambench2/build
RUN rm -rf /slambench2/deps/repos
RUN rm -rf /slambench2/datasets
RUN rm -rf /slambench2/install
RUN rm -rf /slambench2/temp
RUN ls /slambench2



================================================
FILE: docker/ubuntu-14.04.docker
================================================
FROM ubuntu:14.04

# Dependencies
##################################################################

RUN apt-get -y update && apt-get -y install unzip libflann-dev wget libyaml-cpp-dev mercurial git gcc cmake  python-numpy freeglut3 freeglut3-dev  libglew1.5 libglew1.5-dev libglu1-mesa libglu1-mesa-dev libgl1-mesa-glx libgl1-mesa-dev  libxmu-dev libxi-dev  libboost-all-dev cvs  gfortran  libatlas-base-dev  libgoogle-glog-dev libgtk2.0-dev libvtk5.8 libvtk5-dev dictionaries-common
RUN /usr/share/debconf/fix_db.pl
RUN dpkg-reconfigure dictionaries-common
RUN apt-get -y update && apt-get -y install gtk2.0

# Prepare
##################################################################

RUN git config --global user.email "you@example.com"
RUN git config --global user.name "Your Name"


# Copy deps building system only
##################################################################

RUN mkdir -p /slambench2/framework
COPY ./slambench2/Makefile /slambench2/Makefile
COPY ./slambench2/framework/makefiles /slambench2/framework/makefiles
RUN ls -alp /slambench2/ /slambench2/framework/makefiles


# Build deps
##################################################################

RUN make -C /slambench2  toon eigen3 cvd flann freeimage g2o gvars opencv opengv opentuner pangolin pcl suitesparse  brisk ceres 

# Copy entire slambench folder
##################################################################

COPY ./slambench2 /slambench2

# Build slambench2
##################################################################

RUN make -C /slambench2 slambench APPS=all


# Test slambench2
##################################################################


RUN make -C /slambench2 datasets/ICL_NUIM/living_room_traj2_loop.slam

RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-cpp-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-openmp-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-notoon-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/liblsdslam-cpp-library.so -fl 30
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libinfinitam-cpp-library.so -fl 30
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libinfinitam-openmp-library.so -fl 30
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libmonoslam-sequential-library.so -fl 30
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libptam-original_mp-library.so -fl 30
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libokvis-original-library.so -fl 30



================================================
FILE: docker/ubuntu-16.04.docker
================================================
FROM ubuntu:16.04


# Dependencies
##################################################################

RUN apt-get -y update && apt-get -y install libvtk6.2 libvtk6-dev unzip libflann-dev wget mercurial git gcc cmake python-numpy freeglut3 freeglut3-dev libglew1.5 libglew1.5-dev libglu1-mesa libglu1-mesa-dev libgl1-mesa-glx libgl1-mesa-dev libxmu-dev libxi-dev  libboost-all-dev cvs libgoogle-glog-dev libatlas-base-dev gfortran  gtk2.0 libgtk2.0-dev libyaml-cpp-dev libyaml-dev  libproj-dev

# Prepare
##################################################################

RUN git config --global user.email "you@example.com"
RUN git config --global user.name "Your Name"


# Copy deps building system only
##################################################################

RUN mkdir -p /slambench2/framework
COPY ./slambench2/Makefile /slambench2/Makefile
COPY ./slambench2/framework/makefiles /slambench2/framework/makefiles
RUN ls -alp /slambench2/ /slambench2/framework/makefiles


# Build deps
##################################################################

RUN make -C /slambench2  toon eigen3 cvd flann freeimage g2o gvars opencv opengv opentuner pangolin pcl suitesparse  brisk ceres 

# Copy entire slambench folder
##################################################################

COPY ./slambench2 /slambench2

# Build slambench2
##################################################################

RUN make -C /slambench2 slambench APPS=all


# Test slambench2
##################################################################


RUN make -C /slambench2 datasets/ICL_NUIM/living_room_traj2_loop.slam

RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-cpp-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-openmp-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-notoon-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/liblsdslam-cpp-library.so -fl 30
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libinfinitam-cuda-library.so -fl 30
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libmonoslam-sequential-library.so -fl 30
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libptam-original_mp-library.so -fl 30
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libokvis-original-library.so -fl 30



================================================
FILE: docker/ubuntu-16.10.docker
================================================
FROM ubuntu:16.10

# Dependencies
##################################################################

RUN df -h
RUN apt-get -y update 

# Dependencies
RUN apt-get -y install libvtk6.3 libvtk6-dev unzip libflann-dev wget mercurial git gcc cmake python-numpy freeglut3 freeglut3-dev libglew1.5 libglew1.5-dev libglu1-mesa libglu1-mesa-dev libgl1-mesa-glx libgl1-mesa-dev libxmu-dev libxi-dev  libboost-all-dev cvs libgoogle-glog-dev libatlas-base-dev gfortran  gtk2.0 libgtk2.0-dev l libyaml-dev


# Prepare
##################################################################

RUN git config --global user.email "you@example.com"
RUN git config --global user.name "Your Name"

# Copy
##################################################################

RUN mkdir /slambench2
COPY ./slambench2/ /slambench2/
RUN ls /slambench2


# Build deps
##################################################################

RUN make -C /slambench2  toon
RUN make -C /slambench2  eigen3
RUN make -C /slambench2  cvd
RUN make -C /slambench2  flann
RUN make -C /slambench2  freeimage
RUN make -C /slambench2  g2o
RUN make -C /slambench2  gvars
RUN make -C /slambench2  opencv
RUN make -C /slambench2  opengv
RUN make -C /slambench2  opentuner
RUN make -C /slambench2  pangolin
RUN make -C /slambench2  pcl
RUN make -C /slambench2  suitesparse
RUN make -C /slambench2  brisk
RUN make -C /slambench2  ceres 


# Build slambench2
##################################################################

RUN make -C /slambench2 slambench
RUN make -C /slambench2 slambench APPS=okvis
RUN make -C /slambench2 slambench APPS=ptam
RUN make -C /slambench2 slambench APPS=orbslam2
RUN make -C /slambench2 slambench APPS=kfusion
RUN make -C /slambench2 slambench APPS=monoslam
RUN make -C /slambench2 slambench APPS=lsdslam
RUN make -C /slambench2 slambench APPS=efusion

# Test slambench2
##################################################################


RUN make -C /slambench2 datasets/ICL_NUIM/living_room_traj2_loop.slam

RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-cpp-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-openmp-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libkfusion-notoon-library.so -fl 30 -s 5 -d  1.71,2.4,1.152 -z 8
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/liblsdslam-cpp-library.so -fl 30
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libinfinitam-cuda-library.so -fl 30
RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libmonoslam-sequential-library.so -fl 30
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libptam-original_mp-library.so -fl 30
#RUN cd /slambench2 && ./build/bin/benchmark_loader -i ./datasets/ICL_NUIM/living_room_traj2_loop.slam  -load ./build/lib/libokvis-original-library.so -fl 30



================================================
FILE: framework/CMakeLists.txt
================================================
#######################################################
# This file is the CMAKE script for SLAMBench Libraries
#######################################################
cmake_minimum_required(VERSION 3.0)
project(slambench)
# Find most common packages
#######################################################
find_package(GLUT)
find_package(OpenGL)
find_package(Eigen3 REQUIRED)
find_package(PAPI)

#### BUILD SLAMBENCH AND TOOLS ####
add_subdirectory(shared) # SLAMBench Shared library
IF(NOT ANDROID)
    add_subdirectory(tools)  # SLAMBench Tools
ENDIF()



================================================
FILE: framework/makefiles/README.md
================================================
# SLAMBench Dependency System #

## Description ##

The idea is to maximise the chance of a good build, by selection the best cocktail of libraries.

 Name          | repository                                                     | Commit / Tag / Version                   | Date         | Why                  | Notes
-------------  | -------------------------------------------------------------- | ---------------------------------------- | ------------ | -------------------- | ---------
BRISK          | https://www.doc.ic.ac.uk/~sleutene/software/brisk-2.0.3.zip    | 2.0.3                                    | N/A          | OKVIS                | -
CERES          | https://ceres-solver.googlesource.com/ceres-solver             | 7c57de5080c9f5a4f067e2d20b5f33bad5b1ade6 | ?            | OKVIS                | -
CVD            | https://github.com/edrosten/libcvd                             | d190474150d4695e4c957863c5121c7eb79615d9 |              | PTAM                 | -
EIGEN          | http://bitbucket.org/eigen/eigen                               | 3.2                                      |              | SLAMBench            | -
FLANN          | https://github.com/mariusmuja/flann                            | 06a49513138009d19a1f4e0ace67fbff13270c69 |  5 Aug 2016  | PCL                  | -
FREEIMAGE      | https://github.com/mikesart/freeimage.git                      | d49fb3982c1cb7826bc10edaf5c0ac4d9104660f |              |                      | + Patches
FREENECT       | https://github.com/OpenKinect/libfreenect.git                  | 83e57e1318cc64c9aabac481b9e330acc1914a23 |              | SLAMBench            | -
G2O            | https://github.com/RainerKuemmerle/g2o                         | 1b118ac2ed2055c4016c3b7cbd710225ed1651af | 12 Jan 2017  | LSDSLAM              | -
GCC            | git://gcc.gnu.org/git/gcc.git                                  | gcc-5_3_0-release                        |              |                      | + ec1cc0263f156f70693a62cf17b254a0029f4852
GVARS          | https://github.com/edrosten/gvars                              | fc58c500c9d8f8713fb87a98cf7fb6be1db3295f |              | PTAM                 | -
LIBOPENCL-STUB | https://github.com/krrishnarraj/libopencl-stub.git             | b4f84459e3a3a14d6a18b5dabe0a6ae9cbef709e |              |                      | -
LIBUSB         | https://github.com/libusb/libusb.git                           | 8ddd8d994df6e367603266630bc2fe83b9cad868 |              |  OpenNI              | -
OPENCV         | https://github.com/Itseez/opencv.git                           | 2c9547e                                  |              | LSDSLAM              | + Patches
OPENGV         | https://github.com/laurentkneip/opengv                         | cc32b16281aa6eab67cb28a61cf87a2a5c2b0961 |              |                      | -
OPENNI 1.5     | https://github.com/OpenNI/OpenNI.git                           | 54e899c492f69aa8fa3e133fdd7d6b468f017b99 |              |  SLAMBench           | + Patches
OPENNI2        | https://github.com/occipital/OpenNI2/                          | 1fce8edffab43c4a4cf201cff86f415b07a2d37f |              |  SLAMBench           | -
OPENTUNER      | https://github.com/jansel/opentuner.git                        | master...                                |              | DSE                  | -
PANGOLIN       | https://github.com/stevenlovegrove/Pangolin.git                | 8b8b7b96adcf58ac2755dedd3f681fc512385af0 |              | GUI, EFUSION         | -
PCL            | https://github.com/PointCloudLibrary/pcl.git                   | 6fb1b65d3099a915255b070269b1ac78ed384921 |              | OR                   | -
SensorKinect   | https://github.com/avin2/SensorKinect.git                      | 15f1975d5e50d84ca06ff784f83f8b7836749a7b |              | OpenNI               | -
SUITESPARSE    | https://github.com/jluttine/suitesparse.git                    | v4.3.1                                   |              | EFUSION              | -
TOON           | https://github.com/edrosten/TooN.git                           | 92241416d2a4874fd2334e08a5d417dfea6a1a3f | 21 Sep 2015  | KFUSION, PTAM, CVD   | -


================================================
FILE: framework/makefiles/brisk.make
================================================
BRISK_INCLUDE_DIR=${DEPS_DIR}/brisk/include
BRISK_DIR=${DEPS_DIR}/brisk/lib/CMake/brisk/

${REPOS_DIR}/brisk :
	mkdir ${REPOS_DIR} -p
	rm $@ -rf
	mkdir $@ -p
	cd $@ ; wget --no-check-certificate https://www.doc.ic.ac.uk/~sleutene/software/brisk-2.0.5.zip
	cd $@ ; unzip *.zip ; rm brisk-2.0.5.zip;
	sed -i.bak "s/[#]include [<]algo/#include<functional>\\n#include<algo/" ${REPOS_DIR}/brisk/src/brisk-feature-detector.cc

${DEPS_DIR}/brisk : ${REPOS_DIR}/brisk opencv
	cd ${REPOS_DIR}/brisk && OpenCV_DIR=${OPENCV_DIR} cmake . "-DCMAKE_INSTALL_PREFIX:PATH=$@" 
	cd ${REPOS_DIR}/brisk && make -j2
	mkdir -p $@
	cd ${REPOS_DIR}/brisk && make install

brisk :
	+if [ ! -d ${DEPS_DIR}/$@ ] ; then make ${DEPS_DIR}/$@ ; else echo "$@ skipped."; fi
.PHONY: brisk


================================================
FILE: framework/makefiles/ceres.make
================================================
CERES_DIR=${DEPS_DIR}/ceres/

#include eigen3 # not required

${REPOS_DIR}/ceres :
	mkdir -p ${REPOS_DIR}
	rm -rf ${REPOS_DIR}/ceres	
	cd ${REPOS_DIR} ; git clone "https://ceres-solver.googlesource.com/ceres-solver" ceres
	cd $@ && git checkout 1.12.0

${DEPS_DIR}/ceres : ${REPOS_DIR}/ceres eigen3 suitesparse
	mkdir ${REPOS_DIR}/ceres/build -p
	rm ${REPOS_DIR}/ceres/build/* -rf
	cd ${REPOS_DIR}/ceres/build && cmake .. "-DCMAKE_INSTALL_PREFIX:PATH=$@" "-DBUILD_EXAMPLES:BOOL=OFF" "-DBUILD_TESTING:BOOL=OFF" \
	                                         -DCMAKE_CXX_FLAGS="-w -O3 -std=c++11" -DEIGEN_INCLUDE_DIR=${EIGEN3_INCLUDE_DIR} \
	                                         -DSUITESPARSE_INCLUDE_DIR_HINTS=${SUITE_SPARSE_ROOT}/include\
	                                         -DSUITESPARSE_LIBRARY_DIR_HINTS=${SUITE_SPARSE_ROOT}/lib\
	                                         -DBUILD_DOCUMENTATION=OFF -DBUILD_SHARED_LIBS=ON\
	                                         -DCXSPARSE_INCLUDE_DIR=${SUITE_SPARSE_ROOT}/include -DCXSPARSE_LIBRARY=${SUITE_SPARSE_ROOT}/lib/libcxsparse.a\
	                                         -DCERES_USING_SHARED_LIBRARY=OFF
#	                                         -DGFLAGS=OFF
#	                                         -DSUITESPARSE=OFF
#	                                         -DCXSPARSE=OFF
#	                                         -DLAPACK=OFF
#	                                         
#	                                         -DOPENMP=OFF
	cd ${REPOS_DIR}/ceres/build && make 	
	mkdir -p $@
	cd ${REPOS_DIR}/ceres/build && make install

ceres :
	+if [ ! -d ${DEPS_DIR}/$@ ] ; then make ${DEPS_DIR}/$@ ; else echo "$@ skipped."; fi
.PHONY: ceres


================================================
FILE: framework/makefiles/cvd.make
================================================


CVD_INCLUDE_DIR=${DEPS_DIR}/cvd/include
CVD_LIBRARY=${DEPS_DIR}/cvd/lib/libcvd.so


${REPOS_DIR}/cvd :
	mkdir ${REPOS_DIR} -p
	rm ${REPOS_DIR}/cvd -rf
	git clone "https://github.com/edrosten/libcvd" ${REPOS_DIR}/cvd
	cd ${REPOS_DIR}/cvd && git checkout d190474150d4695e4c957863c5121c7eb79615d9

${DEPS_DIR}/cvd: ${REPOS_DIR}/cvd toon
	cd ${REPOS_DIR}/cvd && ./configure --prefix=$@ --without-ffmpeg  --without-v4l1buffer --without-dc1394v1 --without-dc1394v2 CPPFLAGS="-I${DEPS_DIR}/toon/include "
	mkdir -p $@
	+cd ${REPOS_DIR}/cvd && make install


android-cvd: ${ANDROID_DEPS_DIR}/cvd

cvd :
	+if [ ! -d ${DEPS_DIR}/$@ ] ; then make ${DEPS_DIR}/$@ ; else echo "$@ skipped."; fi
.PHONY: cvd android-cvd


================================================
FILE: framework/makefiles/dataset-utils.makefile
================================================
####################################
#### DATA SET GENERATION        ####
####################################
check_generator:=if [ ! -e ./build/bin/dataset-generator ] ; then make slambench ; fi

#### OpenLORIS-Scene ####
datasets/OpenLORIS/%.7z :  # Example : $* = office1/office1-3
	# extract 7z from the tar file of the scene, e.g. office1-1_7-package.tar
	for f in $(@D)/*-package.tar; do echo $$f && mkdir -p $(@D) && tar xvf $$f -C $(@D); done
	if [ ! -f $@ ]; then echo "Could not find $(@D)*-package.tar or $@. Please download the data first."; fi

datasets/OpenLORIS/%.dir : ./datasets/OpenLORIS/%.7z
	7z x $< -o$(@D) -aos
	# add the '.dir' suffix
	mv $(subst .7z,,$<) $(subst .7z,.dir,$<)

datasets/OpenLORIS/%.slam : ./datasets/OpenLORIS/%.dir
	${check_generator}
	./build/bin/dataset-generator -d OpenLORIS -i $</ -o $@ $(DATASET_OPTIONS)
	echo "Generated $@"

datasets/OpenLORIS/%.all :
	# if there are any tar, untar them; then build each 7z into a slam file
	scene=datasets/OpenLORIS/$*; \
	if [ -f $$scene*-package.tar ]; then \
		mkdir -p $$scene; \
		for f in $$scene*-package.tar; do \
			echo $$f && tar xvf $$f -C $$scene; \
		done; \
	fi; \
	for f in $$scene/*.7z; do \
		target=`echo $$f | tr .7z .sl`am ; \
		echo =============== $$target =============== ; \
		$(MAKE) $$target; \
	done

.SECONDARY: $(OBJS)


#### EuRoCMAV ####
./datasets/EuRoCMAV/%.zip :  # Example : $* = machine_hall/MH_01_easy/MH_01_easy
	mkdir -p $(@D)
	cd $(@D)  &&  ${WGET} "http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/$*.zip"


./datasets/EuRoCMAV/%.dir : ./datasets/EuRoCMAV/%.zip
	mkdir $@
	unzip $< -d $@

./datasets/EuRoCMAV/%.slam :  ./datasets/EuRoCMAV/%.dir
	${check_generator}
	./build/bin/dataset-generator -d eurocmav -i $</mav0 -o $@ -imu true --stereo-grey true -gt true

#### TUM ####
# check if using tgz file or rosbag
ifeq (TUM, $(findstring TUM, $(MAKECMDGOALS)))
  ifeq (use_rosbag, $(filter use_rosbag, $(MAKECMDGOALS)))
    FILETYPE = bag
    DATASET = tum-rosbag
  else
    FILETYPE = tgz
    DATASET = tum
  endif
endif

use_rosbag:
	@:

./datasets/TUM/%.$(FILETYPE) :  # Example : $* = freiburg2/rgbd_dataset_freiburg2_desk
	mkdir -p $(@D)
	cd $(@D)  &&  ${WGET} "https://vision.in.tum.de/rgbd/dataset/$*.$(FILETYPE)"

./datasets/TUM/%.slam : ./datasets/TUM/%.$(FILETYPE)
	${check_generator}
	mkdir -p $(@D)/$(*F).dir
ifeq (tgz, $(FILETYPE))
	tar xzf $(@D)/$(*F).tgz -C $(@D)/$(*F).dir
else
	mkdir -p $(@D)/$(*F).dir/$(*F)
endif
	./build/bin/dataset-generator -d $(DATASET) -i $(@D)/$(*F).dir/$(*F) -o $@ -grey true -rgb true -gt true -depth true -acc true

#### ICL-NUIM ####
datasets/ICL_NUIM/living-room.ply :  datasets/ICL_NUIM/living-room.ply.tar.gz
	cd datasets/ICL_NUIM  && tar xzf living-room.ply.tar.gz
	touch datasets/ICL_NUIM/living-room.ply # This is a fix to ensure not regenerating the file again because of file create date

datasets/ICL_NUIM/living-room.ply.tar.gz :
	mkdir -p  datasets/ICL_NUIM
	cd datasets/ICL_NUIM  && ${WGET} "http://www.doc.ic.ac.uk/~ahanda/living-room.ply.tar.gz"

datasets/ICL_NUIM/%_loop.tgz :
	mkdir -p  datasets/ICL_NUIM
	cd datasets/ICL_NUIM  && ${WGET} "http://www.doc.ic.ac.uk/~ahanda/$*_loop.tgz"

datasets/ICL_NUIM/%_loop.dir :  datasets/ICL_NUIM/%_loop.tgz
	mkdir -p $@
	tar xzf $< -C $@

datasets/ICL_NUIM/living_room_traj%_loop.slam : datasets/ICL_NUIM/living_room_traj%_loop.dir datasets/ICL_NUIM/living-room.ply
	${check_generator}
	./build/bin/dataset-generator -d iclnuim -i $< -o $@ -ply  datasets/ICL_NUIM/living-room.ply -grey true -rgb true -gt true -depth true -pf true

datasets/ICL_NUIM/office_room_traj%_loop.slam : datasets/ICL_NUIM/office_room_traj%_loop.dir
	if [ ! -e ./build/bin/dataset-generator ] ; then make slambench ; fi
	./build/bin/dataset-generator -d iclnuim -i $< -o $@ -grey true -rgb true -gt true -depth true -pf true

datasets/ICL_NUIM/living_room_traj%_loop_neg.slam : datasets/ICL_NUIM/living_room_traj%_loop.dir datasets/ICL_NUIM/living-room.ply
	${check_generator}
	./build/bin/dataset-generator -d iclnuim -i $< -o $@ -ply  datasets/ICL_NUIM/living-room.ply -grey true -rgb true -gt true -depth true -pf false


datasets/ICL_NUIM/%.gt.freiburg :
	${ECHO}  "Download ground truth trajectory..."
	mkdir -p datasets/ICL_NUIM/
	cd datasets/ICL_NUIM/  &&  if test -x livingRoom$*.gt.freiburg ; then ${ECHO} "Done" ; else ${WGET} "http://www.doc.ic.ac.uk/~ahanda/VaFRIC/$*.gt.freiburg" ; fi

datasets/ICL_KLG/dyson_lab.klg :
	mkdir -p datasets/ICL_KLG/
	cd datasets/ICL_KLG/  &&  ${WGET} http://www.doc.ic.ac.uk/%7Esleutene/datasets/elasticfusion/dyson_lab.klg

#### SVO-artificial ####
datasets/SVO/artificial.tar.gz:
	mkdir -p datasets/SVO/
	cd datasets/SVO && ${WGET} -O artificial.tar.gz "http://rpg.ifi.uzh.ch/datasets/sin2_tex2_h1_v8_d.tar.gz"

datasets/SVO/artificial.dir: ./datasets/SVO/artificial.tar.gz
	mkdir -p $@
	tar -xzf $< -C $@

datasets/SVO/artificial.slam: ./datasets/SVO/artificial.dir
	${check_generator}
	./build/bin/dataset-generator -d svo -i $</sin2_tex2_h1_v8_d -o $@


#### BONN ####
./datasets/BONN/%.ply :  ./datasets/BONN/%.zip
	unzip $< -d datasets/BONN
	touch $@ # This is a fix to ensure not regenerating the file again because of file create date

./datasets/BONN/%.zip :  # Example : $* = rgbd_bonn_balloon
	mkdir -p $(@D)
	cd $(@D)  &&  ${WGET} "http://www.ipb.uni-bonn.de/html/projects/rgbd_dynamic2019/$*.zip"

./datasets/BONN/%.dir : ./datasets/BONN/%.zip
	mkdir $@
	unzip $< -d $@

./datasets/BONN/%.slam : ./datasets/BONN/%.dir ./datasets/BONN/rgbd_bonn_groundtruth_1mm_section.ply
	if [ ! -e ./build/bin/dataset-generator ] ; then make slambench ; fi
	./build/bin/dataset-generator -d bonn -i $</* -o $@ -grey true -rgb true -gt true -depth true -ply datasets/BONN/rgbd_bonn_groundtruth_1mm_section.ply

#./datasets/BONN/%.slam : ./datasets/BONN/%.dir ./datasets/BONN/rgbd_bonn_groundtruth.ply
#	if [ ! -e ./build/bin/dataset-generator ] ; then make slambench ; fi
#	./build/bin/dataset-generator -d bonn -i $</* -o $@ -grey true -rgb true -gt true -depth true -ply datasets/BONN/rgbd_bonn_groundtruth.ply


#### UZH-FPV Drone ####
 # Example : $* = indoor_foward_3_snapdragon_with_gt
./datasets/UZHFPV/%.zip : ./datasets/UZHFPV/calib/getdatasets
	echo download $*.zip
	mkdir -p $(@D)
	cd $(@D)  &&  ${WGET} "http://rpg.ifi.uzh.ch/datasets/uzh-fpv-newer-versions/v2/$*.zip"

# if contains indoor_45 | outdoor_45 | indoor_forward | outdoor_forward
./datasets/UZHFPV/%.dir : ./datasets/UZHFPV/%.zip
	mkdir -p $@
	unzip $< -d $@
	case "$(@F)" in \
				(*indoor_45*davis*) file=indoor_45_calib_davis.yaml;; \
				(*indoor_45*snap*) file=indoor_45_calib_snapdragon.yaml ;; \
				(*indoor_forward*davis*) file=indoor_forward_calib_davis.yaml ;; \
				(*indoor_forward*snap*) file=indoor_forward_calib_snapdragon.yaml ;; \
				(*outdoor_45*davis*) file=outdoor_45_calib_davis.yaml ;;\
				(*outdoor_45*snap*) file=outdoor_45_calib_snapdragon.yaml ;;\
				(*outdoor_forward*snap*) file=outdoor_forward_calib_davis.yaml ;;\
				(*outdoor_forward*davis*) file=outdoor_forward_calib_snapdragon.yaml ;;\
	esac; \
	cp $(@D)/$$file $@/sensors.yaml; \
	cp $(@D)/"imu_$$file" $@/imu.yaml

./datasets/UZHFPV/%_snapdragon_with_gt.slam:  ./datasets/UZHFPV/%_snapdragon_with_gt.dir
	if [ ! -e ./build/bin/dataset-generator ] ; then make slambench ; fi
	./build/bin/dataset-generator -d uzhfpv -i $< -o $@ -imu true --stereo true --event false -gt true

./datasets/UZHFPV/%_davis_with_gt.slam:  ./datasets/UZHFPV/%_davis_with_gt.dir
	if [ ! -e ./build/bin/dataset-generator ] ; then make slambench ; fi
	./build/bin/dataset-generator -d uzhfpv -i $< -o $@ -imu true --stereo false --event true -gt true

./datasets/UZHFPV/%_snapdragon.slam:  ./datasets/UZHFPV/%_snapdragon.dir
	if [ ! -e ./build/bin/dataset-generator ] ; then make slambench ; fi
	./build/bin/dataset-generator -d uzhfpv -i $< -o $@ -imu true --stereo true --event false -gt false

./datasets/UZHFPV/%_davis.slam:  ./datasets/UZHFPV/%_davis.dir
	if [ ! -e ./build/bin/dataset-generator ] ; then make slambench ; fi
	./build/bin/dataset-generator -d uzhfpv -i $< -o $@ -imu true --stereo false --event true -gt false

./datasets/UZHFPV/calib/getdatasets: ./datasets/UZHFPV/calib/indoor_forward_calib_snapdragon.zip \
                                     ./datasets/UZHFPV/calib/indoor_45_calib_snapdragon.zip \
                                     ./datasets/UZHFPV/calib/outdoor_forward_calib_snapdragon.zip \
                                     ./datasets/UZHFPV/calib/outdoor_45_calib_snapdragon.zip \
             						 ./datasets/UZHFPV/calib/indoor_forward_calib_davis.zip \
 									 ./datasets/UZHFPV/calib/indoor_45_calib_davis.zip \
									 ./datasets/UZHFPV/calib/outdoor_forward_calib_davis.zip \
									 ./datasets/UZHFPV/calib/outdoor_45_calib_davis.zip

./datasets/UZHFPV/calib/%.zip:
	echo download $*.zip
	mkdir -p $(@D)
	cd $(@D)  &&  ${WGET} "http://rpg.ifi.uzh.ch/datasets/uzh-fpv/calib/$*.zip"
	unzip $@ -d $(@D)
	cp $(@D)/$*/camchain-imucam-..$*_imu.yaml datasets/UZHFPV/$*.yaml
	cp $(@D)/$*/imu.yaml datasets/UZHFPV/imu_$*.yaml

#### ETH Illumination ####
./datasets/ETHI/%.zip:
	echo download $*.zip
	mkdir -p $(@D)
	cd $(@D)  &&  ${WGET} "https://cvg.ethz.ch/research/illumination-change-robust-dslam/$*.zip"

./datasets/ETHI/%.dir: ./datasets/ETHI/%.zip
	mkdir $@
	unzip $< -d $@

### TUM-based sequences contain "real", ICLNUIM-based sequences contain "syn"
### Add accelerometer.txt to prevent TUM breaking. Make sure depth.txt and rgb.txt exist in their respective folders.
./datasets/ETHI/%.slam: ./datasets/ETHI/%.dir ./datasets/ICL_NUIM/living-room.ply.tar.gz
	if [ ! -e ./build/bin/dataset-generator ] ; then make slambench ; fi
	for d in $</*; do \
  		echo "$$d"; \
		case "$(@F)" in \
			(*real*) touch "$$d"/accelerometer.txt; \
			 		 cp "$$d"/depth.txt "$$d"/depth/; \
			 		 cp "$$d"/rgb.txt "$$d"/rgb/; \
			 		 ./build/bin/dataset-generator -d tum -i "$$d" -o $@ -grey true -rgb true -gt true -depth true -accelerometer false ;; \
			(*syn*) cd "$$d"; \
					for file in depth/*.png; do \
						  base=`basename -- "$$file" .png`;\
						  mv "$$file" "scene_00_$$base.depth.png"; \
					done;\
					for file in rgb/*.png; do \
						  base=`basename -- "$$file"`;\
						  mv "$$file" "scene_00_$$base"; \
					done;\
					cd -; \
					./build/bin/dataset-generator -d iclnuim -i "$$d" -o $@ -ply  datasets/ICL_NUIM/living-room.ply -grey true -rgb true -gt true -depth true -pf false ;;\
		esac \
	done;

./datasets/ETHI/all:./datasets/ICL_NUIM/living-room.ply.tar.gz \
					./datasets/ETHI/ethl_real_flash.slam \
					./datasets/ETHI/ethl_real_local.slam \
					./datasets/ETHI/ethl_real_global.slam \
					./datasets/ETHI/ethl_syn1.slam \
					./datasets/ETHI/ethl_syn1_local.slam \
					./datasets/ETHI/ethl_syn1_global.slam \
					./datasets/ETHI/ethl_syn1_loc_glo.slam \
					./datasets/ETHI/ethl_syn1_flash.slam \
					./datasets/ETHI/ethl_syn2.slam \
					./datasets/ETHI/ethl_syn2_local.slam \
					./datasets/ETHI/ethl_syn2_global.slam \
					./datasets/ETHI/ethl_syn2_loc_glo.slam \
					./datasets/ETHI/ethl_syn2_flash.slam
#if echo $(@F) | grep "syn" ; then make ./datasets/ICL_NUIM/living-room.ply.tar.gz; \
#		./build/bin/dataset-generator -d iclnuim -i $</* -o $@ -ply  datasets/ICL_NUIM/living-room.ply -grey true -rgb true -gt true -depth true -pf true \


./datasets/VolumeDeform/%.dir :
	mkdir $@
	unzip $< -d $@

./datasets/VolumeDeform/%.slam : ./datasets/VolumeDeform/%.dir
	if [ ! -e ./build/bin/dataset-generator ] ; then make slambench ; fi
	./build/bin/dataset-generator -d VolumeDeform -i $< -o $@ -grey true -rgb true -gt true -depth true


.PRECIOUS: \
./datasets/TUM/%.tgz \
./datasets/TUM/%.dir \
./datasets/TUM/%.bag \
./datasets/TUM/%.raw \
./datasets/ICL_NUIM/living_room_traj%_loop.tgz \
./datasets/ICL_NUIM/living_room_traj%_loop.dir \
./datasets/ICL_NUIM/livingRoom%.gt.freiburg \
./datasets/ICL_NUIM/living_room_traj%_loop.raw \
./datasets/BONN/%.zip \
./datasets/BONN/%.ply \
./datasets/BONN/%.dir \
./datasets/UZHFPV/%.dir \
./datasets/UZHFPV/%.zip \
./datasets/ETHI/%.dir \
./datasets/ETHI/%.zip \
./datasets/OpenLORIS/%.dir \
./datasets/OpenLORIS/%-package.tar \
./datasets/VolumeDeform/%.dir \
./datasets/VolumeDeform/%.zip

================================================
FILE: framework/makefiles/deps.makefile
================================================
ROOT_DIR=$(shell pwd)
DEPS_DIR=$(ROOT_DIR)/deps
REPOS_DIR=$(DEPS_DIR)/repos
DEPS_BUILD_DIR=$(DEPS_DIR)/build
DEPS_ARGS=
DEPS_ENV=

include framework/makefiles/*.make

ifneq ("$(wildcard ${EIGEN3_INCLUDE_DIR})","")
DEPS_ARGS+= -DEIGEN3_INCLUDE_DIR=${EIGEN3_INCLUDE_DIR} -DEIGEN3_VERSION_OK=ON
DEPS_ARGS+= -DEIGEN_INCLUDE_DIR=${EIGEN3_INCLUDE_DIR} -DEIGEN_VERSION_OK=ON
endif

ifneq ("$(wildcard ${OPENNI2_LIBRARY})","")
DEPS_ARGS+= -DOPENNI2_LIBRARY=${OPENNI2_LIBRARY}
endif

ifneq ("$(wildcard ${OPENNI2_INCLUDE_PATH})","")
DEPS_ARGS+= -DOPENNI2_INCLUDE_PATH=${OPENNI2_INCLUDE_PATH}
endif

ifneq ("$(wildcard ${CUDA_TOOLKIT_ROOT_DIR})","")
DEPS_ARGS+= -DCUDA_TOOLKIT_ROOT_DIR=${CUDA_TOOLKIT_ROOT_DIR}
endif

ifneq ("$(wildcard ${GCC7_COMPILER})","")
DEPS_ARGS+= -DCUDA_HOST_COMPILER=${GCC7_COMPILER}
endif

ifneq ("$(wildcard ${GCC5_COMPILER})","")
DEPS_ARGS+= -DCUDA_HOST_COMPILER=${GCC5_COMPILER}
endif

ifneq ("$(wildcard ${CERES_DIR})","")
DEPS_ARGS+= -DCERES_DIR=${CERES_DIR}
endif

ifneq ("$(wildcard ${Sophus_DIR})","")
DEPS_ARGS+= -DSophus_DIR=${Sophus_DIR}
endif

ifneq ("$(wildcard ${Sophus_INCLUDE_DIRS})","")
DEPS_ARGS+= -DSophus_INCLUDE_DIR=${Sophus_INCLUDE_DIR}
DEPS_ARGS+= -DSophus_INCLUDE_DIRS=${Sophus_INCLUDE_DIRS}
endif

ifneq ("$(wildcard ${GVARS_INCLUDE_DIR})","")
DEPS_ARGS+= -DGVARS_INCLUDE_DIR=${GVARS_INCLUDE_DIR}
endif

ifneq ("$(wildcard ${GVARS_LIBRARY})","")
DEPS_ARGS+= -DGVARS_LIBRARY=${GVARS_LIBRARY}
endif


ifneq ("$(wildcard ${CVD_INCLUDE_DIR})","")
DEPS_ARGS+= -DCVD_INCLUDE_DIR=${CVD_INCLUDE_DIR}
endif


ifneq ("$(wildcard ${CVD_LIBRARY})","")
DEPS_ARGS+= -DCVD_LIBRARY=${CVD_LIBRARY}
endif

ifneq ("$(wildcard ${OPENGV_INCLUDE_DIR})","")
DEPS_ARGS+= -DOPENGV_INCLUDE_DIR=${OPENGV_INCLUDE_DIR}
endif

ifneq ("$(wildcard ${OPENGV_LIBRARY})","")
DEPS_ARGS+= -DOPENGV_LIBRARY=${OPENGV_LIBRARY}
endif

ifneq ("$(wildcard ${BRISK_INCLUDE_DIR})","")
DEPS_ARGS+= -DBRISK_INCLUDE_PATH=${BRISK_INCLUDE_DIR}
endif

ifneq ("$(wildcard ${PANGOLIN_DIR})","")
DEPS_ENV+= Pangolin_DIR=${PANGOLIN_DIR}
endif

ifneq ("$(wildcard ${TOON_INCLUDE_DIR})","")
DEPS_ARGS+= -DTOON_INCLUDE_PATH=${TOON_INCLUDE_DIR}
endif

ifneq ("$(wildcard ${OPENCV_DIR})","")
DEPS_ENV+= OpenCV_DIR=${OPENCV_DIR}
endif

ifneq ("$(wildcard ${BRISK_DIR})","")
DEPS_ENV+= brisk_DIR=${BRISK_DIR}/
endif

ifneq ("$(wildcard ${PCL_DIR})","")
DEPS_ENV+= PCL_DIR=${PCL_DIR}/
endif

ifneq ("$(wildcard ${G2O_DIR})","")
DEPS_ENV+= G2O_ROOT=${G2O_DIR}/
endif

ifneq ("$(wildcard ${CUDA_INC_PATH})","")
DEPS_ENV+= CUDA_INC_PATH=${CUDA_INC_PATH}/
endif

ifneq ("$(wildcard ${SUITE_SPARSE_ROOT})","")
	DEPS_ARGS+= -DSUITE_SPARSE_ROOT=${SUITE_SPARSE_ROOT}
endif

ifneq ("$(wildcard ${FREEIMAGE_INCLUDE_PATH})","")
	DEPS_ARGS+= -DFreeImage_INCLUDE_PATH="${FREEIMAGE_INCLUDE_PATH}"
	DEPS_ARGS+= -DFreeImage_DYNAMIC_LIBRARY="${FREEIMAGE_DYNAMIC_LIBRARY}"
endif

#### Compilation targets
####################################
deps :
	+make brisk
	+make ceres
	+make cvd
	+make eigen3
	+make flann
	+make freeimage
	+make g2o
	+make gvars
	+make opencv
	+make opengv
	+make opentuner
	+make pangolin
	+make pcl
	+make suitesparse
	+make toon
	+make Sophus

.PHONY: deps


================================================
FILE: framework/makefiles/download_benchmarks.py
================================================
import sys
import json

with open(sys.argv[1]) as f:
    data = json.load(f)


def echo(str="", echoargs = ""):
    print("\t@echo " + echoargs + " \"" + str + "\"")


keys = ["name", "reference", "orig_repo", "used_repo", "branch", "path"]

print("usecases:")
echo()
echo("=================================================================================================================")
echo("Current list of compatible SLAM systems (alphabetical order). If you are using any of the following SLAM algorithms, ${BoldRed} please refer to their respective publications ${ColorOff}", "-e")
echo()

for algorithm_token, details in data.items():
    name = details["name"]
    reference = details["reference"]
    original_repo = details["original_repo"]
    new_repo = details["new_repo"]
    target_dir = details["path"]
    print("\t@echo -n \"  - %s [%s] : \" ; if [ -d %s ] ; then echo -e \" ${BoldGreen}Found${ColorOff}\"; else echo -e \" ${BoldRed}Not found (make %s) ${ColorOff}\" ; fi" % (name, reference, target_dir, algorithm_token))
    echo("      Original repository: %s" % original_repo)
    echo("      Used repository: %s" % new_repo)
    echo("      available targets are : %s" % name)
    echo()
    print("")

echo("If you want to test SLAMBench with existing SLAM algorithms, once you have download it please run \\\"make slambench APPS=slam1,slam2,...\\\"")
echo("   e.g. make slambench APPS=kfusion,orbslam2")
echo("   You can also use \\\"make slambench APPS=all\\\" to compile them all.")
echo("")
echo("As a next step we suggest you run make datasets.")
echo("")
echo("=================================================================================================================")

previous = None
for algorithm_token, details in data.items():
    name = details["name"]
    reference = details["reference"]
    original_repo = details["original_repo"]
    new_repo = details["new_repo"]
    target_dir = details["path"]
    branch = details["branch"]

    if previous != name:
        print("")
        print("%s:" % algorithm_token)
        echo("=================================================================================================================")
        echo(f"{name} ({reference})")
        echo("Original repository: %s" % original_repo)
        echo("Used repository: %s" % new_repo)
        echo("=================================================================================================================")
        print("")
        print("\t@echo \"Are you sure you want to download this use-case (y/n) ?\" && ${GET_REPLY} && echo REPLY=$$REPLY && if [ ! \"$$REPLY\" == \"y\" ] ; then echo -e \"\\nExit.\"; false; else echo -e \"\\nDownload starts.\"; fi")
    print("\tmkdir -p %s" % target_dir)
    print("\trm %s -rf" % target_dir)
    print("\tgit clone --recursive --branch %s %s %s" % (branch, new_repo, target_dir))
    print("\t@echo \"cmake_minimum_required(VERSION 3.10)\"   > benchmarks/$@/CMakeLists.txt")
    print("\t@echo \"explore_implementations ( $@ src/* )\"     >> benchmarks/$@/CMakeLists.txt")
    previous = name

list_str = " ".join(set([algoname for algoname in data.keys()]))
print("")
print(".PHONY: %s" % list_str)
print("algorithms :  %s" % list_str)

print("")
print("benchmarks_status:")
for algorithm_token, details in data.items():
    echo("************ Check-in %s in %s" % (algorithm_token, details["path"]))
    print("\t@if [ -d %s ] ; then git -C %s diff; fi" % (details["path"], details["path"]))


================================================
FILE: framework/makefiles/download_datasets.py
================================================
import sys
DATASET_DIR = "datasets/"

fd = open(sys.argv[1])
data =fd.read()
fd.close()


def echo(str="", echoargs = ""):
    print("\t@echo " + echoargs + " \"" + str + "\"")


print("datasets:")
echo("The following datasets are built on your system and available for use:")
print("\t@for f in `find datasets/ | grep [.]slam` ; do echo \" - $$f\" ; done")
echo()
echo("Here is a list of the datasets available.")
echo("If you are using any of the following datasets, ${BoldRed}please refer to their respective publications${ColorOff}:", "-e")
echo("\t- TUM RGB-D SLAM dataset [Sturm et al, IROS'12]: https://vision.in.tum.de/data/datasets/rgbd-dataset")
echo("\t- ICL-NUIM dataset [Handa et al, ICRA'14]: https://www.doc.ic.ac.uk/~ahanda/VaFRIC/iclnuim.html")
echo("\t- EuRoC MAV Dataset [Burri et al, IJJR'16]: https://projects.asl.ethz.ch/datasets/doku.php")
echo("\t- SVO sample dataset [Forster et al, ICRA 2014]: https://github.com/uzh-rpg/rpg_svo")
echo("\t- Bonn RGB-D Dynamic Dataset [Palazzolo et al, IROS'19]: http://www.ipb.uni-bonn.de/data/rgbd-dynamic-dataset/")
echo("\t- UZH-FPV Drone Racing Dataset [Delmerico et al, ICRA'19]: http://rpg.ifi.uzh.ch/uzh-fpv.html")
echo("\t- OpenLORIS-Scene datasets [Shi et al, ICRA'20]: https://lifelong-robotic-vision.github.io/dataset/scene")
echo("=================================================================================================================")
echo()
echo("=================================================================================================================")
echo("SLAMBench integrates tools to automatically generate files compatible with SLAMBench from existing datasets.")
echo("SLAMBench cannot download the OpenLORIS data for you. Please download the data manually (*-package.tar) to ./datasets/OpenLORIS/")
echo("For details, please visit: https://lifelong-robotic-vision.github.io/dataset/scene")
echo()

targets = []
dataset_name = ""
for line in data.split("\n"):
    if '#' in line or len(line) < 2:
        continue
    items = line.split(":")
    if "Dataset" in items:
        dataset_name = items.pop(1)
        continue
    items = line.split(";")
    dataset_tag = items.pop(0)
    dataset_description = items.pop(0)
    # here need another target
    echo("\t### " + dataset_name + " " + dataset_description + " ###")
    for dataset_file in items:
        echo("\t make ./" + DATASET_DIR + dataset_name + "/" + dataset_file)
    echo()

echo("\tDatasets with a ROS option: TUM")
echo("\t Use the ${BoldGreen}use_rosbag${ColorOff} option to build a dataset from a ROS bag:")
echo("\t make ./datasets/TUM/freiburg1/rgbd_dataset_freiburg1_xyz.slam use_rosbag")
echo()

# at the end need to include dataset-utils.makefile
# make datasettag list
# make datasettag.all


================================================
FILE: framework/makefiles/eigen3.make
================================================
EIGEN3_INCLUDE_DIR=${DEPS_DIR}/eigen3/include/eigen3
ANDROID_EIGEN3_INCLUDE_DIR=${ANDROID_DEPS_DIR}/eigen3/include/eigen3

${REPOS_DIR}/eigen3 :
	mkdir ${REPOS_DIR}/ -p
	rm ${REPOS_DIR}/eigen3 -rf
	cd ${REPOS_DIR}/ && git clone --depth 1 --branch 3.2.10 https://gitlab.com/libeigen/eigen.git eigen3


${DEPS_DIR}/eigen3  : ${REPOS_DIR}/eigen3 
	cd ${REPOS_DIR}/eigen3 && mkdir build_dir -p
	cd ${REPOS_DIR}/eigen3 && rm build_dir/* -rf
	cd ${REPOS_DIR}/eigen3/build_dir && cmake .. -DBUILD_SHARED_LIBS=OFF  -DCMAKE_BUILD_TYPE=Release  "-DCMAKE_INSTALL_PREFIX:PATH=$@" 
	+cd ${REPOS_DIR}/eigen3/build_dir && make
	mkdir ${DEPS_DIR}/eigen3 -p
	cd ${REPOS_DIR}/eigen3/build_dir && make install



${ANDROID_DEPS_DIR}/eigen3  : ${REPOS_DIR}/eigen3
	mkdir $@/include/eigen3 -p
	cp -rf ${REPOS_DIR}/eigen3/Eigen $@/include/eigen3

eigen : eigen3

eigen3 :
	+if [ ! -d ${DEPS_DIR}/$@ ] ; then make ${DEPS_DIR}/$@ ; else echo "$@ skipped."; fi
android-eigen3 : ${ANDROID_DEPS_DIR}/eigen3

.PHONY: eigen eigen3 android-eigen3


================================================
FILE: framework/makefiles/flann.make
================================================
FLANN_INCLUDE_DIR=${DEPS_DIR}/flann/include
FLANN_LIBRARY=${DEPS_DIR}/flann/lib/libflann.so
#include eigen3 # not required

${REPOS_DIR}/flann :
	mkdir -p ${REPOS_DIR}
	rm -rf ${REPOS_DIR}/flann	
	cd ${REPOS_DIR} ; git clone https://github.com/mariusmuja/flann.git flann
	cd ${REPOS_DIR}/flann && git checkout 06a49513138009d19a1f4e0ace67fbff13270c69
	touch ${REPOS_DIR}/flann/src/cpp/empty.cpp
	sed -e "/add_library(flann_cpp SHARED/ s/\"\"/empty.cpp/" -e "/add_library(flann SHARED/ s/\"\"/empty.cpp/" -i ${REPOS_DIR}/flann/src/cpp/CMakeLists.txt

${DEPS_DIR}/flann : ${REPOS_DIR}/flann
	mkdir ${REPOS_DIR}/flann/build -p
	rm ${REPOS_DIR}/flann/buid/* -rf
	cd ${REPOS_DIR}/flann/build && cmake .. "-DCMAKE_INSTALL_PREFIX:PATH=$@" -DBUILD_MATLAB_BINDINGS=FALSE -DBUILD_PYTHON_BINDINGS=FALSE -DBUILD_EXAMPLES=FALSE -DBUILD_TESTS=FALSE -DBUILD_DOC=FALSE
	+cd ${REPOS_DIR}/flann/build && make 
	mkdir -p $@
	cd ${REPOS_DIR}/flann/build && make install

flann :
	+if [ ! -d ${DEPS_DIR}/$@ ] ; then make ${DEPS_DIR}/$@ ; else echo "$@ skipped."; fi
.PHONY: flann


================================================
FILE: framework/makefiles/freeimage.make
================================================
FREEIMAGE_INCLUDE_PATH=${DEPS_DIR}/freeimage/include
FREEIMAGE_DYNAMIC_LIBRARY=${DEPS_DIR}/freeimage/lib/libfreeimage.so
FREEIMAGE_URL=http://downloads.sourceforge.net/freeimage/FreeImage3180.zip

${REPOS_DIR}/FreeImage :
	mkdir ${REPOS_DIR} -p
	rm ${REPOS_DIR}/FreeImage -rf
	cd ${REPOS_DIR} && wget ${FREEIMAGE_URL} && unzip FreeImage3180.zip && rm FreeImage3180.zip
	sed -i.bak "s/-o root -g root//" ${REPOS_DIR}/FreeImage/Makefile.gnu
	sed -i.bak "s/-Wno-ctor-dtor-privacy/-w/" ${REPOS_DIR}/FreeImage/Makefile.gnu
	sed -i.bak "s/defined._ARM_./defined\(_ARM_\) or defined\(__arm__\)/"  ${REPOS_DIR}/FreeImage/Source/LibRawLite/libraw/libraw_types.h
	cd ${REPOS_DIR}/FreeImage && git apply ${ROOT_DIR}/framework/patchs/freeimage.patch

${DEPS_DIR}/freeimage : ${REPOS_DIR}/FreeImage
	+cd ${REPOS_DIR}/FreeImage && make DESTDIR=$@ 
	mkdir -p $@
	cd ${REPOS_DIR}/FreeImage && make install DESTDIR=$@ INCDIR=$@/include INSTALLDIR=$@/lib

freeimage :
	+if [ ! -d ${DEPS_DIR}/$@ ] ; then make ${DEPS_DIR}/$@ ; else echo "$@ skipped."; fi

.PHONY: freeimage 


================================================
FILE: framework/makefiles/g2o.make
================================================
G2O_DIR=${DEPS_DIR}/g2o
ANDROID_G2O_DIR=${ANDROID_DEPS_DIR}

${SUITE_SPARSE_ROOT}/lib/libcxsparse.a : suitesparse
	echo "please use make suitesparse"

${REPOS_DIR}/g2o :
	mkdir ${REPOS_DIR} -p
	rm ${REPOS_DIR}/g2o -rf
	git clone "https://github.com/RainerKuemmerle/g2o" ${REPOS_DIR}/g2o
	cd ${REPOS_DIR}/g2o  && git checkout 1b118ac2ed2055c4016c3b7cbd710225ed1651af
${DEPS_DIR}/g2o : ${REPOS_DIR}/g2o suitesparse eigen3
	cd ${REPOS_DIR}/g2o && mkdir build -p
	rm ${REPOS_DIR}/g2o/build/* -rf 
	cd ${REPOS_DIR}/g2o/build && cmake .. "-DCMAKE_INSTALL_PREFIX:PATH=$@"  \
	             -DCHOLMOD_LIBRARY=${SUITE_SPARSE_ROOT}/lib/libcholmod.a -DCHOLMOD_FOUND=TRUE -DCHOLMOD_INCLUDE_DIR=${SUITE_SPARSE_ROOT}/include/ -DCHOLMOD_LIBRARIES=${SUITE_SPARSE_ROOT}/lib \
	             -DCSPARSE_INCLUDE_DIR=${SUITE_SPARSE_ROOT}/include/ -DCSPARSE_LIBRARY=${SUITE_SPARSE_ROOT}/lib/libcxsparse.a\
	             -DEIGEN3_INCLUDE_DIR=${EIGEN3_INCLUDE_DIR}
	+cd ${REPOS_DIR}/g2o/build && make
	mkdir -p $@
	cd ${REPOS_DIR}/g2o/build && make install


${ANDROID_DEPS_DIR}/g2o : ${REPOS_DIR}/g2o   ${REPOS_DIR}/android-cmake # What about CHOLMOD and BLAS ?
	cd ${REPOS_DIR}/g2o && mkdir android-build -p
	rm ${REPOS_DIR}/g2o/android-build/* -rf 
	cd ${REPOS_DIR}/g2o/android-build && cmake  -DBUILD_SHARED_LIBS=OFF   -D CMAKE_INSTALL_PREFIX=$(ANDROID_DEPS_DIR)  -DCMAKE_TOOLCHAIN_FILE=${REPOS_DIR}/android-cmake/android.toolchain.cmake -DANDROID_NDK=${ANDROID_NDK} -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI="armeabi-v7a with NEON" -DEIGEN3_INCLUDE_DIR="$(ANDROID_DEPS_DIR)/include/eigen3" -DEIGEN3_VERSION_OK=ON -DG2O_BUILD_EXAMPLES=off -DG2O_BUILD_APPS=off -DCSPARSE_INCLUDE_DIR=${REPOS_DIR}/suitesparse/CXSparse/Include .. 
	+cd ${REPOS_DIR}/g2o/android-build && make
	cd ${REPOS_DIR}/g2o/android-build && make install



g2o : 
	+if [ ! -d ${DEPS_DIR}/$@ ] ; then make ${DEPS_DIR}/$@ ; else echo "$@ skipped."; fi
android-g2o : ${ANDROID_DEPS_DIR}/g2o

.PHONY: g2o android-g2o


================================================
FILE: framework/makefiles/gcc.make
================================================
GCC7_COMPILER=${DEPS_DIR}/gcc7/bin/c++
GCC5_COMPILER=${DEPS_DIR}/gcc5/bin/c++

GCC_REPOS=gcc
GCC_BUILD_DIR=${DEPS_DIR}/build/gcc

${REPOS_DIR}/${GCC_REPOS} :
	mkdir -p ${REPOS_DIR}
	rm -rf ${REPOS_DIR}/${GCC_REPOS}
	cd ${REPOS_DIR} && git clone git://gcc.gnu.org/git/gcc.git ${GCC_REPOS}

${DEPS_DIR}/gcc5 : ${REPOS_DIR}/${GCC_REPOS}
	cd $^ && git checkout gcc-5_3_0-release
	cd $^ && git cherry-pick ec1cc0263f156f70693a62cf17b254a0029f4852 || true
	cd $^ && ./contrib/download_prerequisites
	mkdir -p ${GCC_BUILD_DIR}/objdir
	rm -rf ${GCC_BUILD_DIR}/objdir/*
	cd  ${GCC_BUILD_DIR}/objdir && ${REPOS_DIR}/${GCC_REPOS}/configure --prefix=$@ --enable-languages=c,c++ --disable-multilib
	+cd ${GCC_BUILD_DIR}/objdir && make
	mkdir -p $@
	cd ${GCC_BUILD_DIR}/objdir && make install

${DEPS_DIR}/gcc7 : ${REPOS_DIR}/${GCC_REPOS}
	cd $^ && git checkout gcc-7_2_0-release
	cd $^ && ./contrib/download_prerequisites
	mkdir -p ${GCC_BUILD_DIR}/objdir
	rm -rf ${GCC_BUILD_DIR}/objdir/*
	cd  ${GCC_BUILD_DIR}/objdir && ${REPOS_DIR}/${GCC_REPOS}/configure --prefix=$@ --enable-languages=c,c++ --disable-multilib --disable-libsanitizer
	+cd ${GCC_BUILD_DIR}/objdir && make
	mkdir -p $@
	cd ${GCC_BUILD_DIR}/objdir && make install


gcc5:
	+if [ ! -d ${DEPS_DIR}/$@ ] ; then make ${DEPS_DIR}/$@ ; else echo "$@ skipped."; fi

gcc7:
	+if [ ! -d ${DEPS_DIR}/$@ ] ; then make ${DEPS_DIR}/$@ ; else echo "$@ skipped."; fi

.PHONY: gcc5 gcc7


================================================
FILE: framework/makefiles/gvars.make
================================================


GVARS_INCLUDE_DIR=${DEPS_DIR}/gvars/include
GVARS_LIBRARY=${DEPS_DIR}/gvars/lib/libGVars3.so


${REPOS_DIR}/gvars :
	mkdir ${REPOS_DIR} -p
	rm ${REPOS_DIR}/gvars -rf
	git clone "https://github.com/edrosten/gvars" ${REPOS_DIR}/gvars
	cd ${REPOS_DIR}/gvars && git checkout fc58c500c9d8f8713fb87a98cf7fb6be1db3295f


${DEPS_DIR}/gvars: ${REPOS_DIR}/gvars toon
	cd ${REPOS_DIR}/gvars && ./configure --prefix=$@ CPPFLAGS="-I${DEPS_DIR}/toon/include -fPIC"
	+cd ${REPOS_DIR}/gvars && make 
	mkdir -p $@
	cd ${REPOS_DIR}/gvars && make install


gvars : 
	+if [ ! -d ${DEPS_DIR}/$@ ] ; then make ${DEPS_DIR}/$@ ; else echo "$@ skipped."; fi

.PHONY: gvars 


================================================
FILE: framework/makefiles/libopencl-stub.make
================================================
dependencies/libopencl-stub : 


ANDROID_OPENCL_ROOT_DIR=${ANDROID_DEPS_DIR}/libopencl-stub/
ANDROID_OPENCL_INCLUDE_DIR=${ANDROID_DEPS_DIR}/libopencl-stub/include
ANDROID_OPENCL_LIBRARY=${ANDROID_DEPS_DIR}/libopencl-stub/obj/local/armeabi-v7a/libOpenCL.a


PATCH_DIR=${ROOT_DIR}/framework/patchs/

${REPOS_DIR}/libopencl-stub :
	mkdir -p ${REPOS_DIR}/
	git clone https://github.com/krrishnarraj/libopencl-stub.git $@
	cd $@  && git checkout b4f84459e3a3a14d6a18b5dabe0a6ae9cbef709e
	cd $@  && git apply ${PATCH_DIR}/libopencl-stub_SLAMBench.patch

	
${ANDROID_DEPS_DIR}/libopencl-stub: ${REPOS_DIR}/libopencl-stub
	mkdir -p ${ANDROID_DEPS_DIR}/libopencl-stub
	rm -rf ${ANDROID_DEPS_DIR}/libopencl-stub/*
	cd ${REPOS_DIR}/libopencl-stub && ${ANDROID_NDK}/ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk NDK_APPLICATION_MK=Application.mk 
	cp ${REPOS_DIR}/libopencl-stub/include ${ANDROID_DEPS_DIR}/libopencl-stub -rf
	cp ${REPOS_DIR}/libopencl-stub/obj ${ANDROID_DEPS_DIR}/libopencl-stub  -rf

android-libopencl-stub: ${ANDROID_DEPS_DIR}/libopencl-stub


.PHONY: android-libopencl-stub
	
	
	

================================================
FILE: framework/makefiles/opencv.make
================================================
OPENCV_DIR=${DEPS_DIR}/opencv/share/OpenCV/
ANDROID_OPENCV_DIR=${ANDROID_DEPS_DIR}/opencv/share/OpenCV/
OPENCV_CONTRIB_MODULES_DIR=${REPOS_DIR}/opencv_contrib/modules

${REPOS_DIR}/opencv :
	mkdir ${REPOS_DIR} -p
	rm ${REPOS_DIR}/opencv -rf
	git clone "https://github.com/opencv/opencv.git" ${REPOS_DIR}/opencv
	git clone "https://github.com/opencv/opencv_contrib.git" ${REPOS_DIR}/opencv_contrib
	cd ${REPOS_DIR}/opencv && git checkout 3.4.3
	cd ${REPOS_DIR}/opencv_contrib && git checkout 3.4.3

# TODO: update opencv flags for opencv 3
${DEPS_DIR}/opencv : ${REPOS_DIR}/opencv
	cd ${REPOS_DIR}/opencv && mkdir build_dir -p
	cd ${REPOS_DIR}/opencv && rm build_dir/* -rf
	cd ${REPOS_DIR}/opencv/build_dir && cmake -D CMAKE_BUILD_TYPE=RELEASE  -D CMAKE_INSTALL_PREFIX=$@    -DCMAKE_CXX_FLAGS="-Wno-error=address"             \
	-DWITH_GSTREAMER=OFF -DWITH_FFMPEG=OFF -DBUILD_PERF_TESTS=OFF  -D WITH_OPENCL=OFF -D BUILD_WITH_DEBUG_INFO=OFF  -D WITH_1394=OFF                \
	-D BUILD_TESTS=OFF  -D WITH_TBB=OFF  -D WITH_V4L=OFF  -D WITH_OPENGL=OFF -D BUILD_opencv_gpu=OFF    \
	  -D BUILD_opencv_java=OFF -D WITH_CUDA=OFF -DWITH_GTK=ON   -D BUILD_opencv_ml=ON  -D BUILD_opencv_videostab=OFF             \
	   -D BUILD_opencv_ts=OFF    -D BUILD_opencv_photo=ON  -D BUILD_opencv_video=ON -D BUILD_opencv_stitching=OFF -DOPENCV_EXTRA_MODULES_PATH=${OPENCV_CONTRIB_MODULES_DIR} -DENABLE_PRECOMPILED_HEADERS=OFF .. > ${REPOS_DIR}/opencv/build_dir/opencv_cmake.log
	cat ${REPOS_DIR}/opencv/build_dir/opencv_cmake.log
	+cd ${REPOS_DIR}/opencv/build_dir && make
	mkdir -p $@
	cd ${REPOS_DIR}/opencv/build_dir && make install

$(ANDROID_DEPS_DIR)/opencv : ${REPOS_DIR}/opencv  ${REPOS_DIR}/android-cmake
	cd ${REPOS_DIR}/opencv && mkdir build_dir -p
	cd ${REPOS_DIR}/opencv && rm build_dir/* -rf
	cd ${REPOS_DIR}/opencv/build_dir && cmake  -DBUILD_SHARED_LIBS=OFF  -DCMAKE_TOOLCHAIN_FILE=${REPOS_DIR}/android-cmake/android.toolchain.cmake -DANDROID_NDK=${ANDROID_NDK} -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI="armeabi-v7a with NEON"   -DWITH_GSTREAMER=OFF -DBUILD_PERF_TESTS=OFF  -D WITH_OPENCL=OFF -D CMAKE_INSTALL_PREFIX=$(ANDROID_DEPS_DIR) -D BUILD_WITH_DEBUG_INFO=OFF  -D WITH_1394=OFF -D BUILD_TESTS=OFF  -D WITH_TBB=OFF  -D WITH_V4L=OFF  -D WITH_OPENGL=OFF -D BUILD_opencv_gpu=OFF -D BUILD_opencv_java=OFF -D WITH_CUDA=OFF -DWITH_GTK=OFF  -D BUILD_opencv_videostab=OFF  -D BUILD_opencv_ts=OFF  -D BUILD_opencv_stitching=OFF   .. 
	+cd ${REPOS_DIR}/opencv/build_dir && make
	cd ${REPOS_DIR}/opencv/build_dir && make install

opencv : 	
	+if [ ! -d ${DEPS_DIR}/$@ ] ; then make ${DEPS_DIR}/$@ ; else echo "$@ skipped."; fi

android-opencv : ${ANDROID_DEPS_DIR}/opencv

.PHONY: opencv android-opencv


================================================
FILE: framework/makefiles/opengv.make
================================================
OPENGV_INCLUDE_DIR=${DEPS_DIR}/opengv/include
OPENGV_LIBRARY=${DEPS_DIR}/opengv/lib/libopengv.a

${REPOS_DIR}/opengv :
	mkdir -p ${REPOS_DIR}
	rm -rf ${REPOS_DIR}/opengv	
	cd ${REPOS_DIR} ; git clone "https://github.com/laurentkneip/opengv" opengv
	cd $@ ; git checkout cc32b16281aa6eab67cb28a61cf87a2a5c2b0961

${DEPS_DIR}/opengv : ${REPOS_DIR}/opengv eigen3
	mkdir ${REPOS_DIR}/opengv/build -p
	rm ${REPOS_DIR}/opengv/build/* -rf
	cd ${REPOS_DIR}/opengv/build && cmake .. "-DCMAKE_INSTALL_PREFIX:PATH=$@"  -DCMAKE_CXX_FLAGS="-w -O3 -std=c++11" -DEIGEN_VERSION_OK=3 -DEIGEN_INCLUDE_DIR=${EIGEN3_INCLUDE_DIR}
	+cd ${REPOS_DIR}/opengv/build && make
	mkdir -p $@
	cd ${REPOS_DIR}/opengv/build && make install


ifdef EIGEN3_INCLUDE_DIR
	opengv :
		+if [ ! -d ${DEPS_DIR}/$@ ] ; then make ${DEPS_DIR}/$@ ; else echo "$@ skipped."; fi
else
	opengv :
		@echo "*** Error eigen not defined or not found"
		@echo "*** EIGEN_INCLUDE_DIR=${EIGEN3_INCLUDE_DIR}"
		@exit 1
endif

.PHONY: opengv


================================================
FILE: framework/makefiles/openni.make
================================================
########################################## COMMIT USED #################################################################
OPENNI2_REPOS=https://github.com/occipital/OpenNI2/
OPENNI2_COMMIT=1fce8edffab43c4a4cf201cff86f415b07a2d37f

OPENNI15_REPOS=https://github.com/OpenNI/OpenNI.git
OPENNI15_COMMIT=54e899c492f69aa8fa3e133fdd7d6b468f017b99

LIBUSB_REPOS=https://github.com/libusb/libusb.git
LIBUSB_COMMIT=8ddd8d994df6e367603266630bc2fe83b9cad868

SENSORK_REPOS=https://github.com/avin2/SensorKinect.git
SENSORK_COMMIT=15f1975d5e50d84ca06ff784f83f8b7836749a7b

FREENECT_REPOS=https://github.com/OpenKinect/libfreenect.git
FREENECT_COMMIT=83e57e1318cc64c9aabac481b9e330acc1914a23

########################################## OPENNI 1.5 PART #################################################################
OPENNI_INCLUDE_DIR=${DEPS_DIR}/openni15/Include
OPENNI_LIBRARY=${DEPS_DIR}/openni15/Lib/libOpenNI.so

${REPOS_DIR}/libusb :
	rm -rf $@
	git clone ${LIBUSB_REPOS} $@ && cd $@ && git checkout ${LIBUSB_COMMIT}

${DEPS_DIR}/libusb : ${REPOS_DIR}/libusb
	cd  ${REPOS_DIR}/libusb && ./autogen.sh  --prefix=$@
	cd  ${REPOS_DIR}/libusb && make
	mkdir -p ${DEPS_DIR}/libusb
	rm -rf ${DEPS_DIR}/libusb/*
	cd  ${REPOS_DIR}/libusb && make install

libusb :
	@+if [ ! -d ${DEPS_DIR}/$@ ] ; then make ${DEPS_DIR}/$@ ; else echo "$@ skipped."; fi

${REPOS_DIR}/openni15 : 
	mkdir -p ${REPOS_DIR}
	rm -rf ${REPOS_DIR}/openni15	
	cd ${REPOS_DIR} ; git clone ${OPENNI15_REPOS} $@ && cd $@ && git checkout ${OPENNI15_COMMIT}
	sed -i".bak" "s/equivalent/glh_equivalent/g" ${REPOS_DIR}/openni15/Samples/NiViewer/glh/glh_linear.h


${REPOS_DIR}/SensorKinect :
	mkdir -p ${REPOS_DIR}
	rm -rf ${REPOS_DIR}/SensorKinect	
	cd ${REPOS_DIR} ; git clone ${SENSORK_REPOS} $@ && cd $@ && git checkout ${SENSORK_COMMIT}

${DEPS_DIR}/openni15 : ${REPOS_DIR}/openni15 ${DEPS_DIR}/libusb 
	chmod +x ${REPOS_DIR}/openni15/Platform/Linux/CreateRedist/RedistMaker
	cd ${REPOS_DIR}/openni15/Platform/Linux/CreateRedist/ && ./RedistMaker
	rm -rf ${DEPS_DIR}/openni15
	cd ${REPOS_DIR}/openni15 && tar xf ${REPOS_DIR}/openni15/Platform/Linux/CreateRedist/Final/*.tar.bz2
	mv ${REPOS_DIR}/openni15/OpenNI-Bin-*/  ${DEPS_DIR}/openni15
	cp ${REPOS_DIR}/openni15/Data/SamplesConfig.xml  ${DEPS_DIR}/openni15/

${DEPS_DIR}/SensorKinect : ${REPOS_DIR}/SensorKinect  ${REPOS_DIR}/openni15 
	cd $</Platform/Linux/CreateRedist && ./RedistMaker
	cp -rf $</Platform/Linux/Redist/Sensor-Bin-*/  $@/

openni15 :
	@+if [ ! -d ${DEPS_DIR}/$@ ] ; then make ${DEPS_DIR}/$@ ; else echo "$@ skipped."; fi
	@echo "********************************************************************"
	@echo " Don't forget to run: cd ${DEPS_DIR}/$@  && sudo ./install.sh"
	@echo " To test it : cd ${DEPS_DIR}/openni15 && ./Samples/Bin/x64-Release/Sample-NiSimpleRead"
	@echo "********************************************************************"

SensorKinect :
	+if [ ! -d ${DEPS_DIR}/$@ ] ; then make ${DEPS_DIR}/$@ ; else echo "$@ skipped."; fi
	@echo "********************************************************************"
	@echo " Don't forget to run: cd ${DEPS_DIR}/$@  && sudo ./install.sh"
	@echo " To test it : cd ${DEPS_DIR}/openni15 && ./Samples/Bin/x64-Release/Sample-NiSimpleRead"
	@echo "********************************************************************"

.PHONY: openni15  SensorKinect


########################################## OPENNI 2 PART #################################################################
# requires systemd-devel  doxygen

OPENNI2_INCLUDE=${DEPS_DIR}/openni2/OpenNI-Linux-x64-2.2/Include
OPENNI2_REDIST=${DEPS_DIR}/openni2/OpenNI-Linux-x64-2.2/Redist

OPENNI2_INCLUDE_PATH=${DEPS_DIR}/openni2/OpenNI-Linux-x64-2.2/Include
OPENNI2_LIBRARY=${DEPS_DIR}/openni2/OpenNI-Linux-x64-2.2/Redist/libOpenNI2.so

${REPOS_DIR}/openni2 :
	mkdir -p ${REPOS_DIR}
	rm -rf ${REPOS_DIR}/openni2	
	git clone ${OPENNI2_REPOS} $@ && cd $@ && git checkout  ${OPENNI2_COMMIT} 
	cd $@ && sed -i.bak "s/.javaDocExe, .-d., .java../[javaDocExe, '-d', 'java', '-Xdoclint:none']/" Source/Documentation/Runme.py

${REPOS_DIR}/freenect :
	mkdir -p ${REPOS_DIR}
	rm -rf ${REPOS_DIR}/freenect	
	git clone ${FREENECT_REPOS} $@ && cd $@ && git checkout  ${FREENECT_COMMIT}

${DEPS_DIR}/openni2 : ${REPOS_DIR}/openni2 ${REPOS_DIR}/freenect # Needs: libusbx-devel-1.0.21-1.fc25.x86_64
	cd ${REPOS_DIR}/openni2/Packaging && ./ReleaseVersion.py x64
	mkdir -p $@
	cd ${REPOS_DIR}/openni2/Packaging/Final && tar xf OpenNI-Linux-x64-2.2.tar.bz2 -C  $@
	cd ${REPOS_DIR}/freenect && mkdir -p build && rm build/* -rf
	cd ${REPOS_DIR}/freenect/build && cmake .. -DBUILD_OPENNI2_DRIVER=ON && make
	cp -L ${REPOS_DIR}/freenect/build/lib/OpenNI2-FreenectDriver/libFreenectDriver.so ${OPENNI2_REDIST}/OpenNI2/Drivers/

openni2 :
	+if [ ! -d ${DEPS_DIR}/$@ ] ; then make ${DEPS_DIR}/$@ ; else echo "$@ skipped."; fi

.PHONY: openni2


================================================
FILE: framework/makefiles/opentuner.make
================================================

${REPOS_DIR}/opentuner :
	mkdir ${REPOS_DIR} -p
	rm $@ -rf
	git clone https://github.com/jansel/opentuner.git  $@ 

${DEPS_DIR}/opentuner : ${REPOS_DIR}/opentuner 
	mkdir -p $@
	cp -r ${REPOS_DIR}/opentuner/opentuner  ${DEPS_DIR}/opentuner/

opentuner : 
	+if [ ! -d ${DEPS_DIR}/$@ ] ; then make ${DEPS_DIR}/$@ ; else echo "$@ skipped."; fi


.PHONY: opentuner


================================================
FILE: framework/makefiles/pangolin.make
================================================
PANGOLIN_DIR=${DEPS_DIR}/pangolin/lib/cmake/Pangolin/

CURRENT_PANGOLIN_COMMIT=c2a6ef524401945b493f14f8b5b8aa76cc7d71a9 # (Mar 18)

## INFO: Previously we used 8b8b7b96adcf58ac2755dedd3f681fc512385af0 (Jan 17)

${REPOS_DIR}/pangolin :
	mkdir ${REPOS_DIR} -p
	rm ${REPOS_DIR}/pangolin -rf
	git clone "https://github.com/stevenlovegrove/Pangolin.git" ${REPOS_DIR}/pangolin
	cd ${REPOS_DIR}/pangolin && git checkout ${CURRENT_PANGOLIN_COMMIT}


${DEPS_DIR}/pangolin : ${REPOS_DIR}/pangolin  eigen3
	if [ ! -e $(EIGEN3_INCLUDE_DIR) ] ; \
	then \
		echo "ERROR: Pangolin requires EIGEN to be fully functional (make eigen).";\
		exit 1;\
	fi;
	cd ${REPOS_DIR}/pangolin && mkdir -p build && cd build && cmake .. -DBUILD_PANGOLIN_VIDEO=OFF  "-DCMAKE_INSTALL_PREFIX:PATH=$@"  -DEIGEN_INCLUDE_DIR=${EIGEN3_INCLUDE_DIR}
	+cd ${REPOS_DIR}/pangolin/build && make
	mkdir -p $@
	cd ${REPOS_DIR}/pangolin/build && make install

pangolin : 
	+if [ ! -d ${DEPS_DIR}/$@ ] ; then make ${DEPS_DIR}/$@ ; else if cat ${DEPS_DIR}/pangolin/include/pangolin/config.h |grep -q "define HAVE_EIGEN" ; then echo "$@ skipped."; else make ${DEPS_DIR}/$@ ; fi; fi
	@echo "CHECK PANGOLIN"
	@cat ${DEPS_DIR}/pangolin/include/pangolin/config.h |grep -q "define HAVE_EIGEN"
	@echo "PANGOLIN INSTALLED"

.PHONY: pangolin


================================================
FILE: framework/makefiles/pcl.make
================================================
ifndef DEPS_DIR
$(error DEPS_DIR is not set)
endif

ifndef REPOS_DIR
$(error REPOS_DIR is not set)
endif

ifndef DEPS_BUILD_DIR
$(error DEPS_BUILD_DIR is not set)
endif

PCL_DIR=${DEPS_DIR}/pcl/share/pcl-1.8
ANDROID_PCL_DIR=${ANDROID_DEPS_DIR}/pcl/share/pcl-1.8

# DOWNLOADS #

${REPOS_DIR}/pcl :
	mkdir ${REPOS_DIR} -p
	rm ${REPOS_DIR}/pcl -rf
	git clone "https://github.com/PointCloudLibrary/pcl.git" ${REPOS_DIR}/pcl
	cd $@ && git checkout 6fb1b65d3099a915255b070269b1ac78ed384921
# BUILD #
${DEPS_DIR}/pcl : ${REPOS_DIR}/pcl eigen3 flann
	if [ ! -e $(EIGEN3_INCLUDE_DIR) ] ; \
	then \
		echo "ERROR: PCL requires EIGEN to be fully functional (make eigen).";\
		exit 1;\
	fi;
	mkdir ${DEPS_BUILD_DIR}/pcl/ -p
	rm ${DEPS_BUILD_DIR}/pcl/* -rf
	sed -i.bak "s/\(find_package.*\) mpi/\1/" ${REPOS_DIR}/pcl/cmake/pcl_find_boost.cmake # PCL should not need MPI !
	cd ${DEPS_BUILD_DIR}/pcl/ && cmake ${REPOS_DIR}/pcl \
	-DWITH_LIBUSB=FALSE \
	-DWITH_OPENNI=FALSE \
	-DWITH_OPENNI2=FALSE \
	-DWITH_FZAPI=FALSE \
	-DWITH_ENSENSO=FALSE \
	-DWITH_DAVIDSDK=FALSE \
	-DWITH_DSSDK=FALSE \
	-DWITH_RSSDK=FALSE \
	-DWITH_VTK=FALSE \
	-DWITH_PCAP=FALSE \
	-DBUILD_common=TRUE                \
	-DBUILD_octree=TRUE               \
	-DBUILD_io=TRUE                   \
	-DBUILD_kdtree=TRUE               \
	-DBUILD_search=TRUE               \
	-DBUILD_sample_consensus=TRUE     \
	-DBUILD_filters=TRUE              \
	-DBUILD_2d=TRUE                   \
	-DBUILD_geometry=TRUE             \
	-DBUILD_features=TRUE             \
	-DBUILD_ml=TRUE                   \
	-DBUILD_segmentation=FALSE         \
	-DBUILD_surface=TRUE              \
	-DBUILD_outofcore=FALSE              \
	-DBUILD_examples=FALSE            \
	-DBUILD_simulation=FALSE            \
	-DBUILD_registration=TRUE          \
	-DBUILD_keypoints=TRUE            \
	-DBUILD_tracking=FALSE             \
	-DBUILD_recognition=FALSE          \
	-DBUILD_stereo=FALSE               \
	-DBUILD_visualization=FALSE         \
	-DBUILD_tools=FALSE \
	"-DCMAKE_INSTALL_PREFIX:PATH=$@" \
	-DEIGEN_INCLUDE_DIR=${EIGEN3_INCLUDE_DIR} \
	-DFLANN_LIBRARY=${FLANN_LIBRARY} -DCMAKE_BUILD_TYPE=RELEASE \
	-DFLANN_INCLUDE_DIR=${FLANN_INCLUDE_DIR}  > ${DEPS_BUILD_DIR}/pcl/build.log.tmp 2>&1
	if cat ${DEPS_BUILD_DIR}/pcl/build.log.tmp | grep "Requires external library" ; then echo "Error with deps of PCL." ; exit 1 ; fi
	+cd ${DEPS_BUILD_DIR}/pcl/ && make 
	mkdir -p $@
	cd ${DEPS_BUILD_DIR}/pcl/ && make install

pcl : 
	+if [ ! -d ${DEPS_DIR}/$@ ] ; then make ${DEPS_DIR}/$@ ; else echo "$@ skipped."; fi

.PHONY: pcl



================================================
FILE: framework/makefiles/sophus.make
================================================
Sophus_INCLUDE_DIR=${DEPS_DIR}/Sophus/include
Sophus_INCLUDE_DIRS=${DEPS_DIR}/Sophus/include
Sophus_DIR=${DEPS_DIR}/Sophus/share/sophus/cmake

${REPOS_DIR}/Sophus :
	mkdir ${REPOS_DIR} -p
	rm ${REPOS_DIR}/Sophus -rf
	git clone "https://github.com/strasdat/Sophus.git" ${REPOS_DIR}/Sophus
	cd ${REPOS_DIR}/Sophus && git checkout b474f05f839c0f63c281aa4e7ece03145729a2cd


${DEPS_DIR}/Sophus : ${REPOS_DIR}/Sophus
	cd ${REPOS_DIR}/Sophus && mkdir build -p && rm build/* -rf
	cd ${REPOS_DIR}/Sophus/build && cmake .. "-DCMAKE_INSTALL_PREFIX=$@" -DCMAKE_BUILD_TYPE=Release
	cd ${REPOS_DIR}/Sophus/build && make -j2
	mkdir -p $@
	cd ${REPOS_DIR}/Sophus/build && make install

Sophus :
	+if [ ! -d ${DEPS_DIR}/$@ ] ; then make ${DEPS_DIR}/$@ ; else echo "$@ skipped."; fi
.PHONY: sophus


================================================
FILE: framework/makefiles/suitesparse.make
================================================
SUITE_SPARSE_ROOT=${DEPS_DIR}/suitesparse

${REPOS_DIR}/suitesparse :
	mkdir ${REPOS_DIR}/ -p
	rm ${REPOS_DIR}/suitesparse -rf
	cd ${REPOS_DIR}/ && git clone "https://github.com/jluttine/suitesparse.git" 
	cd ${REPOS_DIR}/suitesparse && git checkout v4.3.1


${REPOS_DIR}/suitesparse/CMakeLists.txt : ${REPOS_DIR}/suitesparse
	echo -e "cmake_minimum_required(VERSION 2.8)\nproject(suitesparse)\ninclude_directories(SuiteSparse_config/)\ninclude_directories(CXSparse/Include)\ninclude_directories(\"${ANDROID_NDK}/platforms/android-21/arch-arm/usr/include\")\nFILE(GLOB cxsparse_source CXSparse/Source/*.c)\nadd_library(cxsparse_di  \$${cxsparse_source} )\nadd_library(cxsparse_dl  \$${cxsparse_source} )\nadd_library(cxsparse_ci  \$${cxsparse_source} )\nadd_library(cxsparse_cl  \$${cxsparse_source} )\nSET_TARGET_PROPERTIES(cxsparse_di  PROPERTIES COMPILE_FLAG \"\"  )\nSET_TARGET_PROPERTIES(cxsparse_dl  PROPERTIES COMPILE_FLAG \" -DCS_LONG\"  )\nSET_TARGET_PROPERTIES(cxsparse_ci  PROPERTIES COMPILE_FLAG \"-DCS_COMPLEX\"  )\nSET_TARGET_PROPERTIES(cxsparse_cl  PROPERTIES COMPILE_FLAG \" -DCS_LONG -DCS_COMPLEX\"  )\nINSTALL(TARGETS cxsparse_di  cxsparse_dl  cxsparse_ci  cxsparse_cl \n RUNTIME DESTINATION \$${CMAKE_INSTALL_PREFIX}/bin\n LIBRARY DESTINATION \$${CMAKE_INSTALL_PREFIX}/lib\n ARCHIVE DESTINATION \$${CMAKE_INSTALL_PREFIX}/lib\n)\n" > ${REPOS_DIR}/suitesparse/CMakeLists.txt

## Bruno : TODO : I'm not happy with this build method ... I'd rather like having a full cmake version of it...
## Harry: Suitesparse is not safe to parallel build :-(
${DEPS_DIR}/suitesparse : ${REPOS_DIR}/suitesparse ${REPOS_DIR}/suitesparse/CMakeLists.txt 
	cd ${REPOS_DIR}/suitesparse/ && make
	rm $@ -rf
	mkdir $@/include -p
	mkdir $@/lib -p
	+cd ${REPOS_DIR}/suitesparse/ && make install INSTALL_LIB=$@/lib INSTALL_INCLUDE=$@/include 

${ANDROID_DEPS_DIR}/suitesparse : ${REPOS_DIR}/suitesparse ${REPOS_DIR}/suitesparse/CMakeLists.txt   ${REPOS_DIR}/android-cmake
	cd ${REPOS_DIR}/suitesparse && mkdir build_dir -p
	cd ${REPOS_DIR}/suitesparse && rm build_dir/* -rf
	cd ${REPOS_DIR}/suitesparse/build_dir && cmake  -DBUILD_SHARED_LIBS=OFF  -DCMAKE_TOOLCHAIN_FILE=${REPOS_DIR}/android-cmake/android.toolchain.cmake -DANDROID_NDK=${ANDROID_NDK} -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI="armeabi-v7a with NEON"  -D CMAKE_INSTALL_PREFIX=$(ANDROID_DEPS_DIR)    ..
	+cd ${REPOS_DIR}/suitesparse/build_dir && make
	cd ${REPOS_DIR}/suitesparse/build_dir && make install



suitesparse : 
	+if [ ! -d ${DEPS_DIR}/$@ ] ; then make ${DEPS_DIR}/$@ ; else echo "$@ skipped."; fi
android-suitesparse : ${ANDROID_DEPS_DIR}/suitesparse

.PHONY: suitesparse android-suitesparse


================================================
FILE: framework/makefiles/toon.make
================================================
TOON_INCLUDE_DIR=${DEPS_DIR}/toon/include
ANDROID_TOON_INCLUDE_DIR=${ANDROID_DEPS_DIR}/toon/include

${REPOS_DIR}/TooN :
	mkdir ${REPOS_DIR} -p
	rm ${REPOS_DIR}/TooN -rf
	git clone "https://github.com/edrosten/TooN.git" ${REPOS_DIR}/TooN
	cd ${REPOS_DIR}/TooN && git checkout 92241416d2a4874fd2334e08a5d417dfea6a1a3f

${DEPS_DIR}/toon: ${REPOS_DIR}/TooN
	cd ${REPOS_DIR}/TooN && ./configure --prefix=$@
	mkdir -p $@
	+cd ${REPOS_DIR}/TooN && make install

${ANDROID_DEPS_DIR}/toon: ${REPOS_DIR}/TooN
	mkdir -p $@
	cd ${REPOS_DIR}/TooN && ./configure --prefix=$@  --disable-lapack --enable-typeof=decltype
	+cd ${REPOS_DIR}/TooN && make install


android-toon: ${ANDROID_DEPS_DIR}/toon

toon : 
	+if [ ! -d ${DEPS_DIR}/$@ ] ; then make ${DEPS_DIR}/$@ ; else echo "$@ skipped."; fi

.PHONY: toon android-toon


================================================
FILE: framework/patchs/OpenNI2_SLAMBench.patch
================================================
From 24cca203f2e4e1de89fb858b7b018d86abb99c8a Mon Sep 17 00:00:00 2001
From: "Bruno Bodin (zebulon)" <bbodin@inf.ed.ac.uk>
Date: Tue, 26 Apr 2016 14:58:30 +0100
Subject: [PATCH] test

---
 Android.mk                                              | 12 +++++++-----
 Application.mk                                          |  3 +--
 Include/OniPlatform.h                                   |  2 ++
 Packaging/ReleaseVersion.py                             |  4 ++--
 Source/Core/OniContext.cpp                              | 15 ++++++---------
 Source/Drivers/OniFile/DataRecords.cpp                  | 14 ++++++++++++++
 ThirdParty/PSCommon/XnLib/Include/XnPlatform.h          |  2 ++
 ThirdParty/PSCommon/XnLib/Source/XnLogAndroidWriter.cpp |  2 +-
 8 files changed, 35 insertions(+), 19 deletions(-)

diff --git a/Android.mk b/Android.mk
index 4e3e26b..c7ee11b 100644
--- a/Android.mk
+++ b/Android.mk
@@ -24,13 +24,15 @@ endif
 # Setup OpenNI2 local variables
 OPENNI2_CFLAGS := -O3 -ftree-vectorize -ffast-math -funroll-loops -fPIC -fvisibility=hidden
 
-ifeq ($(ARCH_ARM_HAVE_ARMV7A),true) 
-	OPENNI2_CFLAGS += -march=armv7-a -mfloat-abi=softfp -mtune=cortex-a9 -mfpu=vfp
-endif
 
-ifeq ($(ARCH_ARM_HAVE_NEON),true)
-	OPENNI2_CFLAGS += -mfpu=neon -DHAVE_NEON=1 -flax-vector-conversions
+ifeq ($(TARGET_ARCH),arm64)
+	OPENNI2_CFLAGS += -march=armv8-a -DHAVE_NEON=1 -flax-vector-conversions
+else
+ifeq ($(TARGET_ARCH),arm)
+	OPENNI2_CFLAGS += -march=armv7-a -mfloat-abi=softfp -mtune=cortex-a9 -mfpu=vfp  -mfpu=neon -DHAVE_NEON=1 -flax-vector-conversions
 endif
+endif
+
 
 # Recurse through all subdirs
 include $(call all-subdir-makefiles)
diff --git a/Application.mk b/Application.mk
index 9c7ff56..67982a6 100644
--- a/Application.mk
+++ b/Application.mk
@@ -21,5 +21,4 @@
 APP_PLATFORM := android-9
 
 # Use ARM v7a instruction set
-APP_ABI := armeabi-v7a
-ARCH_ARM_HAVE_ARMV7A := true
\ No newline at end of file
+APP_ABI := armeabi-v7a arm64-v8a
diff --git a/Include/OniPlatform.h b/Include/OniPlatform.h
index 602b4ba..6b1d7ef 100644
--- a/Include/OniPlatform.h
+++ b/Include/OniPlatform.h
@@ -37,6 +37,8 @@
 #	include "Win32/OniPlatformWin32.h"
 #elif defined (ANDROID) && defined (__arm__)
 #	include "Android-Arm/OniPlatformAndroid-Arm.h"
+#elif defined (ANDROID) && defined (__aarch64__)
+#	include "Android-Arm/OniPlatformAndroid-Arm.h"
 #elif (__linux__ && (i386 || __x86_64__))
 #	include "Linux-x86/OniPlatformLinux-x86.h"
 #elif (__linux__ && __arm__)
diff --git a/Packaging/ReleaseVersion.py b/Packaging/ReleaseVersion.py
index e2fdf5f..4413e6a 100755
--- a/Packaging/ReleaseVersion.py
+++ b/Packaging/ReleaseVersion.py
@@ -113,14 +113,14 @@ if plat == 'android':
     os.symlink('../../../', buildDir + '/jni/OpenNI2')
     shutil.copy('../Android.mk', buildDir + '/jni')
     shutil.copy('../Application.mk', buildDir + '/jni')
-    rc = subprocess.call([ ndkDir + '/ndk-build', '-C', buildDir, '-j8' ])
+    rc = subprocess.call([ ndkDir + '/ndk-build', '-C', buildDir, '-j1' ])
     if rc != 0:
         print 'Build failed!'
         sys.exit(3)
 
     finalFile = finalDir + '/' + outputDir + '.tar'
     
-    shutil.move(buildDir + '/libs/armeabi-v7a', outputDir)
+    shutil.move(buildDir + '/libs/', outputDir)
     
     # add config files
     shutil.copy('../Config/OpenNI.ini', outputDir)
diff --git a/Source/Core/OniContext.cpp b/Source/Core/OniContext.cpp
index 153c7c6..cf13851 100644
--- a/Source/Core/OniContext.cpp
+++ b/Source/Core/OniContext.cpp
@@ -23,8 +23,8 @@
 #include <XnLog.h>
 #include <XnOSCpp.h>
 
-static const char* ONI_CONFIGURATION_FILE = "OpenNI.ini";
-static const char* ONI_DEFAULT_DRIVERS_REPOSITORY = "OpenNI2" XN_FILE_DIR_SEP "Drivers";
+static const char* ONI_CONFIGURATION_FILE         = "/data/ni/OpenNI.ini";
+static const char* ONI_DEFAULT_DRIVERS_REPOSITORY = "/data/ni/";
 
 #define XN_MASK_ONI_CONTEXT "OniContext"
 
@@ -84,15 +84,12 @@ OniStatus Context::initialize()
 	XnBool configurationFileExists = FALSE;
 
 	// Search the module directory for OpenNI.ini.
-	xnOSStrCopy(strOniConfigurationFile, strBaseDir, XN_FILE_MAX_PATH);
-	rc = xnOSAppendFilePath(strOniConfigurationFile, ONI_CONFIGURATION_FILE, XN_FILE_MAX_PATH);
-	if (rc == XN_STATUS_OK)
-	{
-		xnOSDoesFileExist(strOniConfigurationFile, &configurationFileExists);
-	}
+	xnOSStrCopy(strOniConfigurationFile, ONI_CONFIGURATION_FILE, XN_FILE_MAX_PATH);
+	xnOSDoesFileExist(strOniConfigurationFile, &configurationFileExists);
+
 
 #ifdef ONI_PLATFORM_ANDROID_OS
-	xnLogSetMaskMinSeverity(XN_LOG_MASK_ALL, (XnLogSeverity)0);
+	xnLogSetMaskMinSeverity(XN_LOG_MASK_ALL, (XnLogSeverity)3);
 	xnLogSetAndroidOutput(TRUE);
 #endif
 	
diff --git a/Source/Drivers/OniFile/DataRecords.cpp b/Source/Drivers/OniFile/DataRecords.cpp
index bffc7e6..17bad91 100644
--- a/Source/Drivers/OniFile/DataRecords.cpp
+++ b/Source/Drivers/OniFile/DataRecords.cpp
@@ -667,6 +667,8 @@ XnStatus GeneralPropRecord::Decode()
 	XnUInt8* pData = const_cast<XnUInt8*>(GetReadPos());
 
 #if (XN_PLATFORM == XN_PLATFORM_LINUX_ARM || XN_PLATFORM == XN_PLATFORM_ARC || XN_PLATFORM == XN_PLATFORM_ANDROID_ARM)
+
+#if __arm__
 	// under ARM we have some alignment issues. Move this buffer so it will be aligned.
 	XnUInt32 nAlignFix = XN_DEFAULT_MEM_ALIGN - ((XnUInt32)pData % XN_DEFAULT_MEM_ALIGN);
 	if (nAlignFix != 0)
@@ -674,6 +676,18 @@ XnStatus GeneralPropRecord::Decode()
 		xnOSMemMove(pData + nAlignFix, pData, m_nPropDataSize);
 		pData += nAlignFix;
 	}
+#elif __aarch64__
+	// under ARM we have some alignment issues. Move this buffer so it will be aligned.
+	XnUInt64 nAlignFix = XN_DEFAULT_MEM_ALIGN - ((XnUInt64)pData % XN_DEFAULT_MEM_ALIGN);
+	if (nAlignFix != 0)
+	{
+		xnOSMemMove(pData + nAlignFix, pData, m_nPropDataSize);
+		pData += nAlignFix;
+	}
+#else
+#error "Unsupported ARM platform"
+#endif
+
 #endif
 
 	m_pPropData = pData;
diff --git a/ThirdParty/PSCommon/XnLib/Include/XnPlatform.h b/ThirdParty/PSCommon/XnLib/Include/XnPlatform.h
index 07e8192..1abfc71 100644
--- a/ThirdParty/PSCommon/XnLib/Include/XnPlatform.h
+++ b/ThirdParty/PSCommon/XnLib/Include/XnPlatform.h
@@ -49,6 +49,8 @@
 #include "Win32/XnPlatformWin32.h"
 #elif defined (ANDROID) && defined (__arm__)
 #include "Android-Arm/XnPlatformAndroid-Arm.h"
+#elif defined (ANDROID) && defined (__aarch64__)
+#include "Android-Arm/XnPlatformAndroid-Arm.h"
 #elif (__linux__ && (i386 || __x86_64__))
 #include "Linux-x86/XnPlatformLinux-x86.h"
 #elif (__linux__ && __arm__)
diff --git a/ThirdParty/PSCommon/XnLib/Source/XnLogAndroidWriter.cpp b/ThirdParty/PSCommon/XnLib/Source/XnLogAndroidWriter.cpp
index 6c9b6c1..32b27b7 100644
--- a/ThirdParty/PSCommon/XnLib/Source/XnLogAndroidWriter.cpp
+++ b/ThirdParty/PSCommon/XnLib/Source/XnLogAndroidWriter.cpp
@@ -58,7 +58,7 @@ void XnLogAndroidWriter::WriteEntry(const XnLogEntry* pEntry)
 #ifdef XN_PLATFORM_ANDROID_OS
 	ALOGE("OpenNI2: %s\n", pEntry->strMessage);
 #else
-	__android_log_print(OpenNISeverityToAndroid(pEntry->nSeverity), "OpenNI", pEntry->strMessage);
+	__android_log_print(OpenNISeverityToAndroid(pEntry->nSeverity), "OpenNI", "%s", pEntry->strMessage);
 #endif
 }
 
-- 
2.4.11



================================================
FILE: framework/patchs/OpenNI_SLAMBench.patch
================================================
From 1e72c95f8eccb42e1b81330c5428d64bac4dedba Mon Sep 17 00:00:00 2001
From: "Bruno Bodin (zebulon)" <bbodin@inf.ed.ac.uk>
Date: Sun, 7 Jun 2015 14:08:10 +0100
Subject: [PATCH 1/2] temp fix

---
 Platform/Android/Samples/SamplesAssistant/jni/Android.mk | 2 +-
 Platform/Android/jni/Application.mk                      | 2 +-
 Platform/Android/jni/OpenNI.jni/Android.mk               | 2 +-
 Platform/Android/jni/OpenNI/Android.mk                   | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/Platform/Android/Samples/SamplesAssistant/jni/Android.mk b/Platform/Android/Samples/SamplesAssistant/jni/Android.mk
index e4b980d..9515e8d 100644
--- a/Platform/Android/Samples/SamplesAssistant/jni/Android.mk
+++ b/Platform/Android/Samples/SamplesAssistant/jni/Android.mk
@@ -25,7 +25,7 @@ LOCAL_C_INCLUDES := \
 
 LOCAL_CFLAGS:= -fvisibility=hidden -DXN_EXPORTS
 
-LOCAL_LDFLAGS += -Wl,--export-dynamic --dynamic-linker
+LOCAL_LDFLAGS += -Wl,--export-dynamic
 
 LOCAL_LDLIBS := -llog
 LOCAL_LDLIBS += $(OPENNI_DIR)/Platform/Android/libs/armeabi-v7a/libOpenNI.so
diff --git a/Platform/Android/jni/Application.mk b/Platform/Android/jni/Application.mk
index 6d2da24..4f04cd6 100644
--- a/Platform/Android/jni/Application.mk
+++ b/Platform/Android/jni/Application.mk
@@ -10,7 +10,7 @@ APP_CFLAGS := -O3 -ftree-vectorize -ffast-math -funroll-loops
 APP_CFLAGS += -fPIC
 
 ifeq ($(APP_ABI),armeabi-v7a)
-	APP_CFLAGS += -march=armv7-a -mfloat-abi=softfp -mtune=cortex-a9 -mfp=vfpv3-d16 -mfpu=vfp
+	APP_CFLAGS += -march=armv7-a -mfloat-abi=softfp -mtune=cortex-a9  -mfpu=vfp
 
 # optionally add NEON to compilation flags.
 # to activate, run: "ndk-build USE_NEON=1"
diff --git a/Platform/Android/jni/OpenNI.jni/Android.mk b/Platform/Android/jni/OpenNI.jni/Android.mk
index 30b332c..f79566f 100644
--- a/Platform/Android/jni/OpenNI.jni/Android.mk
+++ b/Platform/Android/jni/OpenNI.jni/Android.mk
@@ -22,7 +22,7 @@ LOCAL_C_INCLUDES := \
 
 LOCAL_CFLAGS:= -fvisibility=hidden -DXN_EXPORTS
 
-LOCAL_LDFLAGS += -Wl,--export-dynamic --dynamic-linker
+LOCAL_LDFLAGS += -Wl,--export-dynamic 
 
 LOCAL_LDLIBS := -llog
 
diff --git a/Platform/Android/jni/OpenNI/Android.mk b/Platform/Android/jni/OpenNI/Android.mk
index 06acac6..b1b36e7 100644
--- a/Platform/Android/jni/OpenNI/Android.mk
+++ b/Platform/Android/jni/OpenNI/Android.mk
@@ -28,7 +28,7 @@ LOCAL_C_INCLUDES := \
 
 LOCAL_CFLAGS:= -fvisibility=hidden -DXN_EXPORTS
 
-LOCAL_LDFLAGS += -Wl,--export-dynamic --dynamic-linker 
+LOCAL_LDFLAGS += -Wl,--export-dynamic
 
 LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../../../Include
 LOCAL_SHARED_LIBRARIES := libusb 
-- 
2.4.11


From 3340ca042133bcf5e747f13278d2c25bfdaacf0a Mon Sep 17 00:00:00 2001
From: "Bruno Bodin (zebulon)" <bbodin@inf.ed.ac.uk>
Date: Tue, 26 Apr 2016 14:31:00 +0100
Subject: [PATCH 2/2] add aarch64

---
 Include/XnPlatform.h                  |  6 ++++--
 Platform/Android/jni/Application.mk   | 16 +++++++---------
 Source/Modules/Common/DataRecords.cpp | 15 +++++++++++++++
 3 files changed, 26 insertions(+), 11 deletions(-)

diff --git a/Include/XnPlatform.h b/Include/XnPlatform.h
index c5e2b9b..cfda4d8 100644
--- a/Include/XnPlatform.h
+++ b/Include/XnPlatform.h
@@ -61,11 +61,13 @@
 
 	#include "Win32/XnPlatformWin32.h"
 #elif defined(ANDROID) && defined(__arm__)
-	#include "Android-Arm/XnPlatformAndroid-Arm.h"
+#include "Android-Arm/XnPlatformAndroid-Arm.h"
+#elif defined(ANDROID) && defined(__aarch64__)
+#include "Android-Arm/XnPlatformAndroid-Arm.h"
 #elif (linux && (i386 || __x86_64__))
 	#include "Linux-x86/XnPlatformLinux-x86.h"
 #elif (linux && __arm__)
-	#include "Linux-Arm/XnPlatformLinux-Arm.h"
+#include "Linux-Arm/XnPlatformLinux-Arm.h"
 #elif _ARC
 	#include "ARC/XnPlatformARC.h"
 #elif (__APPLE__)
diff --git a/Platform/Android/jni/Application.mk b/Platform/Android/jni/Application.mk
index 4f04cd6..2854ed5 100644
--- a/Platform/Android/jni/Application.mk
+++ b/Platform/Android/jni/Application.mk
@@ -3,20 +3,18 @@ APP_STL := gnustl_static
 # Android >= v2.3
 APP_PLATFORM := android-9
 
-# Build ARMv7-A machine code.
-APP_ABI := armeabi-v7a
+# Build ARMv7-A and arm64-v8a machine code.
+APP_ABI :=  arm64-v8a armeabi-v7a
 APP_CFLAGS := -O3 -ftree-vectorize -ffast-math -funroll-loops
 
 APP_CFLAGS += -fPIC
 
-ifeq ($(APP_ABI),armeabi-v7a)
-	APP_CFLAGS += -march=armv7-a -mfloat-abi=softfp -mtune=cortex-a9  -mfpu=vfp
 
-# optionally add NEON to compilation flags.
-# to activate, run: "ndk-build USE_NEON=1"
-ifdef USE_NEON
-$(call __ndk_info,Building everything with NEON support!)
-	APP_CFLAGS += -mfpu=neon -DHAVE_NEON=1 -flax-vector-conversions
+ifeq ($(TARGET_ARCH),arm64)
+	APP_CFLAGS += -march=armv8-a -DHAVE_NEON=1 -flax-vector-conversions
+else
+ifeq ($(TARGET_ARCH),arm)
+	APP_CFLAGS += -march=armv7-a -mfloat-abi=softfp -mtune=cortex-a9 -mfpu=vfp  -mfpu=neon -DHAVE_NEON=1 -flax-vector-conversions
 endif
 endif
 
diff --git a/Source/Modules/Common/DataRecords.cpp b/Source/Modules/Common/DataRecords.cpp
index 37e8dcd..9306c28 100644
--- a/Source/Modules/Common/DataRecords.cpp
+++ b/Source/Modules/Common/DataRecords.cpp
@@ -656,6 +656,8 @@ XnStatus GeneralPropRecord::Decode()
 	XnUInt8* pData = const_cast<XnUInt8*>(GetReadPos());
 
 #if (XN_PLATFORM == XN_PLATFORM_LINUX_ARM || XN_PLATFORM == XN_PLATFORM_ARC || XN_PLATFORM == XN_PLATFORM_ANDROID_ARM)
+    #if __arm__
+
 	// under ARM we have some alignment issues. Move this buffer so it will be aligned.
 	XnUInt32 nAlignFix = XN_DEFAULT_MEM_ALIGN - ((XnUInt32)pData % XN_DEFAULT_MEM_ALIGN);
 	if (nAlignFix != 0)
@@ -663,6 +665,19 @@ XnStatus GeneralPropRecord::Decode()
 		xnOSMemMove(pData + nAlignFix, pData, m_nPropDataSize);
 		pData += nAlignFix;
 	}
+#elif __aarch64__
+	// under ARM we have some alignment issues. Move this buffer so it will be aligned.
+	XnUInt64 nAlignFix = XN_DEFAULT_MEM_ALIGN - ((XnUInt64)pData % XN_DEFAULT_MEM_ALIGN);
+	if (nAlignFix != 0)
+	{
+		xnOSMemMove(pData + nAlignFix, pData, m_nPropDataSize);
+		pData += nAlignFix;
+	}
+#else
+#error "Unsupported ARM platform"
+#endif
+
+
 #endif
 
 	m_pPropData = pDat
Download .txt
gitextract_mua7h2yd/

├── .clang-format
├── .dockerignore
├── .gitignore
├── .travis.yml
├── CMakeLists.txt
├── CONTRIBUTORS
├── LICENSE
├── Makefile
├── README.md
├── _config.yml
├── benchmarks/
│   └── CMakeLists.txt
├── cmake_modules/
│   ├── CUDACheckCompute.cmake
│   ├── FindBrisk.cmake
│   ├── FindCVD.cmake
│   ├── FindCeres.cmake
│   ├── FindEigen.cmake
│   ├── FindEigen3.cmake
│   ├── FindFreeImage.cmake
│   ├── FindG2O.cmake
│   ├── FindGVARS.cmake
│   ├── FindGlog.cmake
│   ├── FindLIBYAML.cmake
│   ├── FindOpenCL.cmake
│   ├── FindOpenNI.cmake
│   ├── FindOpenNI2.cmake
│   ├── FindPAPI.cmake
│   ├── FindSLAMBENCH.cmake
│   ├── FindSuiteSparse.cmake
│   ├── FindTooN.cmake
│   └── cuda_compute_capability.c
├── docker/
│   ├── Makefile
│   ├── cuda-ubuntu-16.04.docker
│   ├── fastCI.docker
│   ├── fedora-24.docker
│   ├── fedora-25.docker
│   ├── fedora-26.docker
│   ├── github.docker
│   ├── run_cuda.sh
│   ├── travis-deps.docker
│   ├── ubuntu-14.04-bitbucket.docker
│   ├── ubuntu-14.04-deps.docker
│   ├── ubuntu-14.04.docker
│   ├── ubuntu-16.04.docker
│   └── ubuntu-16.10.docker
├── framework/
│   ├── CMakeLists.txt
│   ├── makefiles/
│   │   ├── README.md
│   │   ├── brisk.make
│   │   ├── ceres.make
│   │   ├── cvd.make
│   │   ├── dataset-utils.makefile
│   │   ├── deps.makefile
│   │   ├── download_benchmarks.py
│   │   ├── download_datasets.py
│   │   ├── eigen3.make
│   │   ├── flann.make
│   │   ├── freeimage.make
│   │   ├── g2o.make
│   │   ├── gcc.make
│   │   ├── gvars.make
│   │   ├── libopencl-stub.make
│   │   ├── opencv.make
│   │   ├── opengv.make
│   │   ├── openni.make
│   │   ├── opentuner.make
│   │   ├── pangolin.make
│   │   ├── pcl.make
│   │   ├── sophus.make
│   │   ├── suitesparse.make
│   │   └── toon.make
│   ├── patchs/
│   │   ├── OpenNI2_SLAMBench.patch
│   │   ├── OpenNI_SLAMBench.patch
│   │   ├── SensorKinect_SLAMBench.patch
│   │   ├── freeimage.patch
│   │   └── libopencl-stub_SLAMBench.patch
│   ├── shared/
│   │   ├── CMakeLists.txt
│   │   ├── include/
│   │   │   ├── ColumnWriter.h
│   │   │   ├── ParameterComponent.h
│   │   │   ├── ParameterManager.h
│   │   │   ├── Parameters.h
│   │   │   ├── ResultWriter.h
│   │   │   ├── SLAMBenchAPI.h
│   │   │   ├── SLAMBenchConfiguration.h
│   │   │   ├── SLAMBenchException.h
│   │   │   ├── SLAMBenchLibraryHelper.h
│   │   │   ├── SLAMBenchUI.h
│   │   │   ├── SLAMBenchUI_Pangolin.h
│   │   │   ├── TimeStamp.h
│   │   │   ├── io/
│   │   │   │   ├── Event.h
│   │   │   │   ├── FrameBuffer.h
│   │   │   │   ├── FrameBufferSource.h
│   │   │   │   ├── FrameFormat.h
│   │   │   │   ├── FrameSource.h
│   │   │   │   ├── InputInterface.h
│   │   │   │   ├── InputInterfaceManager.h
│   │   │   │   ├── PixelFormat.h
│   │   │   │   ├── SLAMFile.h
│   │   │   │   ├── SLAMFrame.h
│   │   │   │   ├── SensorType.h
│   │   │   │   ├── core/
│   │   │   │   │   └── Core.h
│   │   │   │   ├── deserialisation/
│   │   │   │   │   ├── Deserialiser.h
│   │   │   │   │   ├── SLAMFileDeserialiser.h
│   │   │   │   │   ├── SLAMFileHeaderDeserialiser.h
│   │   │   │   │   ├── SLAMFrameDeserialiser.h
│   │   │   │   │   └── SensorCollectionDeserialiser.h
│   │   │   │   ├── format/
│   │   │   │   │   ├── DataFormatter.h
│   │   │   │   │   ├── EventDataFormatter.h
│   │   │   │   │   ├── ImageDataFormatter.h
│   │   │   │   │   └── PointCloud.h
│   │   │   │   ├── openni15/
│   │   │   │   │   ├── ONI15Frame.h
│   │   │   │   │   ├── ONI15FrameStream.h
│   │   │   │   │   └── ONI15InputInterface.h
│   │   │   │   ├── openni2/
│   │   │   │   │   ├── ONI2Frame.h
│   │   │   │   │   ├── ONI2FrameStream.h
│   │   │   │   │   └── ONI2InputInterface.h
│   │   │   │   ├── realsense/
│   │   │   │   │   ├── RealSense2Frame.h
│   │   │   │   │   ├── RealSense2FrameStream.h
│   │   │   │   │   └── RealSense2InputInterface.h
│   │   │   │   ├── sensor/
│   │   │   │   │   ├── AccelerometerSensor.h
│   │   │   │   │   ├── CameraSensor.h
│   │   │   │   │   ├── CameraSensorFinder.h
│   │   │   │   │   ├── DepthSensor.h
│   │   │   │   │   ├── EventCameraSensor.h
│   │   │   │   │   ├── GroundTruthSensor.h
│   │   │   │   │   ├── GyroSensor.h
│   │   │   │   │   ├── IMUSensor.h
│   │   │   │   │   ├── OdomSensor.h
│   │   │   │   │   ├── PointCloudSensor.h
│   │   │   │   │   ├── Sensor.h
│   │   │   │   │   ├── SensorCollection.h
│   │   │   │   │   ├── SensorDatabase.h
│   │   │   │   │   └── sensor_builder.h
│   │   │   │   └── serialisation/
│   │   │   │       ├── SLAMFileHeaderSerialiser.h
│   │   │   │       ├── SLAMFileSerialiser.h
│   │   │   │       ├── SLAMFrameSerialiser.h
│   │   │   │       └── Serialiser.h
│   │   │   ├── lodepng.h
│   │   │   ├── math_types.h
│   │   │   ├── metrics/
│   │   │   │   ├── ATEMetric.h
│   │   │   │   ├── DepthEstimationMetric.h
│   │   │   │   ├── DurationMetric.h
│   │   │   │   ├── FrameData.h
│   │   │   │   ├── MemoryMetric.h
│   │   │   │   ├── Metric.h
│   │   │   │   ├── MetricManager.h
│   │   │   │   ├── MetricValue.h
│   │   │   │   ├── Phase.h
│   │   │   │   ├── PointCloudMetric.h
│   │   │   │   ├── PowerMetric.h
│   │   │   │   ├── RPEMetric.h
│   │   │   │   ├── memory_utils/
│   │   │   │   │   └── CUDAMonitor.h
│   │   │   │   └── power_utils/
│   │   │   │       ├── PAPIMonitor.h
│   │   │   │       ├── PowerMonitor.h
│   │   │   │       └── XU3Monitor.h
│   │   │   ├── outputs/
│   │   │   │   ├── Output.h
│   │   │   │   ├── OutputManager.h
│   │   │   │   ├── OutputManagerWriter.h
│   │   │   │   ├── PoseOutput.h
│   │   │   │   ├── TrajectoryAlignmentMethod.h
│   │   │   │   └── TrajectoryInterface.h
│   │   │   ├── sb_malloc.h
│   │   │   ├── sysutils.h
│   │   │   ├── timings.h
│   │   │   ├── utils.h
│   │   │   └── values/
│   │   │       ├── Value.h
│   │   │       ├── ValueDispatch.h
│   │   │       ├── ValueInterface.h
│   │   │       └── ValuePrinter.h
│   │   └── src/
│   │       ├── ColumnWriter.cpp
│   │       ├── ParameterComponent.cpp
│   │       ├── ParameterManager.cpp
│   │       ├── ResultWriter.cpp
│   │       ├── SLAMBenchConfiguration.cpp
│   │       ├── SLAMBenchUI_Pangolin.cpp
│   │       ├── dummy_library.cpp
│   │       ├── io/
│   │       │   ├── FrameBuffer.cpp
│   │       │   ├── FrameBufferSource.cpp
│   │       │   ├── FrameFormat.cpp
│   │       │   ├── FrameSource.cpp
│   │       │   ├── InputInterface.cpp
│   │       │   ├── InputInterfaceManager.cpp
│   │       │   ├── PixelFormat.cpp
│   │       │   ├── SLAMFile.cpp
│   │       │   ├── SLAMFrame.cpp
│   │       │   ├── core/
│   │       │   │   └── Core.cpp
│   │       │   ├── deserialisation/
│   │       │   │   ├── Deserialiser.cpp
│   │       │   │   ├── SLAMFileDeserialiser.cpp
│   │       │   │   ├── SLAMFileHeaderDeserialiser.cpp
│   │       │   │   ├── SLAMFrameDeserialiser.cpp
│   │       │   │   └── SensorCollectionDeserialiser.cpp
│   │       │   ├── format/
│   │       │   │   ├── DataFormatter.cpp
│   │       │   │   └── PointCloud.cpp
│   │       │   ├── openni/
│   │       │   │   ├── ONI2Frame.cpp
│   │       │   │   ├── ONI2FrameStream.cpp
│   │       │   │   └── ONI2InputInterface.cpp
│   │       │   ├── openni15/
│   │       │   │   ├── ONI15Frame.cpp
│   │       │   │   ├── ONI15FrameStream.cpp
│   │       │   │   └── ONI15InputInterface.cpp
│   │       │   ├── realsense/
│   │       │   │   ├── RealSense2Frame.cpp
│   │       │   │   ├── RealSense2FrameStream.cpp
│   │       │   │   └── RealSense2InputInterface.cpp
│   │       │   ├── sensor/
│   │       │   │   ├── AccelerometerSensor.cpp
│   │       │   │   ├── CameraSensor.cpp
│   │       │   │   ├── CameraSensorFinder.cpp
│   │       │   │   ├── DepthSensor.cpp
│   │       │   │   ├── EventCameraSensor.cpp
│   │       │   │   ├── GroundTruthSensor.cpp
│   │       │   │   ├── GyroSensor.cpp
│   │       │   │   ├── IMUSensor.cpp
│   │       │   │   ├── OdomSensor.cpp
│   │       │   │   ├── PointCloudSensor.cpp
│   │       │   │   ├── Sensor.cpp
│   │       │   │   ├── SensorCollection.cpp
│   │       │   │   └── SensorDatabase.cpp
│   │       │   └── serialisation/
│   │       │       ├── SLAMFileHeaderSerialiser.cpp
│   │       │       ├── SLAMFileSerialiser.cpp
│   │       │       ├── SLAMFrameSerialiser.cpp
│   │       │       └── Serialiser.cpp
│   │       ├── library_wrapper.cpp
│   │       ├── lodepng.cpp
│   │       ├── metrics/
│   │       │   ├── ATEMetric.cpp
│   │       │   ├── DepthEstimationMetric.cpp
│   │       │   ├── DurationMetric.cpp
│   │       │   ├── MemoryMetric.cpp
│   │       │   ├── Metric.cpp
│   │       │   ├── MetricManager.cpp
│   │       │   ├── Phase.cpp
│   │       │   ├── PointCloudMetric.cpp
│   │       │   ├── PowerMetric.cpp
│   │       │   ├── RPEMetric.cpp
│   │       │   ├── memory_utils/
│   │       │   │   └── CUDAMonitor.cpp
│   │       │   └── power_utils/
│   │       │       ├── PAPIMonitor.cpp
│   │       │       └── XU3Monitor.cpp
│   │       ├── outputs/
│   │       │   ├── Output.cpp
│   │       │   ├── OutputManager.cpp
│   │       │   ├── OutputManagerWriter.cpp
│   │       │   ├── TrajectoryAlignmentMethod.cpp
│   │       │   └── TrajectoryInterface.cpp
│   │       ├── sb_malloc.cpp
│   │       └── values/
│   │           ├── Value.cpp
│   │           ├── ValueDispatch.cpp
│   │           ├── ValueInterface.cpp
│   │           └── ValuePrinter.cpp
│   └── tools/
│       ├── CMakeLists.txt
│       ├── README.md
│       ├── accuracy-tools/
│       │   ├── CMakeLists.txt
│       │   └── pointcloud_aligner.cpp
│       ├── dataset-tools/
│       │   ├── BONN.cpp
│       │   ├── CMakeLists.txt
│       │   ├── ETHI.cpp
│       │   ├── EUROCMAV.cpp
│       │   ├── ICL.cpp
│       │   ├── ICLNUIM.cpp
│       │   ├── OpenLORIS.cpp
│       │   ├── SVO.cpp
│       │   ├── TUM-ROSBAG.cpp
│       │   ├── TUM.cpp
│       │   ├── UZHFPV.cpp
│       │   ├── VolumeDeform.cpp
│       │   ├── dataset-generator.cpp
│       │   ├── include/
│       │   │   ├── BONN.h
│       │   │   ├── DatasetReader.h
│       │   │   ├── ETHI.h
│       │   │   ├── EUROCMAV.h
│       │   │   ├── ICL.h
│       │   │   ├── ICLNUIM.h
│       │   │   ├── OpenLORIS.h
│       │   │   ├── SVO.h
│       │   │   ├── TUM.h
│       │   │   ├── UZHFPV.h
│       │   │   ├── VolumeDeform.h
│       │   │   └── utils/
│       │   │       ├── PlyASCIIReader.h
│       │   │       ├── RegexPattern.h
│       │   │       ├── dataset_utils.h
│       │   │       └── tinyply.h
│       │   ├── io-inspect.cpp
│       │   ├── io-monoslam.cpp
│       │   ├── io-readply.cpp
│       │   ├── lodepng.cpp
│       │   └── lodepng.h
│       ├── loaders/
│       │   ├── CMakeLists.txt
│       │   ├── benchmark_loader.cpp
│       │   ├── pangolin_loader.cpp
│       │   └── slambench_app.cpp
│       └── profiling-tools/
│           ├── CMakeLists.txt
│           └── OCLWrapper.cpp
├── icra2018_results/
│   ├── 1080/
│   │   ├── memory_efusion_living_room_traj2_loop.log
│   │   ├── memory_infinitam_living_room_traj2_loop.log
│   │   ├── memory_kfusion_living_room_traj2_loop.log
│   │   ├── memory_lsdslam_living_room_traj2_loop.log
│   │   ├── memory_orbslam2_living_room_traj2_loop.log
│   │   ├── violons_libefusion-cuda_living_room_traj0_loop.log
│   │   ├── violons_libefusion-cuda_living_room_traj1_loop.log
│   │   ├── violons_libefusion-cuda_living_room_traj2_loop.log
│   │   ├── violons_libefusion-cuda_living_room_traj3_loop.log
│   │   ├── violons_libefusion-cuda_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_libefusion-cuda_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_libefusion-cuda_rgbd_dataset_freiburg2_rpy.log
│   │   ├── violons_libefusion-cuda_rgbd_dataset_freiburg2_xyz.log
│   │   ├── violons_libinfinitam-cpp_living_room_traj0_loop.log
│   │   ├── violons_libinfinitam-cpp_living_room_traj1_loop.log
│   │   ├── violons_libinfinitam-cpp_living_room_traj2_loop.log
│   │   ├── violons_libinfinitam-cpp_living_room_traj3_loop.log
│   │   ├── violons_libinfinitam-cpp_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_libinfinitam-cpp_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_libinfinitam-cpp_rgbd_dataset_freiburg2_rpy.log
│   │   ├── violons_libinfinitam-cpp_rgbd_dataset_freiburg2_xyz.log
│   │   ├── violons_libinfinitam-cuda_living_room_traj0_loop.log
│   │   ├── violons_libinfinitam-cuda_living_room_traj1_loop.log
│   │   ├── violons_libinfinitam-cuda_living_room_traj2_loop.log
│   │   ├── violons_libinfinitam-cuda_living_room_traj3_loop.log
│   │   ├── violons_libinfinitam-cuda_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_libinfinitam-cuda_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_libinfinitam-cuda_rgbd_dataset_freiburg2_rpy.log
│   │   ├── violons_libinfinitam-cuda_rgbd_dataset_freiburg2_xyz.log
│   │   ├── violons_libkfusion-cpp_living_room_traj0_loop.log
│   │   ├── violons_libkfusion-cpp_living_room_traj1_loop.log
│   │   ├── violons_libkfusion-cpp_living_room_traj2_loop.log
│   │   ├── violons_libkfusion-cpp_living_room_traj3_loop.log
│   │   ├── violons_libkfusion-cpp_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_libkfusion-cpp_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_libkfusion-cpp_rgbd_dataset_freiburg2_rpy.log
│   │   ├── violons_libkfusion-cpp_rgbd_dataset_freiburg2_xyz.log
│   │   ├── violons_libkfusion-cuda_living_room_traj0_loop.log
│   │   ├── violons_libkfusion-cuda_living_room_traj1_loop.log
│   │   ├── violons_libkfusion-cuda_living_room_traj2_loop.log
│   │   ├── violons_libkfusion-cuda_living_room_traj3_loop.log
│   │   ├── violons_libkfusion-cuda_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_libkfusion-cuda_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_libkfusion-cuda_rgbd_dataset_freiburg2_rpy.log
│   │   ├── violons_libkfusion-cuda_rgbd_dataset_freiburg2_xyz.log
│   │   ├── violons_liblsdslam-cpp_living_room_traj0_loop.log
│   │   ├── violons_liblsdslam-cpp_living_room_traj1_loop.log
│   │   ├── violons_liblsdslam-cpp_living_room_traj2_loop.log
│   │   ├── violons_liblsdslam-cpp_living_room_traj3_loop.log
│   │   ├── violons_liblsdslam-cpp_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_liblsdslam-cpp_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_liblsdslam-cpp_rgbd_dataset_freiburg2_rpy.log
│   │   ├── violons_liblsdslam-cpp_rgbd_dataset_freiburg2_xyz.log
│   │   ├── violons_liborbslam2-original_living_room_traj0_loop.log
│   │   ├── violons_liborbslam2-original_living_room_traj1_loop.log
│   │   ├── violons_liborbslam2-original_living_room_traj2_loop.log
│   │   ├── violons_liborbslam2-original_living_room_traj3_loop.log
│   │   ├── violons_liborbslam2-original_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_liborbslam2-original_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_liborbslam2-original_rgbd_dataset_freiburg2_rpy.log
│   │   └── violons_liborbslam2-original_rgbd_dataset_freiburg2_xyz.log
│   ├── Makefile
│   ├── paper_run.sh
│   ├── plotutils.py
│   ├── slamlog.py
│   ├── tegra/
│   │   ├── memory_efusion_living_room_traj2_loop.log
│   │   ├── memory_infinitam_living_room_traj2_loop.log
│   │   ├── memory_kfusion_living_room_traj2_loop.log
│   │   ├── memory_lsdslam_living_room_traj2_loop.log
│   │   ├── memory_orbslam2_living_room_traj2_loop.log
│   │   ├── violons_libefusion-cuda_living_room_traj0_loop.log
│   │   ├── violons_libefusion-cuda_living_room_traj1_loop.log
│   │   ├── violons_libefusion-cuda_living_room_traj2_loop.log
│   │   ├── violons_libefusion-cuda_living_room_traj3_loop.log
│   │   ├── violons_libefusion-cuda_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_libefusion-cuda_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_libefusion-cuda_rgbd_dataset_freiburg2_rpy.log
│   │   ├── violons_libefusion-cuda_rgbd_dataset_freiburg2_xyz.log
│   │   ├── violons_libinfinitam-cpp_living_room_traj0_loop.log
│   │   ├── violons_libinfinitam-cpp_living_room_traj1_loop.log
│   │   ├── violons_libinfinitam-cpp_living_room_traj2_loop.log
│   │   ├── violons_libinfinitam-cpp_living_room_traj3_loop.log
│   │   ├── violons_libinfinitam-cpp_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_libinfinitam-cpp_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_libinfinitam-cpp_rgbd_dataset_freiburg2_rpy.log
│   │   ├── violons_libinfinitam-cpp_rgbd_dataset_freiburg2_xyz.log
│   │   ├── violons_libinfinitam-cuda_living_room_traj0_loop.log
│   │   ├── violons_libinfinitam-cuda_living_room_traj1_loop.log
│   │   ├── violons_libinfinitam-cuda_living_room_traj2_loop.log
│   │   ├── violons_libinfinitam-cuda_living_room_traj3_loop.log
│   │   ├── violons_libinfinitam-cuda_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_libinfinitam-cuda_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_libinfinitam-cuda_rgbd_dataset_freiburg2_rpy.log
│   │   ├── violons_libinfinitam-cuda_rgbd_dataset_freiburg2_xyz.log
│   │   ├── violons_libkfusion-cpp_living_room_traj0_loop.log
│   │   ├── violons_libkfusion-cpp_living_room_traj1_loop.log
│   │   ├── violons_libkfusion-cpp_living_room_traj2_loop.log
│   │   ├── violons_libkfusion-cpp_living_room_traj3_loop.log
│   │   ├── violons_libkfusion-cpp_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_libkfusion-cpp_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_libkfusion-cpp_rgbd_dataset_freiburg2_rpy.log
│   │   ├── violons_libkfusion-cpp_rgbd_dataset_freiburg2_xyz.log
│   │   ├── violons_libkfusion-cuda_living_room_traj0_loop.log
│   │   ├── violons_libkfusion-cuda_living_room_traj1_loop.log
│   │   ├── violons_libkfusion-cuda_living_room_traj2_loop.log
│   │   ├── violons_libkfusion-cuda_living_room_traj3_loop.log
│   │   ├── violons_libkfusion-cuda_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_libkfusion-cuda_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_libkfusion-cuda_rgbd_dataset_freiburg2_rpy.log
│   │   ├── violons_libkfusion-cuda_rgbd_dataset_freiburg2_xyz.log
│   │   ├── violons_liblsdslam-cpp_living_room_traj0_loop.log
│   │   ├── violons_liblsdslam-cpp_living_room_traj1_loop.log
│   │   ├── violons_liblsdslam-cpp_living_room_traj2_loop.log
│   │   ├── violons_liblsdslam-cpp_living_room_traj3_loop.log
│   │   ├── violons_liblsdslam-cpp_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_liblsdslam-cpp_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_liblsdslam-cpp_rgbd_dataset_freiburg2_rpy.log
│   │   ├── violons_liblsdslam-cpp_rgbd_dataset_freiburg2_xyz.log
│   │   ├── violons_liborbslam2-original_living_room_traj0_loop.log
│   │   ├── violons_liborbslam2-original_living_room_traj1_loop.log
│   │   ├── violons_liborbslam2-original_living_room_traj2_loop.log
│   │   ├── violons_liborbslam2-original_living_room_traj3_loop.log
│   │   ├── violons_liborbslam2-original_rgbd_dataset_freiburg1_rpy.log
│   │   ├── violons_liborbslam2-original_rgbd_dataset_freiburg1_xyz.log
│   │   ├── violons_liborbslam2-original_rgbd_dataset_freiburg2_rpy.log
│   │   └── violons_liborbslam2-original_rgbd_dataset_freiburg2_xyz.log
│   ├── utils.py
│   └── violins.py
└── scripts/
    ├── evaluate.py
    └── tum_evaluate_tools/
        ├── __init__.py
        ├── associate.py
        └── evaluate_ate.py
Download .txt
SYMBOL INDEX (1021 symbols across 186 files)

FILE: cmake_modules/cuda_compute_capability.c
  function main (line 14) | int main() {

FILE: framework/makefiles/download_benchmarks.py
  function echo (line 8) | def echo(str="", echoargs = ""):

FILE: framework/makefiles/download_datasets.py
  function echo (line 9) | def echo(str="", echoargs = ""):

FILE: framework/shared/include/ColumnWriter.h
  function namespace (line 22) | namespace slambench {
  function namespace (line 38) | namespace slambench {

FILE: framework/shared/include/ParameterComponent.h
  type Parameter (line 16) | struct Parameter
  type std (line 19) | typedef  std::vector<Parameter*>          arguments_vector ;
  type std (line 20) | typedef  std::vector<ParameterComponent*> components_vector ;
  function class (line 23) | class ParameterComponent
  function AddComponent (line 51) | void AddComponent(ParameterComponent *component) {

FILE: framework/shared/include/ParameterManager.h
  type std (line 20) | typedef std::pair<ParameterComponent*,Parameter*> param_info_t;
  function namespace (line 21) | namespace slambench {

FILE: framework/shared/include/Parameters.h
  function string (line 29) | string precise_to_string(T value)
  function type3 (line 63) | type3 atof3(const char * optarg) {
  function type3 (line 86) | type3 atoi3(const char * optarg) {
  function type4 (line 110) | type4 atof4(const char * optarg) {
  type Parameter (line 141) | struct Parameter {
  function std (line 151) | inline  std::string           getName()                                 ...
  function std (line 152) | inline  const std::string     getShortOption(const ParameterComponent* p...
  function std (line 153) | inline  std::string    		  getLongOption(const ParameterComponent* pc)  ...
  function Parameter (line 177) | struct TriggeredParameter : Parameter {
  function requiresValue (line 216) | bool requiresValue() {return true;}
  function std (line 219) | inline  const std::string     getStrDefault()                       {if ...
  function resetValue (line 220) | inline  void                  resetValue()                          {if ...
  function T (line 222) | inline  const T&              getTypedValue()                       {if ...
  function std (line 223) | inline  const std::string     getStrType()                          {ret...
  function virtual (line 226) | virtual inline  const std::string   getStrDetails(ParameterComponent*pc)  {
  function copyValue (line 244) | float [2]>::copyValue(float  (*to) [2] , float const (*from) [2]) {
  function setValue (line 248) | float [2]>::setValue(const char* optarg)  {
  function copyValue (line 265) | float [4]>::copyValue(float  (*to) [4] , float const (*from) [4]) {
  function setValue (line 272) | float [4]>::setValue(const char* optarg)  {
  function copyValue (line 291) | inline void  TypedParameter<std::string>::copyValue(std::string* to,cons...
  function setValue (line 292) | inline void  TypedParameter<std::string>::setValue(const char*otarg)    ...
  function copyValue (line 295) | bool>::copyValue(bool* to,const bool* from)                {*to = *(bool...
  function setValue (line 296) | bool>::setValue(const char* otarg)                 {if (ptr_) (*(bool*)p...
  function copyValue (line 300) | unsigned int>::copyValue(unsigned int* to,const unsigned int* from)     ...
  function copyValue (line 301) | int>::copyValue(int* to,const int* from)              {*to = *(int*)from;;}
  function copyValue (line 302) | long unsigned int>::copyValue(long unsigned int* to,const long unsigned ...
  function copyValue (line 303) | float>::copyValue(float* to,const float* from)            {*to = *(float...
  function copyValue (line 304) | double>::copyValue(double* to,const double* from)           {*to = *(dou...
  function copyValue (line 305) | inline void  TypedParameter<sb_float3>::copyValue(sb_float3* to,const sb...
  function copyValue (line 306) | inline void  TypedParameter<sb_float4>::copyValue(sb_float4* to,const sb...
  function copyValue (line 307) | inline void  TypedParameter<sb_uint3>::copyValue(sb_uint3* to,const sb_u...
  function copyValue (line 308) | int>  >::copyValue(std::vector<int> * to,const std::vector<int> * from) ...
  function setValue (line 339) | inline void  TypedParameter< std::vector<std::string>  >::setValue(const...
  function getValue (line 351) | unsigned int>::getValue(const void * ptr) const{return precise_to_string...

FILE: framework/shared/include/ResultWriter.h
  function class (line 16) | class ResultWriter {

FILE: framework/shared/include/SLAMBenchAPI.h
  function namespace (line 18) | namespace slambench {

FILE: framework/shared/include/SLAMBenchConfiguration.h
  type std (line 44) | typedef std::chrono::time_point<std::chrono::high_resolution_clock> stl_...
  function class (line 46) | class SLAMBenchConfiguration : public ParameterComponent {
  function FireEndOfFrame (line 121) | void FireEndOfFrame() { for(auto i : frame_callbacks_) { i(); } }
  function input_callback (line 127) | inline void input_callback(Parameter* param, ParameterComponent* caller) {
  function help_callback (line 146) | inline void help_callback(Parameter*, ParameterComponent* caller) {
  function dse_callback (line 156) | inline void dse_callback(Parameter*, ParameterComponent* caller) {
  function log_callback (line 162) | inline void log_callback(Parameter*, ParameterComponent* caller) {
  function slam_library_callback (line 167) | inline void slam_library_callback(Parameter* param, ParameterComponent* ...

FILE: framework/shared/include/SLAMBenchException.h
  function class (line 16) | class SLAMBenchException : public std::exception {

FILE: framework/shared/include/SLAMBenchLibraryHelper.h
  function class (line 23) | class SLAMBenchLibraryHelper : public ParameterComponent {
  function std (line 62) | inline std::ostream& GetLogStream() {return log_stream_;}
  function slambench (line 63) | inline slambench::metrics::MetricManager &GetMetricManager() { return me...
  function slambench (line 64) | inline slambench::outputs::OutputManager &GetOutputManager() { return ou...
  function slambench (line 65) | inline slambench::io::InputInterface *GetInputInterface() { return input...
  function slambench (line 67) | inline const slambench::io::SensorCollection &get_sensors() {
  function update_input_interface (line 71) | inline void update_input_interface(slambench::io::InputInterface* interf...
  type std (line 77) | typedef std::vector<SLAMBenchLibraryHelper*> slam_lib_container_t;

FILE: framework/shared/include/SLAMBenchUI.h
  function class (line 28) | class SLAMBenchUI

FILE: framework/shared/include/SLAMBenchUI_Pangolin.h
  function class (line 29) | class SLAMBenchUI_Pangolin : public SLAMBenchUI

FILE: framework/shared/include/TimeStamp.h
  function namespace (line 21) | namespace slambench {
  type std (line 52) | typedef std::chrono::duration<uint64_t, std::ratio<1, 1000000000>> Durat...
  function Sleep (line 54) | inline void Sleep(const Duration d) {

FILE: framework/shared/include/io/Event.h
  function namespace (line 15) | namespace slambench {

FILE: framework/shared/include/io/FrameBuffer.h
  function namespace (line 17) | namespace slambench {

FILE: framework/shared/include/io/FrameBufferSource.h
  function namespace (line 16) | namespace slambench {

FILE: framework/shared/include/io/FrameFormat.h
  function namespace (line 16) | namespace slambench {

FILE: framework/shared/include/io/FrameSource.h
  function class (line 25) | class FrameStream {
  function class (line 33) | class FrameCollection {
  function class (line 41) | class FrameCollectionStream : public FrameStream {
  function class (line 57) | class GTBufferingFrameStream : public FrameStream {

FILE: framework/shared/include/io/InputInterface.h
  function namespace (line 22) | namespace slambench {

FILE: framework/shared/include/io/InputInterfaceManager.h
  function namespace (line 23) | namespace slambench {

FILE: framework/shared/include/io/PixelFormat.h
  function namespace (line 17) | namespace slambench {

FILE: framework/shared/include/io/SLAMFile.h
  function namespace (line 21) | namespace slambench {

FILE: framework/shared/include/io/SLAMFrame.h
  function namespace (line 23) | namespace slambench {

FILE: framework/shared/include/io/SensorType.h
  function namespace (line 14) | namespace slambench {

FILE: framework/shared/include/io/core/Core.h
  function namespace (line 21) | namespace slambench {

FILE: framework/shared/include/io/deserialisation/Deserialiser.h
  function namespace (line 14) | namespace slambench {

FILE: framework/shared/include/io/deserialisation/SLAMFileDeserialiser.h
  function namespace (line 15) | namespace slambench {

FILE: framework/shared/include/io/deserialisation/SLAMFileHeaderDeserialiser.h
  function namespace (line 15) | namespace slambench {

FILE: framework/shared/include/io/deserialisation/SLAMFrameDeserialiser.h
  function namespace (line 16) | namespace slambench {

FILE: framework/shared/include/io/deserialisation/SensorCollectionDeserialiser.h
  function namespace (line 16) | namespace slambench {

FILE: framework/shared/include/io/format/DataFormatter.h
  function namespace (line 14) | namespace slambench {

FILE: framework/shared/include/io/format/EventDataFormatter.h
  function namespace (line 18) | namespace slambench {

FILE: framework/shared/include/io/format/ImageDataFormatter.h
  function namespace (line 20) | namespace slambench {

FILE: framework/shared/include/io/format/PointCloud.h
  function namespace (line 17) | namespace slambench {

FILE: framework/shared/include/io/openni15/ONI15Frame.h
  function namespace (line 21) | namespace slambench {

FILE: framework/shared/include/io/openni15/ONI15FrameStream.h
  function namespace (line 18) | namespace xn {
  function namespace (line 27) | namespace slambench {

FILE: framework/shared/include/io/openni15/ONI15InputInterface.h
  function namespace (line 18) | namespace xn {
  function namespace (line 21) | namespace slambench {

FILE: framework/shared/include/io/openni2/ONI2Frame.h
  function namespace (line 17) | namespace slambench {

FILE: framework/shared/include/io/openni2/ONI2FrameStream.h
  function namespace (line 18) | namespace openni {
  function namespace (line 23) | namespace slambench {

FILE: framework/shared/include/io/openni2/ONI2InputInterface.h
  function namespace (line 18) | namespace openni {
  function namespace (line 23) | namespace slambench {

FILE: framework/shared/include/io/realsense/RealSense2Frame.h
  function namespace (line 17) | namespace slambench {

FILE: framework/shared/include/io/realsense/RealSense2FrameStream.h
  function namespace (line 20) | namespace slambench {

FILE: framework/shared/include/io/realsense/RealSense2InputInterface.h
  function namespace (line 21) | namespace slambench {

FILE: framework/shared/include/io/sensor/AccelerometerSensor.h
  function namespace (line 15) | namespace slambench {

FILE: framework/shared/include/io/sensor/CameraSensor.h
  function namespace (line 18) | namespace slambench {

FILE: framework/shared/include/io/sensor/CameraSensorFinder.h
  function namespace (line 18) | namespace slambench {

FILE: framework/shared/include/io/sensor/DepthSensor.h
  function namespace (line 15) | namespace slambench {

FILE: framework/shared/include/io/sensor/EventCameraSensor.h
  function namespace (line 15) | namespace slambench {

FILE: framework/shared/include/io/sensor/GroundTruthSensor.h
  function namespace (line 15) | namespace slambench {

FILE: framework/shared/include/io/sensor/GyroSensor.h
  function namespace (line 14) | namespace slambench {

FILE: framework/shared/include/io/sensor/IMUSensor.h
  function namespace (line 15) | namespace slambench {

FILE: framework/shared/include/io/sensor/OdomSensor.h
  function namespace (line 15) | namespace slambench {

FILE: framework/shared/include/io/sensor/PointCloudSensor.h
  function namespace (line 15) | namespace slambench {

FILE: framework/shared/include/io/sensor/Sensor.h
  function namespace (line 18) | namespace io {

FILE: framework/shared/include/io/sensor/SensorCollection.h
  function namespace (line 18) | namespace slambench {

FILE: framework/shared/include/io/sensor/SensorDatabase.h
  function namespace (line 17) | namespace slambench {

FILE: framework/shared/include/io/sensor/sensor_builder.h
  function namespace (line 22) | namespace slambench {

FILE: framework/shared/include/io/serialisation/SLAMFileHeaderSerialiser.h
  function namespace (line 15) | namespace slambench {

FILE: framework/shared/include/io/serialisation/SLAMFileSerialiser.h
  function namespace (line 17) | namespace slambench {

FILE: framework/shared/include/io/serialisation/SLAMFrameSerialiser.h
  function namespace (line 17) | namespace slambench {

FILE: framework/shared/include/io/serialisation/Serialiser.h
  function namespace (line 15) | namespace slambench {

FILE: framework/shared/include/lodepng.h
  type LodePNGColorType (line 87) | typedef enum LodePNGColorType {
  function namespace (line 190) | namespace lodepng {
  type LodePNGDecompressSettings (line 243) | typedef struct LodePNGDecompressSettings LodePNGDecompressSettings;
  type LodePNGDecompressSettings (line 244) | struct LodePNGDecompressSettings {
  type LodePNGCompressSettings (line 268) | typedef struct LodePNGCompressSettings LodePNGCompressSettings;
  type LodePNGCompressSettings (line 269) | struct LodePNGCompressSettings /*deflate = compress*/
  type LodePNGColorMode (line 301) | typedef struct LodePNGColorMode {
  type LodePNGTime (line 379) | typedef struct LodePNGTime {
  type LodePNGInfo (line 390) | typedef struct LodePNGInfo {
  type LodePNGDecoderSettings (line 500) | typedef struct LodePNGDecoderSettings {
  type LodePNGFilterStrategy (line 528) | typedef enum LodePNGFilterStrategy {
  type LodePNGAutoConvert (line 546) | typedef enum LodePNGAutoConvert {
  type LodePNGEncoderSettings (line 576) | typedef struct LodePNGEncoderSettings {
  type LodePNGState (line 611) | typedef struct LodePNGState {
  function namespace (line 801) | namespace lodepng {

FILE: framework/shared/include/math_types.h
  type sb_int2 (line 15) | typedef struct sb_int2 {
  type sb_uint2 (line 20) | typedef struct sb_uint2 {
  type sb_int3 (line 25) | typedef struct sb_uint3 {
  type sb_uchar3 (line 29) | typedef struct sb_uchar3 {
  type sb_uchar4 (line 33) | typedef struct sb_uchar4 {
  type sb_float3 (line 38) | typedef struct sb_float3 {
  type sb_float4 (line 43) | typedef struct sb_float4 {
  function sb_int2 (line 49) | inline sb_int2 make_sb_int2( int a, int b) {return {a,b};}
  function sb_uint2 (line 51) | inline sb_uint2 make_sb_uint2(unsigned int a,unsigned int b) {return {a,...
  function sb_uchar3 (line 53) | inline sb_uchar3 make_sb_uchar3(unsigned char a,unsigned char b, unsigne...
  function sb_uchar4 (line 55) | inline sb_uchar4 make_sb_uchar4(unsigned char a,unsigned char b, unsigne...
  function sb_uint3 (line 57) | inline sb_uint3  make_sb_uint3(unsigned int a,unsigned int b, unsigned i...
  function sb_float3 (line 59) | inline sb_float3 make_sb_float3(float a,float b, float c) {return {a,b,c};}
  function sb_float4 (line 61) | inline sb_float4 make_sb_float4(float a,float b, float c, float d) {retu...

FILE: framework/shared/include/metrics/ATEMetric.h
  function namespace (line 17) | namespace slambench {
  function namespace (line 23) | namespace slambench {

FILE: framework/shared/include/metrics/DepthEstimationMetric.h
  function namespace (line 6) | namespace slambench {

FILE: framework/shared/include/metrics/DurationMetric.h
  function namespace (line 22) | namespace slambench {

FILE: framework/shared/include/metrics/FrameData.h
  function namespace (line 15) | namespace slambench {

FILE: framework/shared/include/metrics/MemoryMetric.h
  function namespace (line 20) | namespace slambench {

FILE: framework/shared/include/metrics/Metric.h
  function namespace (line 24) | namespace slambench {

FILE: framework/shared/include/metrics/MetricManager.h
  function namespace (line 25) | namespace slambench {

FILE: framework/shared/include/metrics/MetricValue.h
  function namespace (line 20) | namespace slambench {

FILE: framework/shared/include/metrics/Phase.h
  function namespace (line 20) | namespace slambench {

FILE: framework/shared/include/metrics/PointCloudMetric.h
  function namespace (line 7) | namespace slambench {

FILE: framework/shared/include/metrics/PowerMetric.h
  function namespace (line 18) | namespace slambench {

FILE: framework/shared/include/metrics/RPEMetric.h
  function namespace (line 17) | namespace slambench {

FILE: framework/shared/include/metrics/memory_utils/CUDAMonitor.h
  type cudaError_t (line 18) | typedef int cudaError_t ;
  type cudaError_t (line 19) | typedef cudaError_t (*cudaMemGetInfo_t)( 	size_t *  	,  	size_t *  	);
  type CUuuid (line 20) | typedef struct CUuuid_st {
  type cudaUUID_t (line 24) | typedef struct CUuuid_st cudaUUID_t;
  type cudaDeviceProp (line 25) | typedef struct {
  type cudaError_t (line 99) | typedef cudaError_t (*cudaGetDeviceProperties_t)( 	cudaDeviceProp *  	, ...
  function class (line 101) | class CUDAMonitor {

FILE: framework/shared/include/metrics/power_utils/PAPIMonitor.h
  type PapiPower (line 50) | struct PapiPower {
  function IsValid (line 84) | bool IsValid () {
  function startSample (line 88) | void startSample () {

FILE: framework/shared/include/metrics/power_utils/PowerMonitor.h
  function class (line 13) | class PowerMonitor {

FILE: framework/shared/include/metrics/power_utils/XU3Monitor.h
  type XU3Sensor (line 18) | enum XU3Sensor {
  function IsValid (line 79) | bool IsValid () {
  function startSample (line 83) | void startSample () {

FILE: framework/shared/include/outputs/Output.h
  function class (line 31) | class BaseOutput {
  function class (line 76) | class Output : public BaseOutput {

FILE: framework/shared/include/outputs/OutputManager.h
  function namespace (line 26) | namespace slambench {

FILE: framework/shared/include/outputs/OutputManagerWriter.h
  function namespace (line 21) | namespace slambench {

FILE: framework/shared/include/outputs/PoseOutput.h
  function namespace (line 15) | namespace slambench {

FILE: framework/shared/include/outputs/TrajectoryAlignmentMethod.h
  function namespace (line 20) | namespace slambench {

FILE: framework/shared/include/outputs/TrajectoryInterface.h
  function namespace (line 16) | namespace slambench {

FILE: framework/shared/include/sb_malloc.h
  function namespace (line 42) | namespace slambench {

FILE: framework/shared/include/sysutils.h
  function parseLine (line 16) | inline int parseLine(char* line){
  function getValueVmSize (line 24) | inline int getValueVmSize(){ //Note: this value is in KB!
  function getValueVmRSS (line 40) | inline int getValueVmRSS(){ //Note: this value is in KB!

FILE: framework/shared/include/timings.h
  function tick (line 23) | inline float tick() {
  function tock (line 36) | inline double tock() {

FILE: framework/shared/include/utils.h
  function std (line 18) | inline std::string getFileExt(const std::string& s) {
  function class (line 29) | class FastLock {

FILE: framework/shared/include/values/Value.h
  function namespace (line 23) | namespace slambench {
  function class (line 205) | class Point3DF {
  function class (line 212) | class ColoredPoint3DF {
  function class (line 221) | class HeatMapPoint3DF {
  function class (line 231) | class PointCloudValue : public Value {
  function Clear (line 240) | void Clear() { makeUnique(); points_->clear(); }
  function point_container_t (line 242) | const point_container_t &GetPoints() const { assert(points_); return *po...
  function SetTransform (line 245) | void SetTransform(const Eigen::Matrix4f &new_txfm) { transform_ = new_tx...
  function class (line 256) | class HeatMapPointCloudValue : public Value {
  function Clear (line 265) | void Clear() { makeUnique(); points_->clear(); }
  function point_container_t (line 267) | const point_container_t &GetPoints() const { assert(points_); return *po...
  function SetTransform (line 270) | void SetTransform(const Eigen::Matrix4f &new_txfm) { transform_ = new_tx...
  function class (line 280) | class ColoredPointCloudValue : public Value {
  function class (line 318) | class FrameValue : public Value {
  function class (line 337) | class FeatureValue : public Value {
  function VT_COLLECTION (line 352) | struct TypeForVT<VT_COLLECTION> { typedef ValueCollectionValue type; }
  function VT_U64 (line 353) | struct TypeForVT<VT_U64> { typedef TypedValue<uint64_t> type; }
  function VT_DOUBLE (line 354) | struct TypeForVT<VT_DOUBLE> { typedef TypedValue<double> type; }
  function VT_STRING (line 355) | struct TypeForVT<VT_STRING> { typedef TypedValue<std::string> type; }
  function VT_TRAJECTORY (line 356) | struct TypeForVT<VT_TRAJECTORY> { typedef TrajectoryValue type; }
  function VT_POSE (line 357) | struct TypeForVT<VT_POSE> { typedef PoseValue type; }
  function VT_POINTCLOUD (line 358) | struct TypeForVT<VT_POINTCLOUD> { typedef PointCloudValue type; }
  function VT_MATRIX (line 359) | struct TypeForVT<VT_MATRIX> { typedef TypedValue<Eigen::Matrix4f> type; }
  function uint64_t (line 361) | struct VTForType<uint64_t> { static constexpr ValueType value() { return...
  function double (line 362) | struct VTForType<double> { static constexpr ValueType value() { return V...
  function string (line 363) | struct VTForType<std::string> { static constexpr ValueType value() { ret...
  function Matrix4f (line 364) | struct VTForType<Eigen::Matrix4f> { static constexpr ValueType value() {...

FILE: framework/shared/include/values/ValueDispatch.h
  function namespace (line 16) | namespace slambench {

FILE: framework/shared/include/values/ValueInterface.h
  function namespace (line 19) | namespace values {

FILE: framework/shared/include/values/ValuePrinter.h
  function namespace (line 19) | namespace slambench {

FILE: framework/shared/src/SLAMBenchConfiguration.cpp
  type tm (line 505) | struct tm

FILE: framework/shared/src/SLAMBenchUI_Pangolin.cpp
  function ConvertChannel (line 232) | float ConvertChannel(float f) {
  function ConvertColour (line 237) | std::tuple<float,float,float> ConvertColour(std::tuple<float,float,float...
  function GetUnconvertedColour (line 241) | std::tuple<float,float,float> GetUnconvertedColour(float f) {
  function GetColour (line 262) | std::tuple<float,float,float> GetColour(float f) {
  class PoseOutputDrawContext (line 266) | class PoseOutputDrawContext {
    method PoseOutputDrawContext (line 268) | PoseOutputDrawContext(slambench::outputs::BaseOutput *output) : interf...
  type sysinfo (line 1120) | struct sysinfo

FILE: framework/shared/src/dummy_library.cpp
  function sb_new_slam_configuration (line 12) | bool sb_new_slam_configuration(SLAMBenchLibraryHelper * slam_settings) {
  function sb_init_slam_system (line 16) | bool sb_init_slam_system(SLAMBenchLibraryHelper * slam_settings)  {
  function sb_update_frame (line 21) | bool sb_update_frame (SLAMBenchLibraryHelper * , slambench::io::SLAMFram...
  function sb_process_once (line 25) | bool sb_process_once (SLAMBenchLibraryHelper * slam_settings)  {
  function sb_clean_slam_system (line 29) | bool sb_clean_slam_system() {
  function sb_update_outputs (line 33) | bool sb_update_outputs(SLAMBenchLibraryHelper *lib, const slambench::Tim...

FILE: framework/shared/src/io/FrameBufferSource.cpp
  function FrameBuffer (line 14) | FrameBuffer *SingleFrameBufferSource::Next() {

FILE: framework/shared/src/io/FrameSource.cpp
  function SLAMFrame (line 21) | SLAMFrame* FrameCollectionStream::GetNextFrame() {
  function SLAMFrame (line 34) | SLAMFrame* GTBufferingFrameStream::GTFrameCollection::GetFrame(unsigned ...
  function SLAMFrame (line 39) | SLAMFrame* GTBufferingFrameStream::GTFrameCollection::GetClosestFrameToT...
  function SLAMFrame (line 61) | SLAMFrame* GTBufferingFrameStream::GetNextFrame()
  function SLAMFrame (line 114) | SLAMFrame* RealTimeFrameStream::GetNextFrame()

FILE: framework/shared/src/io/InputInterface.cpp
  function FrameStream (line 27) | FrameStream& BasicInputInterface::GetFrames() {
  function SensorCollection (line 31) | SensorCollection& BasicInputInterface::GetSensors() {
  function FrameStream (line 39) | FrameStream& FileInputInterface::GetFrames() {
  function SensorCollection (line 43) | SensorCollection& FileInputInterface::GetSensors() {
  function FrameStream (line 66) | FrameStream& FileStreamInputInterface::GetFrames() {
  function SensorCollection (line 70) | SensorCollection& FileStreamInputInterface::GetSensors() {

FILE: framework/shared/src/io/InputInterfaceManager.cpp
  function InputInterface (line 71) | InputInterface* InputInterfaceManager::GetCurrentInputInterface()
  function SLAMFrame (line 79) | SLAMFrame* InputInterfaceManager::GetNextFrame() const {
  function SLAMFrame (line 88) | SLAMFrame* InputInterfaceManager::GetClosestGTFrameToTime(slambench::Tim...

FILE: framework/shared/src/io/SLAMFile.cpp
  function SLAMFrame (line 24) | SLAMFrame* SLAMFile::GetFrame(unsigned int index) {
  function Sensor (line 68) | Sensor* SLAMFile::GetSensor(const Sensor::sensor_type_t &type) {
  function SLAMFile (line 75) | SLAMFile* SLAMFile::Read(const std::string& filename, FrameBufferSource ...

FILE: framework/shared/src/io/SLAMFrame.cpp
  function ParseFile (line 127) | std::vector<DType> ParseFile(std::ifstream &str) {

FILE: framework/shared/src/io/core/Core.cpp
  type stat (line 18) | struct stat
  function MappedFile (line 39) | MappedFile slambench::io::core::ReadFile(const std::string &filename)

FILE: framework/shared/src/io/deserialisation/Deserialiser.cpp
  function FILE (line 16) | FILE *Deserialiser::File() const {

FILE: framework/shared/src/io/deserialisation/SLAMFileDeserialiser.cpp
  function FrameBuffer (line 81) | FrameBuffer *SLAMFileDeserialiser::GetNextFramebuffer() const {

FILE: framework/shared/src/io/deserialisation/SLAMFrameDeserialiser.cpp
  function SLAMFrame (line 24) | SLAMFrame* SLAMFrameDeserialiser::GetNextFrame() {

FILE: framework/shared/src/io/format/PointCloud.cpp
  function PointCloud (line 17) | PointCloud* PointCloud::FromRaw(char* data)
  function PointCloud (line 52) | PointCloud *PlyReader::Read(std::istream &input)

FILE: framework/shared/src/io/openni/ONI2FrameStream.cpp
  function SLAMFrame (line 24) | SLAMFrame* ONI2FrameStream::GetNextFrame() {
  class FrameAllocator (line 48) | class FrameAllocator : public openni::VideoStream::FrameAllocator {
    method FrameAllocator (line 50) | FrameAllocator() : _ptr(malloc(0)),_size(0) {}
    method freeFrameBuffer (line 61) | void freeFrameBuffer(void* data) override {

FILE: framework/shared/src/io/openni/ONI2InputInterface.cpp
  function FrameStream (line 75) | FrameStream& ONI2InputInterface::GetFrames() {
  function SensorCollection (line 81) | SensorCollection& ONI2InputInterface::GetSensors() {

FILE: framework/shared/src/io/openni15/ONI15FrameStream.cpp
  function SLAMFrame (line 25) | SLAMFrame* ONI15FrameStream::GetNextFrame() {

FILE: framework/shared/src/io/openni15/ONI15InputInterface.cpp
  function FrameStream (line 46) | FrameStream& ONI15InputInterface::GetFrames() {
  function SensorCollection (line 52) | SensorCollection& ONI15InputInterface::GetSensors() {
  function CameraSensor (line 58) | CameraSensor *ONI15InputInterface::BuildCameraSensor() {
  function DepthSensor (line 85) | DepthSensor *ONI15InputInterface::BuildDepthSensor() {

FILE: framework/shared/src/io/realsense/RealSense2FrameStream.cpp
  function SLAMFrame (line 27) | SLAMFrame* RealSense2FrameStream::GetNextFrame() {

FILE: framework/shared/src/io/realsense/RealSense2InputInterface.cpp
  function FrameStream (line 45) | FrameStream& RealSense2InputInterface::GetFrames() {
  function SensorCollection (line 51) | SensorCollection& RealSense2InputInterface::GetSensors() {

FILE: framework/shared/src/io/sensor/AccelerometerSensor.cpp
  class ACCSerialiser (line 28) | class ACCSerialiser : public SensorSerialiser {
    method SerialiseSensorSpecific (line 29) | bool SerialiseSensorSpecific(Serialiser* serialiser, const Sensor* s) ...
  class ACCDeserialiser (line 40) | class ACCDeserialiser : public SensorDeserialiser {
    method InstantiateSensor (line 41) | bool InstantiateSensor(const Sensor::sensor_name_t &sensor_name,const ...
    method DeserialiseSensorSpecific (line 51) | bool DeserialiseSensorSpecific(const Deserialiser* d, Sensor* s) overr...

FILE: framework/shared/src/io/sensor/CameraSensor.cpp
  class CameraSensorSerialiser (line 66) | class CameraSensorSerialiser : public SensorSerialiser {
    method SerialiseSensorSpecific (line 67) | bool SerialiseSensorSpecific(Serialiser* serialiser, const Sensor* s) ...
  class CameraSensorDeserialiser (line 83) | class CameraSensorDeserialiser : public SensorDeserialiser {
    method InstantiateSensor (line 85) | bool InstantiateSensor(const Sensor::sensor_name_t &sensor_name, const...
    method DeserialiseSensorSpecific (line 94) | bool DeserialiseSensorSpecific(const Deserialiser* deserialiser, Senso...

FILE: framework/shared/src/io/sensor/CameraSensorFinder.cpp
  function CameraSensor (line 46) | CameraSensor* CameraSensorFinder::FindOne(const SensorCollection& sensor...

FILE: framework/shared/src/io/sensor/DepthSensor.cpp
  class DepthSensorSerialiser (line 38) | class DepthSensorSerialiser : public SensorSerialiser {
    method SerialiseSensorSpecific (line 39) | bool SerialiseSensorSpecific(Serialiser* serialiser, const Sensor* s) ...
  class DepthSensorDeserialiser (line 58) | class DepthSensorDeserialiser : public SensorDeserialiser {
    method InstantiateSensor (line 60) | bool InstantiateSensor(const Sensor::sensor_name_t &sensor_name, const...
    method DeserialiseSensorSpecific (line 69) | bool DeserialiseSensorSpecific(const Deserialiser* deserialiser, Senso...

FILE: framework/shared/src/io/sensor/EventCameraSensor.cpp
  class EventCameraSensorSerialiser (line 37) | class EventCameraSensorSerialiser : public SensorSerialiser {
    method SerialiseSensorSpecific (line 38) | bool SerialiseSensorSpecific(Serialiser* serialiser, const Sensor* s) ...
  class EventCameraSensorDeserialiser (line 48) | class EventCameraSensorDeserialiser : public SensorDeserialiser {
    method InstantiateSensor (line 49) | bool InstantiateSensor(const Sensor::sensor_name_t &sensor_name, const...
    method DeserialiseSensorSpecific (line 59) | bool DeserialiseSensorSpecific(const Deserialiser* deserialiser, Senso...

FILE: framework/shared/src/io/sensor/GroundTruthSensor.cpp
  class GTSerialiser (line 26) | class GTSerialiser : public SensorSerialiser {
    method SerialiseSensorSpecific (line 27) | bool SerialiseSensorSpecific(Serialiser* serialiser, const Sensor* sen...
  class GTDeserialiser (line 35) | class GTDeserialiser : public SensorDeserialiser {
    method InstantiateSensor (line 36) | bool InstantiateSensor(const Sensor::sensor_name_t &sensor_name, const...
    method DeserialiseSensorSpecific (line 46) | bool DeserialiseSensorSpecific(const Deserialiser* d, Sensor* s) overr...

FILE: framework/shared/src/io/sensor/GyroSensor.cpp
  class GyroSerialiser (line 27) | class GyroSerialiser : public SensorSerialiser {
    method SerialiseSensorSpecific (line 28) | bool SerialiseSensorSpecific(Serialiser* serialiser, const Sensor* s) ...
  class GyroDeserialiser (line 39) | class GyroDeserialiser : public SensorDeserialiser {
    method InstantiateSensor (line 40) | bool InstantiateSensor(const Sensor::sensor_name_t &sensor_name,const ...
    method DeserialiseSensorSpecific (line 50) | bool DeserialiseSensorSpecific(const Deserialiser* d, Sensor* s) overr...

FILE: framework/shared/src/io/sensor/IMUSensor.cpp
  class IMUSerialiser (line 27) | class IMUSerialiser : public SensorSerialiser {
    method SerialiseSensorSpecific (line 28) | bool SerialiseSensorSpecific(Serialiser* serialiser, const Sensor* s) ...
  class IMUDeserialiser (line 48) | class IMUDeserialiser : public SensorDeserialiser {
    method InstantiateSensor (line 49) | bool InstantiateSensor(const Sensor::sensor_name_t &sensor_name, const...
    method DeserialiseSensorSpecific (line 59) | bool DeserialiseSensorSpecific(const Deserialiser* d, Sensor* s) overr...

FILE: framework/shared/src/io/sensor/OdomSensor.cpp
  class OdomSerialiser (line 25) | class OdomSerialiser : public SensorSerialiser {
    method SerialiseSensorSpecific (line 26) | bool SerialiseSensorSpecific(Serialiser* serialiser, const Sensor* sen...
  class OdomDeserialiser (line 34) | class OdomDeserialiser : public SensorDeserialiser {
    method InstantiateSensor (line 35) | bool InstantiateSensor(const Sensor::sensor_name_t &sensor_name,const ...
    method DeserialiseSensorSpecific (line 45) | bool DeserialiseSensorSpecific(const Deserialiser* d, Sensor* s) overr...

FILE: framework/shared/src/io/sensor/PointCloudSensor.cpp
  class PCSerialiser (line 25) | class PCSerialiser : public SensorSerialiser {
    method SerialiseSensorSpecific (line 26) | bool SerialiseSensorSpecific(Serialiser* serialiser, const Sensor* sen...
  class PCDeserialiser (line 34) | class PCDeserialiser : public SensorDeserialiser {
    method InstantiateSensor (line 35) | bool InstantiateSensor(const Sensor::sensor_name_t &sensor_name, const...
    method DeserialiseSensorSpecific (line 45) | bool DeserialiseSensorSpecific(const Deserialiser* d, Sensor* s) overr...

FILE: framework/shared/src/io/sensor/SensorCollection.cpp
  function Sensor (line 17) | Sensor &SensorCollection::at(unsigned int sensor_idx) {
  function Sensor (line 33) | Sensor* SensorCollection::GetSensor(const Sensor::sensor_type_t & type) {
  function Sensor (line 43) | const Sensor* SensorCollection::GetSensor(const Sensor::sensor_type_t & ...

FILE: framework/shared/src/io/sensor/SensorDatabase.cpp
  function SensorDatabase (line 18) | SensorDatabase* SensorDatabase::Singleton()
  function SensorDatabaseEntry (line 31) | SensorDatabaseEntry& SensorDatabase::Get(const Sensor::sensor_type_t& se...

FILE: framework/shared/src/io/serialisation/Serialiser.cpp
  function FILE (line 18) | FILE *Serialiser::File() {

FILE: framework/shared/src/library_wrapper.cpp
  function c_sb_new_slam_configuration (line 17) | bool c_sb_new_slam_configuration(void * slam_settings)  {
  function c_sb_init_slam_system (line 21) | bool c_sb_init_slam_system(void * slam_settings)  {
  function c_sb_update_frame (line 25) | bool c_sb_update_frame(void * slam_settings, void * type)  {
  function c_sb_relocalize (line 29) | bool c_sb_relocalize(void * slam_settings)  {
  function c_sb_process_once (line 33) | bool c_sb_process_once (void * slam_settings){
  function c_sb_clean_slam_system (line 37) | bool c_sb_clean_slam_system(){
  function c_sb_update_outputs (line 41) | bool c_sb_update_outputs(void *lib, void *timestamp) {

FILE: framework/shared/src/lodepng.cpp
  function lodepng_free (line 74) | static void lodepng_free(void* ptr) {
  type uivector (line 130) | struct uivector {
  function uivector_cleanup (line 136) | static void uivector_cleanup(void* p) {
  function uivector_resize (line 143) | static unsigned uivector_resize(uivector* p, size_t size) {
  function uivector_resizev (line 159) | static unsigned uivector_resizev(uivector* p, size_t size, unsigned valu...
  function uivector_init (line 168) | static void uivector_init(uivector* p) {
  function uivector_push_back (line 175) | static unsigned uivector_push_back(uivector* p, unsigned c) {
  function uivector_copy (line 183) | static unsigned uivector_copy(uivector* p, const uivector* q) {
  type ucvector (line 197) | struct ucvector {
  function ucvector_resize (line 204) | static unsigned ucvector_resize(ucvector* p, size_t size) {
  function ucvector_cleanup (line 221) | static void ucvector_cleanup(void* p) {
  function ucvector_init (line 227) | static void ucvector_init(ucvector* p) {
  function ucvector_resizev (line 234) | static unsigned ucvector_resizev(ucvector* p, size_t size,
  function ucvector_init_buffer (line 249) | static void ucvector_init_buffer(ucvector* p, unsigned char* buffer,
  function ucvector_push_back (line 258) | static unsigned ucvector_push_back(ucvector* p, unsigned char c) {
  function string_resize (line 271) | static unsigned string_resize(char** out, size_t size) {
  function string_init (line 281) | static void string_init(char** out) {
  function string_cleanup (line 287) | static void string_cleanup(char** out) {
  function string_set (line 292) | static void string_set(char** out, const char* in) {
  function lodepng_read32bitInt (line 305) | unsigned lodepng_read32bitInt(const unsigned char* buffer) {
  function lodepng_set32bitInt (line 312) | static void lodepng_set32bitInt(unsigned char* buffer, unsigned value) {
  function lodepng_add32bitInt (line 321) | static void lodepng_add32bitInt(ucvector* buffer, unsigned value) {
  function lodepng_load_file (line 333) | unsigned lodepng_load_file(unsigned char** out, size_t* outsize,
  function lodepng_save_file (line 364) | unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize,
  function addBitsToStream (line 395) | static void addBitsToStream(size_t* bitpointer, ucvector* bitstream,
  function addBitsToStreamReversed (line 403) | static void addBitsToStreamReversed(size_t* bitpointer, ucvector* bitstr...
  function readBitFromStream (line 416) | static unsigned char readBitFromStream(size_t* bitpointer,
  function readBitsFromStream (line 423) | static unsigned readBitsFromStream(size_t* bitpointer,
  type HuffmanTree (line 475) | struct HuffmanTree {
  function HuffmanTree_init (line 496) | static void HuffmanTree_init(HuffmanTree* tree) {
  function HuffmanTree_cleanup (line 502) | static void HuffmanTree_cleanup(HuffmanTree* tree) {
  function HuffmanTree_make2DTree (line 509) | static unsigned HuffmanTree_make2DTree(HuffmanTree* tree) {
  function HuffmanTree_makeFromLengths2 (line 574) | static unsigned HuffmanTree_makeFromLengths2(HuffmanTree* tree) {
  function HuffmanTree_makeFromLengths (line 621) | static unsigned HuffmanTree_makeFromLengths(HuffmanTree* tree,
  type Coin (line 641) | struct Coin {
  function coin_init (line 646) | static void coin_init(Coin* c) {
  function coin_cleanup (line 651) | static void coin_cleanup(void* c) {
  function coin_copy (line 655) | static void coin_copy(Coin* c1, const Coin* c2) {
  function add_coins (line 660) | static void add_coins(Coin* c1, const Coin* c2) {
  function init_coins (line 667) | static void init_coins(Coin* coins, size_t num) {
  function cleanup_coins (line 673) | static void cleanup_coins(Coin* coins, size_t num) {
  function coin_compare (line 679) | static int coin_compare(const void* a, const void* b) {
  function append_symbol_coins (line 685) | static unsigned append_symbol_coins(Coin* coins, const unsigned* frequen...
  function lodepng_huffman_code_lengths (line 700) | unsigned lodepng_huffman_code_lengths(unsigned* lengths,
  function HuffmanTree_makeFromFrequencies (line 812) | static unsigned HuffmanTree_makeFromFrequencies(HuffmanTree* tree,
  function HuffmanTree_getCode (line 834) | static unsigned HuffmanTree_getCode(const HuffmanTree* tree, unsigned in...
  function HuffmanTree_getLength (line 838) | static unsigned HuffmanTree_getLength(const HuffmanTree* tree, unsigned ...
  function generateFixedLitLenTree (line 844) | static unsigned generateFixedLitLenTree(HuffmanTree* tree) {
  function generateFixedDistanceTree (line 869) | static unsigned generateFixedDistanceTree(HuffmanTree* tree) {
  function huffmanDecodeSymbol (line 891) | static unsigned huffmanDecodeSymbol(const unsigned char* in, size_t* bp,
  function getTreeInflateFixed (line 921) | static void getTreeInflateFixed(HuffmanTree* tree_ll, HuffmanTree* tree_...
  function getTreeInflateDynamic (line 928) | static unsigned getTreeInflateDynamic(HuffmanTree* tree_ll, HuffmanTree*...
  function inflateHuffmanBlock (line 1098) | static unsigned inflateHuffmanBlock(ucvector* out, const unsigned char* in,
  function inflateNoCompression (line 1198) | static unsigned inflateNoCompression(ucvector* out, const unsigned char*...
  function lodepng_inflatev (line 1235) | static unsigned lodepng_inflatev(ucvector* out, const unsigned char* in,
  function lodepng_inflate (line 1272) | unsigned lodepng_inflate(unsigned char** out, size_t* outsize,
  function inflate (line 1284) | static unsigned inflate(unsigned char** out, size_t* outsize,
  function addHuffmanSymbol (line 1305) | static void addHuffmanSymbol(size_t* bp, ucvector* compressed, unsigned ...
  function searchCodeIndex (line 1312) | static size_t searchCodeIndex(const unsigned* array, size_t array_size,
  function addLengthDistance (line 1333) | static void addLengthDistance(uivector* values, size_t length,
  type Hash (line 1357) | struct Hash {
  function hash_init (line 1370) | static unsigned hash_init(Hash* hash, unsigned windowsize) {
  function hash_cleanup (line 1405) | static void hash_cleanup(Hash* hash) {
  function getHash (line 1415) | static unsigned getHash(const unsigned char* data, size_t size, size_t p...
  function countZeros (line 1436) | static unsigned countZeros(const unsigned char* data, size_t size, size_...
  function updateHashChain (line 1449) | static void updateHashChain(Hash* hash, size_t wpos, unsigned hashval,
  function encodeLZ77 (line 1471) | static unsigned encodeLZ77(uivector* out, Hash* hash, const unsigned cha...
  function deflateNoCompression (line 1650) | static unsigned deflateNoCompression(ucvector* out, const unsigned char*...
  function writeLZ77data (line 1692) | static void writeLZ77data(size_t* bp, ucvector* out,
  function deflateDynamic (line 1723) | static unsigned deflateDynamic(ucvector* out, size_t* bp, Hash* hash,
  function deflateFixed (line 1986) | static unsigned deflateFixed(ucvector* out, size_t* bp, Hash* hash,
  function lodepng_deflatev (line 2035) | static unsigned lodepng_deflatev(ucvector* out, const unsigned char* in,
  function lodepng_deflate (line 2083) | unsigned lodepng_deflate(unsigned char** out, size_t* outsize,
  function deflate (line 2095) | static unsigned deflate(unsigned char** out, size_t* outsize,
  function update_adler32 (line 2111) | static unsigned update_adler32(unsigned adler, const unsigned char* data,
  function adler32 (line 2133) | static unsigned adler32(const unsigned char* data, unsigned len) {
  function lodepng_zlib_decompress (line 2143) | unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize,
  function zlib_decompress (line 2187) | static unsigned zlib_decompress(unsigned char** out, size_t* outsize,
  function lodepng_zlib_compress (line 2201) | unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize,
  function zlib_compress (line 2244) | static unsigned zlib_compress(unsigned char** out, size_t* outsize,
  function zlib_decompress (line 2259) | static unsigned zlib_decompress(unsigned char** out, size_t* outsize, co...
  function zlib_compress (line 2267) | static unsigned zlib_compress(unsigned char** out, size_t* outsize, cons...
  function lodepng_compress_settings_init (line 2284) | void lodepng_compress_settings_init(LodePNGCompressSettings* settings) {
  function lodepng_decompress_settings_init (line 2305) | void lodepng_decompress_settings_init(LodePNGDecompressSettings* setting...
  function lodepng_crc32 (line 2385) | unsigned lodepng_crc32(const unsigned char* buf, size_t len) {
  function readBitFromReversedStream (line 2399) | static unsigned char readBitFromReversedStream(size_t* bitpointer,
  function readBitsFromReversedStream (line 2407) | static unsigned readBitsFromReversedStream(size_t* bitpointer,
  function setBitOfReversedStream0 (line 2419) | static void setBitOfReversedStream0(size_t* bitpointer,
  function setBitOfReversedStream (line 2430) | static void setBitOfReversedStream(size_t* bitpointer, unsigned char* bi...
  function lodepng_chunk_length (line 2445) | unsigned lodepng_chunk_length(const unsigned char* chunk) {
  function lodepng_chunk_type (line 2449) | void lodepng_chunk_type(char type[5], const unsigned char* chunk) {
  function lodepng_chunk_type_equals (line 2456) | unsigned char lodepng_chunk_type_equals(const unsigned char* chunk,
  function lodepng_chunk_ancillary (line 2464) | unsigned char lodepng_chunk_ancillary(const unsigned char* chunk) {
  function lodepng_chunk_private (line 2468) | unsigned char lodepng_chunk_private(const unsigned char* chunk) {
  function lodepng_chunk_safetocopy (line 2472) | unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk) {
  function lodepng_chunk_check_crc (line 2484) | unsigned lodepng_chunk_check_crc(const unsigned char* chunk) {
  function lodepng_chunk_generate_crc (line 2495) | void lodepng_chunk_generate_crc(unsigned char* chunk) {
  function lodepng_chunk_append (line 2511) | unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength,
  function lodepng_chunk_create (line 2533) | unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength,
  function checkColorValidity (line 2571) | static unsigned checkColorValidity(LodePNGColorType colortype, unsigned ...
  function getNumColorChannels (line 2600) | static unsigned getNumColorChannels(LodePNGColorType colortype) {
  function lodepng_get_bpp_lct (line 2616) | static unsigned lodepng_get_bpp_lct(LodePNGColorType colortype,
  function lodepng_color_mode_init (line 2624) | void lodepng_color_mode_init(LodePNGColorMode* info) {
  function lodepng_color_mode_cleanup (line 2633) | void lodepng_color_mode_cleanup(LodePNGColorMode* info) {
  function lodepng_color_mode_copy (line 2637) | unsigned lodepng_color_mode_copy(LodePNGColorMode* dest,
  function lodepng_color_mode_equal (line 2652) | static int lodepng_color_mode_equal(const LodePNGColorMode* a,
  function lodepng_palette_clear (line 2678) | void lodepng_palette_clear(LodePNGColorMode* info) {
  function lodepng_palette_add (line 2685) | unsigned lodepng_palette_add(LodePNGColorMode* info, unsigned char r,
  function lodepng_get_bpp (line 2707) | unsigned lodepng_get_bpp(const LodePNGColorMode* info) {
  function lodepng_get_channels (line 2712) | unsigned lodepng_get_channels(const LodePNGColorMode* info) {
  function lodepng_is_greyscale_type (line 2716) | unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info) {
  function lodepng_is_alpha_type (line 2720) | unsigned lodepng_is_alpha_type(const LodePNGColorMode* info) {
  function lodepng_is_palette_type (line 2724) | unsigned lodepng_is_palette_type(const LodePNGColorMode* info) {
  function lodepng_has_palette_alpha (line 2728) | unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info) {
  function lodepng_can_have_alpha (line 2737) | unsigned lodepng_can_have_alpha(const LodePNGColorMode* info) {
  function lodepng_get_raw_size (line 2742) | size_t lodepng_get_raw_size(unsigned w, unsigned h,
  function lodepng_get_raw_size_lct (line 2747) | size_t lodepng_get_raw_size_lct(unsigned w, unsigned h,
  function LodePNGUnknownChunks_init (line 2754) | static void LodePNGUnknownChunks_init(LodePNGInfo* info) {
  function LodePNGUnknownChunks_cleanup (line 2762) | static void LodePNGUnknownChunks_cleanup(LodePNGInfo* info) {
  function LodePNGUnknownChunks_copy (line 2768) | static unsigned LodePNGUnknownChunks_copy(LodePNGInfo* dest,
  function LodePNGText_init (line 2791) | static void LodePNGText_init(LodePNGInfo* info) {
  function LodePNGText_cleanup (line 2797) | static void LodePNGText_cleanup(LodePNGInfo* info) {
  function LodePNGText_copy (line 2807) | static unsigned LodePNGText_copy(LodePNGInfo* dest, const LodePNGInfo* s...
  function lodepng_clear_text (line 2820) | void lodepng_clear_text(LodePNGInfo* info) {
  function lodepng_add_text (line 2824) | unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char...
  function LodePNGIText_init (line 2850) | static void LodePNGIText_init(LodePNGInfo* info) {
  function LodePNGIText_cleanup (line 2858) | static void LodePNGIText_cleanup(LodePNGInfo* info) {
  function LodePNGIText_copy (line 2872) | static unsigned LodePNGIText_copy(LodePNGInfo* dest,
  function lodepng_clear_itext (line 2889) | void lodepng_clear_itext(LodePNGInfo* info) {
  function lodepng_add_itext (line 2893) | unsigned lodepng_add_itext(LodePNGInfo* info, const char* key,
  function lodepng_info_init (line 2933) | void lodepng_info_init(LodePNGInfo* info) {
  function lodepng_info_cleanup (line 2952) | void lodepng_info_cleanup(LodePNGInfo* info) {
  function lodepng_info_copy (line 2962) | unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source) {
  function lodepng_info_swap (line 2978) | void lodepng_info_swap(LodePNGInfo* a, LodePNGInfo* b) {
  function addColorBits (line 2987) | static void addColorBits(unsigned char* out, size_t index, unsigned bits,
  type ColorTree (line 3000) | struct ColorTree
  type ColorTree (line 3008) | struct ColorTree {
  function color_tree_init (line 3013) | static void color_tree_init(ColorTree* tree) {
  function color_tree_cleanup (line 3020) | static void color_tree_cleanup(ColorTree* tree) {
  function color_tree_get (line 3031) | static int color_tree_get(ColorTree* tree, unsigned char r, unsigned cha...
  function color_tree_has (line 3046) | static int color_tree_has(ColorTree* tree, unsigned char r, unsigned cha...
  function color_tree_add (line 3054) | static void color_tree_add(ColorTree* tree, unsigned char r, unsigned ch...
  function rgba8ToPixel (line 3070) | static unsigned rgba8ToPixel(unsigned char* out, size_t i,
  function rgba16ToPixel (line 3131) | static unsigned rgba16ToPixel(unsigned char* out, size_t i,
  function getPixelColorRGBA8 (line 3170) | static unsigned getPixelColorRGBA8(unsigned char* r, unsigned char* g,
  function getPixelColorsRGBA8 (line 3270) | static unsigned getPixelColorsRGBA8(unsigned char* buffer, size_t numpix...
  function getPixelColorRGBA16 (line 3395) | static unsigned getPixelColorRGBA16(unsigned short* r, unsigned short* g,
  function lodepng_convert (line 3438) | unsigned lodepng_convert(unsigned char* out, const unsigned char* in,
  type ColorProfile (line 3499) | struct ColorProfile {
  function color_profile_init (line 3524) | static void color_profile_init(ColorProfile* profile,
  function color_profile_cleanup (line 3551) | static void color_profile_cleanup(ColorProfile* profile) {
  function getValueRequiredBits (line 3577) | unsigned getValueRequiredBits(unsigned short value) {
  function get_color_profile (line 3588) | static unsigned get_color_profile(ColorProfile* profile,
  function setColorKeyFrom16bit (line 3770) | static void setColorKeyFrom16bit(LodePNGColorMode* mode_out, unsigned r,
  function lodepng_auto_choose_color (line 3781) | unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out,
  function paethPredictor (line 3906) | static unsigned char paethPredictor(short a, short b, short c) {
  function Adam7_getpassvalues (line 3941) | static void Adam7_getpassvalues(unsigned passw[7], unsigned passh[7],
  function lodepng_inspect (line 3978) | unsigned lodepng_inspect(unsigned* w, unsigned* h, LodePNGState* state,
  function unfilterScanline (line 4032) | static unsigned unfilterScanline(unsigned char* recon,
  function unfilter (line 4105) | static unsigned unfilter(unsigned char* out, const unsigned char* in,
  function Adam7_deinterlace (line 4148) | static void Adam7_deinterlace(unsigned char* out, const unsigned char* in,
  function removePaddingBits (line 4194) | static void removePaddingBits(unsigned char* out, const unsigned char* in,
  function postProcessScanlines (line 4221) | static unsigned postProcessScanlines(unsigned char* out, unsigned char* in,
  function readChunk_PLTE (line 4272) | static unsigned readChunk_PLTE(LodePNGColorMode* color,
  function readChunk_tRNS (line 4296) | static unsigned readChunk_tRNS(LodePNGColorMode* color,
  function readChunk_bKGD (line 4330) | static unsigned readChunk_bKGD(LodePNGInfo* info, const unsigned char* d...
  function readChunk_tEXt (line 4364) | static unsigned readChunk_tEXt(LodePNGInfo* info, const unsigned char* d...
  function readChunk_zTXt (line 4413) | static unsigned readChunk_zTXt(LodePNGInfo* info,
  function readChunk_iTXt (line 4469) | static unsigned readChunk_iTXt(LodePNGInfo* info,
  function readChunk_tIME (line 4576) | static unsigned readChunk_tIME(LodePNGInfo* info, const unsigned char* d...
  function readChunk_pHYs (line 4592) | static unsigned readChunk_pHYs(LodePNGInfo* info, const unsigned char* d...
  function decodeGeneric (line 4609) | static void decodeGeneric(unsigned char** out, unsigned* w, unsigned* h,
  function lodepng_decode (line 4789) | unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h,
  function lodepng_decode_memory (line 4832) | unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigne...
  function lodepng_decode32 (line 4845) | unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h,
  function lodepng_decode24 (line 4850) | unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h,
  function lodepng_decode_file (line 4856) | unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h,
  function lodepng_decode32_file (line 4869) | unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigne...
  function lodepng_decode24_file (line 4874) | unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigne...
  function lodepng_decoder_settings_init (line 4880) | void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings) {
  function lodepng_state_init (line 4895) | void lodepng_state_init(LodePNGState* state) {
  function lodepng_state_cleanup (line 4907) | void lodepng_state_cleanup(LodePNGState* state) {
  function lodepng_state_copy (line 4912) | void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source) {
  function addChunk (line 4934) | static unsigned addChunk(ucvector* out, const char* chunkName,
  function writeSignature (line 4943) | static void writeSignature(ucvector* out) {
  function addChunk_IHDR (line 4955) | static unsigned addChunk_IHDR(ucvector* out, unsigned w, unsigned h,
  function addChunk_PLTE (line 4976) | static unsigned addChunk_PLTE(ucvector* out, const LodePNGColorMode* inf...
  function addChunk_tRNS (line 4992) | static unsigned addChunk_tRNS(ucvector* out, const LodePNGColorMode* inf...
  function addChunk_IDAT (line 5031) | static unsigned addChunk_IDAT(ucvector* out, const unsigned char* data,
  function addChunk_IEND (line 5047) | static unsigned addChunk_IEND(ucvector* out) {
  function addChunk_tEXt (line 5055) | static unsigned addChunk_tEXt(ucvector* out, const char* keyword,
  function addChunk_zTXt (line 5074) | static unsigned addChunk_zTXt(ucvector* out, const char* keyword,
  function addChunk_iTXt (line 5102) | static unsigned addChunk_iTXt(ucvector* out, unsigned compressed,
  function addChunk_bKGD (line 5147) | static unsigned addChunk_bKGD(ucvector* out, const LodePNGInfo* info) {
  function addChunk_tIME (line 5173) | static unsigned addChunk_tIME(ucvector* out, const LodePNGTime* time) {
  function addChunk_pHYs (line 5190) | static unsigned addChunk_pHYs(ucvector* out, const LodePNGInfo* info) {
  function filterScanline (line 5207) | static void filterScanline(unsigned char* out, const unsigned char* scan...
  function flog2 (line 5276) | static float flog2(float f) {
  function filter (line 5290) | static unsigned filter(unsigned char* out, const unsigned char* in, unsi...
  function addPaddingBits (line 5503) | static void addPaddingBits(unsigned char* out, const unsigned char* in,
  function Adam7_interlace (line 5534) | static void Adam7_interlace(unsigned char* out, const unsigned char* in,
  function preProcessScanlines (line 5581) | static unsigned preProcessScanlines(unsigned char** out, size_t* outsize,
  function getPaletteTranslucency (line 5674) | static unsigned getPaletteTranslucency(const unsigned char* palette,
  function addUnknownChunks (line 5697) | static unsigned addUnknownChunks(ucvector* out, unsigned char* data,
  function lodepng_encode (line 5709) | unsigned lodepng_encode(unsigned char** out, size_t* outsize,
  function lodepng_encode_memory (line 5905) | unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize,
  function lodepng_encode32 (line 5921) | unsigned lodepng_encode32(unsigned char** out, size_t* outsize,
  function lodepng_encode24 (line 5926) | unsigned lodepng_encode24(unsigned char** out, size_t* outsize,
  function lodepng_encode_file (line 5932) | unsigned lodepng_encode_file(const char* filename, const unsigned char* ...
  function lodepng_encode32_file (line 5944) | unsigned lodepng_encode32_file(const char* filename, const unsigned char...
  function lodepng_encode24_file (line 5949) | unsigned lodepng_encode24_file(const char* filename, const unsigned char...
  function lodepng_encoder_settings_init (line 5955) | void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings) {
  type lodepng (line 6165) | namespace lodepng {
    function load_file (line 6168) | void load_file(std::vector<unsigned char>& buffer,
    function save_file (line 6187) | void save_file(const std::vector<unsigned char>& buffer,
    function decompress (line 6197) | unsigned decompress(std::vector<unsigned char>& out, const unsigned ch...
    function decompress (line 6210) | unsigned decompress(std::vector<unsigned char>& out,
    function compress (line 6218) | unsigned compress(std::vector<unsigned char>& out, const unsigned char...
    function compress (line 6230) | unsigned compress(std::vector<unsigned char>& out,
    function State (line 6253) | State& State::operator=(const State& other) {
    function decode (line 6260) | unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned...
    function decode (line 6277) | unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned...
    function decode (line 6284) | unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned...
    function decode (line 6296) | unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned...
    function decode (line 6302) | unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned...
    function encode (line 6313) | unsigned encode(std::vector<unsigned char>& out, const unsigned char* in,
    function encode (line 6326) | unsigned encode(std::vector<unsigned char>& out,
    function encode (line 6334) | unsigned encode(std::vector<unsigned char>& out, const unsigned char* in,
    function encode (line 6346) | unsigned encode(std::vector<unsigned char>& out,
    function encode (line 6355) | unsigned encode(const std::string& filename, const unsigned char* in,
    function encode (line 6364) | unsigned encode(const std::string& filename,

FILE: framework/shared/src/metrics/ATEMetric.cpp
  function Value (line 51) | Value *ATEMetric::GetValue(Phase* phase)

FILE: framework/shared/src/metrics/DepthEstimationMetric.cpp
  function Value (line 50) | Value *DepthEstimationMetric::GetValue(Phase* /**/)

FILE: framework/shared/src/metrics/DurationMetric.cpp
  function Value (line 44) | Value *DurationMetric::GetValue(Phase *phase)

FILE: framework/shared/src/metrics/MemoryMetric.cpp
  function Value (line 70) | Value *MemoryMetric::GetValue(Phase* phase)

FILE: framework/shared/src/metrics/MetricManager.cpp
  function FrameData (line 113) | FrameData* MetricManager::GetFrame(uint64_t frame_number)
  function FrameData (line 122) | FrameData* MetricManager::GetLastFrame()
  function Phase (line 150) | Phase* MetricManager::GetPhase(const std::string& phasename)

FILE: framework/shared/src/metrics/PointCloudMetric.cpp
  function Value (line 28) | Value *PointCloudMetric::GetValue(Phase* /* unused */) {

FILE: framework/shared/src/metrics/PowerMetric.cpp
  type slambench (line 24) | namespace slambench {
    type metrics (line 25) | namespace metrics {

FILE: framework/shared/src/metrics/RPEMetric.cpp
  function Value (line 49) | Value *RPEMetric::GetValue(Phase* phase)

FILE: framework/shared/src/outputs/OutputManager.cpp
  function BaseOutput (line 30) | BaseOutput* OutputManager::GetOutput(const std::string& outputname)
  function BaseOutput (line 35) | BaseOutput* OutputManager::GetMainOutput(slambench::values::ValueType type)

FILE: framework/shared/src/outputs/TrajectoryAlignmentMethod.cpp
  function select_closest_before (line 22) | static boost::optional<slambench::TimeStamp> select_closest_before(const...
  function align_trajectories_original (line 62) | Eigen::Matrix4f align_trajectories_original (const TrajectoryAlignmentMe...
  function associate (line 85) | bool associate(const TrajectoryAlignmentMethod::trajectory_t & gt,
  function align_trajectories_umeyama_eigen (line 129) | Eigen::Matrix4f align_trajectories_umeyama_eigen(const TrajectoryAlignme...
  function ATERotation (line 158) | Eigen::MatrixXd ATERotation(Eigen::MatrixXd model, Eigen::MatrixXd data)
  function ATEScale (line 189) | double ATEScale(Eigen::MatrixXd model, Eigen::MatrixXd data, Eigen::Matr...
  function ATETranslation (line 217) | Eigen::Vector3d ATETranslation(Eigen::MatrixXd model, Eigen::MatrixXd da...
  function calculateATE (line 237) | Eigen::Matrix4d calculateATE(std::vector<Eigen::Matrix4f> gt, std::vecto...
  function align_trajectories_new (line 289) | Eigen::Matrix4f align_trajectories_new (const TrajectoryAlignmentMethod:...

FILE: framework/shared/src/outputs/TrajectoryInterface.cpp
  function PoseValue (line 24) | PoseValue PoseOutputTrajectoryInterface::Get(const TimeStamp& when) const

FILE: framework/shared/src/sb_malloc.cpp
  type slambench (line 33) | namespace slambench {
    type memory (line 34) | namespace memory {
      class MemoryProfiler (line 50) | class MemoryProfiler {
        method MemoryProfiler (line 52) | static MemoryProfiler &GetSingleton() { return *singleton_ptr_; }
        method SingletonAvailable (line 53) | static bool SingletonAvailable() { return singleton_ptr_ != nullpt...
        method MemoryProfiler (line 55) | MemoryProfiler() : _enabled(true) {}
        method MemoryData (line 58) | MemoryData &GetData() { return MemoryProfile::singleton.DataForCur...
        method MemoryData (line 59) | MemoryData &GetGPUData() { return MemoryProfile::singleton.GPUData...
        method MemoryData (line 60) | MemoryData &GetOverallData() { return MemoryProfile::singleton.Ove...
        method MemoryData (line 61) | MemoryData &GetOverallGPUData() { return MemoryProfile::singleton....
        method IsEnabled (line 63) | bool IsEnabled() const { return _enabled; }
        method Enable (line 64) | void Enable() { _enabled = true; }
        method AddAllocation (line 66) | void AddAllocation(void *ptr, size_t size) {
        method FreeAllocation (line 81) | void FreeAllocation(void *ptr) {
        method AddAllocationGPU (line 98) | void AddAllocationGPU(void *ptr, size_t size) {
        method FreeAllocationGPU (line 112) | void FreeAllocationGPU(void *ptr) {
  function cudaError_t (line 309) | static cudaError_t load_and_call_libcuda_cudaFree(	 void* devPtr) {
  function __throw (line 322) | __throw()
  function cudaError_t (line 346) | static cudaError_t load_and_call_libcuda_cudaFreeHost(	 void* devPtr) {
  function __throw (line 355) | __throw()
  type _cl_context (line 380) | struct _cl_context
  type _cl_mem (line 382) | struct _cl_mem
  function cl_mem (line 393) | static cl_mem load_and_call_libopencl_clCreateBuffer(	cl_context a,  	cl...
  function cl_int (line 398) | static cl_int load_and_call_libopencl_clReleaseMemObject(cl_mem a) {
  function __throw (line 404) | __throw()
  function __throw (line 417) | __throw()
  function load_and_call_libc_free (line 456) | static void load_and_call_libc_free(void *t) {
  function __throw (line 475) | __throw()
  function __throw (line 487) | __throw()
  function __throw (line 505) | __throw() {
  function __throw (line 524) | __throw() {
  function __throw (line 565) | __throw() {
  function __throw (line 586) | __throw() {

FILE: framework/shared/src/values/Value.cpp
  function ValueType (line 26) | ValueType ValueDescription::GetType() const

FILE: framework/tools/accuracy-tools/pointcloud_aligner.cpp
  function getScore (line 24) | float getScore( pcl::PointCloud<point_t>::Ptr  gt,pcl::PointCloud<point_...
  function computeAlignment (line 53) | void computeAlignment(std::vector<slambench::outputs::OutputManager*> ou...
  function main (line 147) | int main(int argc, char * argv[])

FILE: framework/tools/dataset-tools/BONN.cpp
  function loadBONNDepthData (line 38) | bool loadBONNDepthData(const std::string &dirname, SLAMFile &file) {
  function loadBONNRGBData (line 104) | bool loadBONNRGBData(const std::string &dirname,
  function loadBONNGreyData (line 165) | bool loadBONNGreyData(const std::string &dirname, SLAMFile &file) {
  function loadBONNGroundTruthData (line 225) | bool loadBONNGroundTruthData(const std::string &dirname, SLAMFile &file) {
  function loadBONNPointCloudData (line 295) | bool loadBONNPointCloudData(slambench::io::SLAMFile &slamfile, const std...
  function SLAMFile (line 324) | SLAMFile *BONNReader::GenerateSLAMFile() {

FILE: framework/tools/dataset-tools/ETHI.cpp
  function SLAMFile (line 17) | SLAMFile *ETHIReader::GenerateSLAMFile() {return nullptr;}

FILE: framework/tools/dataset-tools/EUROCMAV.cpp
  function loadIMUData (line 36) | bool loadIMUData(const std::string &dirname,
  function loadGTData (line 107) | bool loadGTData(const std::string &dirname,
  function SLAMFile (line 201) | SLAMFile *EUROCMAVReader::GenerateSLAMFile() {

FILE: framework/tools/dataset-tools/ICL.cpp
  function DepthSensor (line 31) | static DepthSensor *GetDepthSensor(const Sensor::pose_t &pose, const Dep...
  function CameraSensor (line 49) | static CameraSensor *GetRGBSensor(const Sensor::pose_t &pose, const Came...
  function CameraSensor (line 65) | static CameraSensor *GetGreySensor(const Sensor::pose_t &pose, const Cam...
  function undistort_frame (line 82) | void undistort_frame(slambench::io::SLAMFileFrame *frame, void *data) {
  function analyseIclFolder (line 112) | bool analyseIclFolder(const std::string &dirname) {
  function loadICLDepthData (line 153) | bool loadICLDepthData(const std::string &dirname , SLAMFile &file, const...
  function loadICLRGBData (line 248) | bool loadICLRGBData(const std::string &dirname , SLAMFile &file, const S...
  function loadICLGreyData (line 328) | bool loadICLGreyData(const std::string &dirname , SLAMFile &file, const ...
  function loadICLGroundTruthData (line 411) | bool loadICLGroundTruthData(const std::string &dirname , SLAMFile &file) {
  function loadICLAccelerometerData (line 538) | bool loadICLAccelerometerData(const std::string &dirname , SLAMFile &fil...
  function frame_callback (line 596) | void frame_callback(int idx, int total) {
  function Serialise (line 615) | bool Serialise(const std::string &filename, SLAMFile &file) {
  function SLAMFile (line 622) | SLAMFile* ICLReader::GenerateSLAMFile () {

FILE: framework/tools/dataset-tools/ICLNUIM.cpp
  type float3 (line 34) | struct float3 {
  function undistort_frame (line 96) | static void undistort_frame(slambench::io::SLAMFileFrame *frame, void *d...
  function float3 (line 118) | static float3 normalise(const float3 &input) {
  function FillPose (line 130) | bool FillPose(std::ifstream &istream, GroundTruthSensor::pose_t &pose, b...
  function GetPoseETHI (line 213) | bool GetPoseETHI(std::ifstream &istream, GroundTruthSensor::pose_t &pose) {
  function AddPointCloudSensor (line 384) | void AddPointCloudSensor(SLAMFile &slamfile) {
  function AddPlyFile (line 391) | void AddPlyFile(SLAMFile &slamfile, const std::string& plyname) {
  function SLAMFile (line 413) | SLAMFile *ICLNUIMReader::GenerateSLAMFile() {

FILE: framework/tools/dataset-tools/OpenLORIS.cpp
  function Dijkstra (line 35) | void Dijkstra(int n, int s, std::vector<std::vector<int> > G, std::vecto...
  function DFSPrint (line 62) | void DFSPrint(int s, int v, std::vector<int> pre, std::vector<int> &resu...
  function loadOpenLORISDepthData (line 151) | bool loadOpenLORISDepthData(const std::string &dirname,
  function loadOpenLORISImageData (line 241) | bool loadOpenLORISImageData(const std::string &dirname,         // direc...
  function loadOpenLORISGroundTruthData (line 326) | bool loadOpenLORISGroundTruthData(const std::string &dirname, SLAMFile &...
  function loadOpenLORISAccelerometerData (line 390) | bool loadOpenLORISAccelerometerData(const std::string &dirname,
  function loadOpenLORISGyroData (line 454) | bool loadOpenLORISGyroData(const std::string &dirname,
  function loadOpenLORISOdomData (line 517) | bool loadOpenLORISOdomData(const std::string &dirname, const std::string...
  function SLAMFile (line 578) | SLAMFile *OpenLORISReader::GenerateSLAMFile() {

FILE: framework/tools/dataset-tools/SVO.cpp
  function loadSVOGreyData (line 36) | bool loadSVOGreyData(const std::string &dirname,
  function loadSVOGroundTruthData (line 59) | bool loadSVOGroundTruthData(const std::string &dirname, SLAMFile &file, ...
  function SLAMFile (line 106) | SLAMFile *SVOReader::GenerateSLAMFile() {

FILE: framework/tools/dataset-tools/TUM-ROSBAG.cpp
  function loadTUMROSBAG_DepthData (line 42) | bool loadTUMROSBAG_DepthData(const std::string & dirname,
  function loadTUMROSBAG_RGBGreyData (line 154) | bool loadTUMROSBAG_RGBGreyData(
  function loadTUMROSBAG_GroundTruthData (line 313) | bool loadTUMROSBAG_GroundTruthData(const std::string & bagname,
  function loadTUMROSBAG_AccelerometerData (line 461) | bool loadTUMROSBAG_AccelerometerData(const std::string & bagname,
  function SLAMFile (line 532) | SLAMFile* TUMROSBAGReader::GenerateSLAMFile () {

FILE: framework/tools/dataset-tools/TUM.cpp
  function loadTUMDepthData (line 32) | bool loadTUMDepthData(const std::string &dirname,
  function loadTUMRGBData (line 113) | bool loadTUMRGBData(const std::string &dirname,
  function loadTUMGreyData (line 189) | bool loadTUMGreyData(const std::string &dirname,
  function loadTUMGroundTruthData (line 264) | bool loadTUMGroundTruthData(const std::string &dirname , SLAMFile &file) {
  function loadTUMAccelerometerData (line 338) | bool loadTUMAccelerometerData(const std::string &dirname, SLAMFile &file) {
  function SLAMFile (line 399) | SLAMFile* TUMReader::GenerateSLAMFile () {

FILE: framework/tools/dataset-tools/UZHFPV.cpp
  function loadUZHFPVGreyData (line 38) | bool loadUZHFPVGreyData(const std::string& dirname,
  function loadUZHFPVGroundTruthData (line 135) | bool loadUZHFPVGroundTruthData(const std::string &dirname,
  function loadUZHFPVIMUData (line 210) | bool loadUZHFPVIMUData(const std::string &dirname,
  function loadUZHFPVEventData (line 292) | bool loadUZHFPVEventData(const std::string &dirname,
  function SLAMFile (line 378) | SLAMFile *UZHFPVReader::GenerateSLAMFile() {

FILE: framework/tools/dataset-tools/VolumeDeform.cpp
  function GetFileName (line 24) | std::string GetFileName(const std::string& dirname, size_t frame_idx, bo...
  function SLAMFile (line 124) | SLAMFile *VolumeDeformReader::GenerateSLAMFile() {

FILE: framework/tools/dataset-tools/dataset-generator.cpp
  class MainComponent (line 39) | class MainComponent : public ParameterComponent {
    method help_callback (line 51) | static void help_callback(Parameter *, ParameterComponent *caller) {
    method dataset_callback (line 73) | static void dataset_callback(Parameter *p, ParameterComponent *caller) {
    method frame_callback (line 122) | static void frame_callback(int idx, int total) {
    method MainComponent (line 143) | MainComponent(int argc, char *argv[]) : ParameterComponent(""), binary...
    method Run (line 157) | bool Run() {
  function main (line 171) | int main(int argc, char *argv[]) {

FILE: framework/tools/dataset-tools/include/BONN.h
  function namespace (line 24) | namespace slambench {

FILE: framework/tools/dataset-tools/include/DatasetReader.h
  function namespace (line 15) | namespace slambench {

FILE: framework/tools/dataset-tools/include/ETHI.h
  function namespace (line 22) | namespace slambench {

FILE: framework/tools/dataset-tools/include/EUROCMAV.h
  function namespace (line 24) | namespace slambench {

FILE: framework/tools/dataset-tools/include/ICL.h
  function namespace (line 26) | namespace slambench {

FILE: framework/tools/dataset-tools/include/ICLNUIM.h
  function namespace (line 23) | namespace slambench {

FILE: framework/tools/dataset-tools/include/OpenLORIS.h
  function namespace (line 28) | namespace slambench {

FILE: framework/tools/dataset-tools/include/SVO.h
  function namespace (line 27) | namespace slambench {

FILE: framework/tools/dataset-tools/include/TUM.h
  function namespace (line 31) | namespace slambench {

FILE: framework/tools/dataset-tools/include/UZHFPV.h
  function namespace (line 24) | namespace slambench {

FILE: framework/tools/dataset-tools/include/VolumeDeform.h
  function namespace (line 23) | namespace slambench {

FILE: framework/tools/dataset-tools/include/utils/RegexPattern.h
  function class (line 13) | class RegexPattern {

FILE: framework/tools/dataset-tools/include/utils/dataset_utils.h
  function namespace (line 14) | namespace slambench {

FILE: framework/tools/dataset-tools/include/utils/tinyply.h
  function namespace (line 34) | namespace tinyply
  function create_property_on_element (line 718) | auto create_property_on_element = [&](PlyElement & e)
  function read (line 868) | void PlyFile::read(std::istream & is) { return impl->read(is); }
  function write (line 869) | void PlyFile::write(std::ostream & os, bool isBinary) { return impl->wri...
  function list_size_hint (line 875) | uint32_t list_size_hint)
  function add_properties_to_element (line 879) | void PlyFile::add_properties_to_element(const std::string & elementKey,

FILE: framework/tools/dataset-tools/io-inspect.cpp
  function printFrame (line 24) | void printFrame (SLAMFrame *frame , unsigned int index ) {
  function Deserialise (line 36) | void Deserialise(const std::string &filename, SLAMFile &file) {
  function Check (line 47) | void Check(SLAMFile &file) {
  function main (line 81) | int main(int , char **argv) {

FILE: framework/tools/dataset-tools/io-monoslam.cpp
  function CameraSensor (line 25) | CameraSensor *GetGreySensor(const Sensor::pose_t &pose, const CameraSens...
  function AddSensors (line 40) | void AddSensors(SLAMFile &file, bool Depth, bool RGB, bool Grey, bool GT) {
  function GetFrame (line 73) | bool GetFrame(const std::string &dirname, SLAMFile &file, int frame_no) {
  function AddFrames (line 97) | bool AddFrames(const std::string &dirname, SLAMFile &file) {
  function frame_callback (line 110) | void frame_callback(int idx, int total) {
  function Serialise (line 129) | bool Serialise(const std::string &filename, SLAMFile &file) {
  function main (line 135) | int main(int argc, char **argv) {

FILE: framework/tools/dataset-tools/io-readply.cpp
  function main (line 14) | int main(int argc, char **argv) {

FILE: framework/tools/dataset-tools/lodepng.cpp
  function lodepng_free (line 74) | static void lodepng_free(void* ptr) {
  type uivector (line 130) | struct uivector {
  function uivector_cleanup (line 136) | static void uivector_cleanup(void* p) {
  function uivector_resize (line 143) | static unsigned uivector_resize(uivector* p, size_t size) {
  function uivector_resizev (line 159) | static unsigned uivector_resizev(uivector* p, size_t size, unsigned valu...
  function uivector_init (line 168) | static void uivector_init(uivector* p) {
  function uivector_push_back (line 175) | static unsigned uivector_push_back(uivector* p, unsigned c) {
  function uivector_copy (line 183) | static unsigned uivector_copy(uivector* p, const uivector* q) {
  type ucvector (line 197) | struct ucvector {
  function ucvector_resize (line 204) | static unsigned ucvector_resize(ucvector* p, size_t size) {
  function ucvector_cleanup (line 221) | static void ucvector_cleanup(void* p) {
  function ucvector_init (line 227) | static void ucvector_init(ucvector* p) {
  function ucvector_resizev (line 234) | static unsigned ucvector_resizev(ucvector* p, size_t size,
  function ucvector_init_buffer (line 249) | static void ucvector_init_buffer(ucvector* p, unsigned char* buffer,
  function ucvector_push_back (line 258) | static unsigned ucvector_push_back(ucvector* p, unsigned char c) {
  function string_resize (line 271) | static unsigned string_resize(char** out, size_t size) {
  function string_init (line 281) | static void string_init(char** out) {
  function string_cleanup (line 287) | static void string_cleanup(char** out) {
  function string_set (line 292) | static void string_set(char** out, const char* in) {
  function lodepng_read32bitInt (line 305) | unsigned lodepng_read32bitInt(const unsigned char* buffer) {
  function lodepng_set32bitInt (line 312) | static void lodepng_set32bitInt(unsigned char* buffer, unsigned value) {
  function lodepng_add32bitInt (line 321) | static void lodepng_add32bitInt(ucvector* buffer, unsigned value) {
  function lodepng_load_file (line 333) | unsigned lodepng_load_file(unsigned char** out, size_t* outsize,
  function lodepng_save_file (line 364) | unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize,
  function addBitsToStream (line 395) | static void addBitsToStream(size_t* bitpointer, ucvector* bitstream,
  function addBitsToStreamReversed (line 403) | static void addBitsToStreamReversed(size_t* bitpointer, ucvector* bitstr...
  function readBitFromStream (line 416) | static unsigned char readBitFromStream(size_t* bitpointer,
  function readBitsFromStream (line 423) | static unsigned readBitsFromStream(size_t* bitpointer,
  type HuffmanTree (line 475) | struct HuffmanTree {
  function HuffmanTree_init (line 496) | static void HuffmanTree_init(HuffmanTree* tree) {
  function HuffmanTree_cleanup (line 502) | static void HuffmanTree_cleanup(HuffmanTree* tree) {
  function HuffmanTree_make2DTree (line 509) | static unsigned HuffmanTree_make2DTree(HuffmanTree* tree) {
  function HuffmanTree_makeFromLengths2 (line 574) | static unsigned HuffmanTree_makeFromLengths2(HuffmanTree* tree) {
  function HuffmanTree_makeFromLengths (line 621) | static unsigned HuffmanTree_makeFromLengths(HuffmanTree* tree,
  type Coin (line 641) | struct Coin {
  function coin_init (line 646) | static void coin_init(Coin* c) {
  function coin_cleanup (line 651) | static void coin_cleanup(void* c) {
  function coin_copy (line 655) | static void coin_copy(Coin* c1, const Coin* c2) {
  function add_coins (line 660) | static void add_coins(Coin* c1, const Coin* c2) {
  function init_coins (line 667) | static void init_coins(Coin* coins, size_t num) {
  function cleanup_coins (line 673) | static void cleanup_coins(Coin* coins, size_t num) {
  function coin_compare (line 679) | static int coin_compare(const void* a, const void* b) {
  function append_symbol_coins (line 685) | static unsigned append_symbol_coins(Coin* coins, const unsigned* frequen...
  function lodepng_huffman_code_lengths (line 700) | unsigned lodepng_huffman_code_lengths(unsigned* lengths,
  function HuffmanTree_makeFromFrequencies (line 812) | static unsigned HuffmanTree_makeFromFrequencies(HuffmanTree* tree,
  function HuffmanTree_getCode (line 834) | static unsigned HuffmanTree_getCode(const HuffmanTree* tree, unsigned in...
  function HuffmanTree_getLength (line 838) | static unsigned HuffmanTree_getLength(const HuffmanTree* tree, unsigned ...
  function generateFixedLitLenTree (line 844) | static unsigned generateFixedLitLenTree(HuffmanTree* tree) {
  function generateFixedDistanceTree (line 869) | static unsigned generateFixedDistanceTree(HuffmanTree* tree) {
  function huffmanDecodeSymbol (line 891) | static unsigned huffmanDecodeSymbol(const unsigned char* in, size_t* bp,
  function getTreeInflateFixed (line 921) | static void getTreeInflateFixed(HuffmanTree* tree_ll, HuffmanTree* tree_...
  function getTreeInflateDynamic (line 928) | static unsigned getTreeInflateDynamic(HuffmanTree* tree_ll, HuffmanTree*...
  function inflateHuffmanBlock (line 1098) | static unsigned inflateHuffmanBlock(ucvector* out, const unsigned char* in,
  function inflateNoCompression (line 1198) | static unsigned inflateNoCompression(ucvector* out, const unsigned char*...
  function lodepng_inflatev (line 1235) | static unsigned lodepng_inflatev(ucvector* out, const unsigned char* in,
  function lodepng_inflate (line 1272) | unsigned lodepng_inflate(unsigned char** out, size_t* outsize,
  function inflate (line 1284) | static unsigned inflate(unsigned char** out, size_t* outsize,
  function addHuffmanSymbol (line 1305) | static void addHuffmanSymbol(size_t* bp, ucvector* compressed, unsigned ...
  function searchCodeIndex (line 1312) | static size_t searchCodeIndex(const unsigned* array, size_t array_size,
  function addLengthDistance (line 1333) | static void addLengthDistance(uivector* values, size_t length,
  type Hash (line 1357) | struct Hash {
  function hash_init (line 1370) | static unsigned hash_init(Hash* hash, unsigned windowsize) {
  function hash_cleanup (line 1405) | static void hash_cleanup(Hash* hash) {
  function getHash (line 1415) | static unsigned getHash(const unsigned char* data, size_t size, size_t p...
  function countZeros (line 1436) | static unsigned countZeros(const unsigned char* data, size_t size, size_...
  function updateHashChain (line 1449) | static void updateHashChain(Hash* hash, size_t wpos, unsigned hashval,
  function encodeLZ77 (line 1471) | static unsigned encodeLZ77(uivector* out, Hash* hash, const unsigned cha...
  function deflateNoCompression (line 1650) | static unsigned deflateNoCompression(ucvector* out, const unsigned char*...
  function writeLZ77data (line 1692) | static void writeLZ77data(size_t* bp, ucvector* out,
  function deflateDynamic (line 1723) | static unsigned deflateDynamic(ucvector* out, size_t* bp, Hash* hash,
  function deflateFixed (line 1986) | static unsigned deflateFixed(ucvector* out, size_t* bp, Hash* hash,
  function lodepng_deflatev (line 2035) | static unsigned lodepng_deflatev(ucvector* out, const unsigned char* in,
  function lodepng_deflate (line 2083) | unsigned lodepng_deflate(unsigned char** out, size_t* outsize,
  function deflate (line 2095) | static unsigned deflate(unsigned char** out, size_t* outsize,
  function update_adler32 (line 2111) | static unsigned update_adler32(unsigned adler, const unsigned char* data,
  function adler32 (line 2133) | static unsigned adler32(const unsigned char* data, unsigned len) {
  function lodepng_zlib_decompress (line 2143) | unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize,
  function zlib_decompress (line 2187) | static unsigned zlib_decompress(unsigned char** out, size_t* outsize,
  function lodepng_zlib_compress (line 2201) | unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize,
  function zlib_compress (line 2244) | static unsigned zlib_compress(unsigned char** out, size_t* outsize,
  function zlib_decompress (line 2259) | static unsigned zlib_decompress(unsigned char** out, size_t* outsize, co...
  function zlib_compress (line 2267) | static unsigned zlib_compress(unsigned char** out, size_t* outsize, cons...
  function lodepng_compress_settings_init (line 2284) | void lodepng_compress_settings_init(LodePNGCompressSettings* settings) {
  function lodepng_decompress_settings_init (line 2305) | void lodepng_decompress_settings_init(LodePNGDecompressSettings* setting...
  function lodepng_crc32 (line 2385) | unsigned lodepng_crc32(const unsigned char* buf, size_t len) {
  function readBitFromReversedStream (line 2399) | static unsigned char readBitFromReversedStream(size_t* bitpointer,
  function readBitsFromReversedStream (line 2407) | static unsigned readBitsFromReversedStream(size_t* bitpointer,
  function setBitOfReversedStream0 (line 2419) | static void setBitOfReversedStream0(size_t* bitpointer,
  function setBitOfReversedStream (line 2430) | static void setBitOfReversedStream(size_t* bitpointer, unsigned char* bi...
  function lodepng_chunk_length (line 2445) | unsigned lodepng_chunk_length(const unsigned char* chunk) {
  function lodepng_chunk_type (line 2449) | void lodepng_chunk_type(char type[5], const unsigned char* chunk) {
  function lodepng_chunk_type_equals (line 2456) | unsigned char lodepng_chunk_type_equals(const unsigned char* chunk,
  function lodepng_chunk_ancillary (line 2464) | unsigned char lodepng_chunk_ancillary(const unsigned char* chunk) {
  function lodepng_chunk_private (line 2468) | unsigned char lodepng_chunk_private(const unsigned char* chunk) {
  function lodepng_chunk_safetocopy (line 2472) | unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk) {
  function lodepng_chunk_check_crc (line 2484) | unsigned lodepng_chunk_check_crc(const unsigned char* chunk) {
  function lodepng_chunk_generate_crc (line 2495) | void lodepng_chunk_generate_crc(unsigned char* chunk) {
  function lodepng_chunk_append (line 2511) | unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength,
  function lodepng_chunk_create (line 2533) | unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength,
  function checkColorValidity (line 2571) | static unsigned checkColorValidity(LodePNGColorType colortype, unsigned ...
  function getNumColorChannels (line 2600) | static unsigned getNumColorChannels(LodePNGColorType colortype) {
  function lodepng_get_bpp_lct (line 2616) | static unsigned lodepng_get_bpp_lct(LodePNGColorType colortype,
  function lodepng_color_mode_init (line 2624) | void lodepng_color_mode_init(LodePNGColorMode* info) {
  function lodepng_color_mode_cleanup (line 2633) | void lodepng_color_mode_cleanup(LodePNGColorMode* info) {
  function lodepng_color_mode_copy (line 2637) | unsigned lodepng_color_mode_copy(LodePNGColorMode* dest,
  function lodepng_color_mode_equal (line 2652) | static int lodepng_color_mode_equal(const LodePNGColorMode* a,
  function lodepng_palette_clear (line 2678) | void lodepng_palette_clear(LodePNGColorMode* info) {
  function lodepng_palette_add (line 2685) | unsigned lodepng_palette_add(LodePNGColorMode* info, unsigned char r,
  function lodepng_get_bpp (line 2707) | unsigned lodepng_get_bpp(const LodePNGColorMode* info) {
  function lodepng_get_channels (line 2712) | unsigned lodepng_get_channels(const LodePNGColorMode* info) {
  function lodepng_is_greyscale_type (line 2716) | unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info) {
  function lodepng_is_alpha_type (line 2720) | unsigned lodepng_is_alpha_type(const LodePNGColorMode* info) {
  function lodepng_is_palette_type (line 2724) | unsigned lodepng_is_palette_type(const LodePNGColorMode* info) {
  function lodepng_has_palette_alpha (line 2728) | unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info) {
  function lodepng_can_have_alpha (line 2737) | unsigned lodepng_can_have_alpha(const LodePNGColorMode* info) {
  function lodepng_get_raw_size (line 2742) | size_t lodepng_get_raw_size(unsigned w, unsigned h,
  function lodepng_get_raw_size_lct (line 2747) | size_t lodepng_get_raw_size_lct(unsigned w, unsigned h,
  function LodePNGUnknownChunks_init (line 2754) | static void LodePNGUnknownChunks_init(LodePNGInfo* info) {
  function LodePNGUnknownChunks_cleanup (line 2762) | static void LodePNGUnknownChunks_cleanup(LodePNGInfo* info) {
  function LodePNGUnknownChunks_copy (line 2768) | static unsigned LodePNGUnknownChunks_copy(LodePNGInfo* dest,
  function LodePNGText_init (line 2791) | static void LodePNGText_init(LodePNGInfo* info) {
  function LodePNGText_cleanup (line 2797) | static void LodePNGText_cleanup(LodePNGInfo* info) {
  function LodePNGText_copy (line 2807) | static unsigned LodePNGText_copy(LodePNGInfo* dest, const LodePNGInfo* s...
  function lodepng_clear_text (line 2820) | void lodepng_clear_text(LodePNGInfo* info) {
  function lodepng_add_text (line 2824) | unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char...
  function LodePNGIText_init (line 2850) | static void LodePNGIText_init(LodePNGInfo* info) {
  function LodePNGIText_cleanup (line 2858) | static void LodePNGIText_cleanup(LodePNGInfo* info) {
  function LodePNGIText_copy (line 2872) | static unsigned LodePNGIText_copy(LodePNGInfo* dest,
  function lodepng_clear_itext (line 2889) | void lodepng_clear_itext(LodePNGInfo* info) {
  function lodepng_add_itext (line 2893) | unsigned lodepng_add_itext(LodePNGInfo* info, const char* key,
  function lodepng_info_init (line 2933) | void lodepng_info_init(LodePNGInfo* info) {
  function lodepng_info_cleanup (line 2952) | void lodepng_info_cleanup(LodePNGInfo* info) {
  function lodepng_info_copy (line 2962) | unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source) {
  function lodepng_info_swap (line 2978) | void lodepng_info_swap(LodePNGInfo* a, LodePNGInfo* b) {
  function addColorBits (line 2987) | static void addColorBits(unsigned char* out, size_t index, unsigned bits,
  type ColorTree (line 3000) | struct ColorTree
  type ColorTree (line 3008) | struct ColorTree {
  function color_tree_init (line 3013) | static void color_tree_init(ColorTree* tree) {
  function color_tree_cleanup (line 3020) | static void color_tree_cleanup(ColorTree* tree) {
  function color_tree_get (line 3031) | static int color_tree_get(ColorTree* tree, unsigned char r, unsigned cha...
  function color_tree_has (line 3046) | static int color_tree_has(ColorTree* tree, unsigned char r, unsigned cha...
  function color_tree_add (line 3054) | static void color_tree_add(ColorTree* tree, unsigned char r, unsigned ch...
  function rgba8ToPixel (line 3070) | static unsigned rgba8ToPixel(unsigned char* out, size_t i,
  function rgba16ToPixel (line 3131) | static unsigned rgba16ToPixel(unsigned char* out, size_t i,
  function getPixelColorRGBA8 (line 3170) | static unsigned getPixelColorRGBA8(unsigned char* r, unsigned char* g,
  function getPixelColorsRGBA8 (line 3270) | static unsigned getPixelColorsRGBA8(unsigned char* buffer, size_t numpix...
  function getPixelColorRGBA16 (line 3395) | static unsigned getPixelColorRGBA16(unsigned short* r, unsigned short* g,
  function lodepng_convert (line 3438) | unsigned lodepng_convert(unsigned char* out, const unsigned char* in,
  type ColorProfile (line 3499) | struct ColorProfile {
  function color_profile_init (line 3524) | static void color_profile_init(ColorProfile* profile,
  function color_profile_cleanup (line 3551) | static void color_profile_cleanup(ColorProfile* profile) {
  function getValueRequiredBits (line 3577) | unsigned getValueRequiredBits(unsigned short value) {
  function get_color_profile (line 3588) | static unsigned get_color_profile(ColorProfile* profile,
  function setColorKeyFrom16bit (line 3770) | static void setColorKeyFrom16bit(LodePNGColorMode* mode_out, unsigned r,
  function lodepng_auto_choose_color (line 3781) | unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out,
  function paethPredictor (line 3906) | static unsigned char paethPredictor(short a, short b, short c) {
  function Adam7_getpassvalues (line 3941) | static void Adam7_getpassvalues(unsigned passw[7], unsigned passh[7],
  function lodepng_inspect (line 3978) | unsigned lodepng_inspect(unsigned* w, unsigned* h, LodePNGState* state,
  function unfilterScanline (line 4032) | static unsigned unfilterScanline(unsigned char* recon,
  function unfilter (line 4105) | static unsigned unfilter(unsigned char* out, const unsigned char* in,
  function Adam7_deinterlace (line 4148) | static void Adam7_deinterlace(unsigned char* out, const unsigned char* in,
  function removePaddingBits (line 4194) | static void removePaddingBits(unsigned char* out, const unsigned char* in,
  function postProcessScanlines (line 4221) | static unsigned postProcessScanlines(unsigned char* out, unsigned char* in,
  function readChunk_PLTE (line 4272) | static unsigned readChunk_PLTE(LodePNGColorMode* color,
  function readChunk_tRNS (line 4296) | static unsigned readChunk_tRNS(LodePNGColorMode* color,
  function readChunk_bKGD (line 4330) | static unsigned readChunk_bKGD(LodePNGInfo* info, const unsigned char* d...
  function readChunk_tEXt (line 4364) | static unsigned readChunk_tEXt(LodePNGInfo* info, const unsigned char* d...
  function readChunk_zTXt (line 4413) | static unsigned readChunk_zTXt(LodePNGInfo* info,
  function readChunk_iTXt (line 4469) | static unsigned readChunk_iTXt(LodePNGInfo* info,
  function readChunk_tIME (line 4576) | static unsigned readChunk_tIME(LodePNGInfo* info, const unsigned char* d...
  function readChunk_pHYs (line 4592) | static unsigned readChunk_pHYs(LodePNGInfo* info, const unsigned char* d...
  function decodeGeneric (line 4609) | static void decodeGeneric(unsigned char** out, unsigned* w, unsigned* h,
  function lodepng_decode (line 4789) | unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h,
  function lodepng_decode_memory (line 4832) | unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigne...
  function lodepng_decode32 (line 4845) | unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h,
  function lodepng_decode24 (line 4850) | unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h,
  function lodepng_decode_file (line 4856) | unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h,
  function lodepng_decode32_file (line 4869) | unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigne...
  function lodepng_decode24_file (line 4874) | unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigne...
  function lodepng_decoder_settings_init (line 4880) | void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings) {
  function lodepng_state_init (line 4895) | void lodepng_state_init(LodePNGState* state) {
  function lodepng_state_cleanup (line 4907) | void lodepng_state_cleanup(LodePNGState* state) {
  function lodepng_state_copy (line 4912) | void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source) {
  function addChunk (line 4934) | static unsigned addChunk(ucvector* out, const char* chunkName,
  function writeSignature (line 4943) | static void writeSignature(ucvector* out) {
  function addChunk_IHDR (line 4955) | static unsigned addChunk_IHDR(ucvector* out, unsigned w, unsigned h,
  function addChunk_PLTE (line 4976) | static unsigned addChunk_PLTE(ucvector* out, const LodePNGColorMode* inf...
  function addChunk_tRNS (line 4992) | static unsigned addChunk_tRNS(ucvector* out, const LodePNGColorMode* inf...
  function addChunk_IDAT (line 5031) | static unsigned addChunk_IDAT(ucvector* out, const unsigned char* data,
  function addChunk_IEND (line 5047) | static unsigned addChunk_IEND(ucvector* out) {
  function addChunk_tEXt (line 5055) | static unsigned addChunk_tEXt(ucvector* out, const char* keyword,
  function addChunk_zTXt (line 5074) | static unsigned addChunk_zTXt(ucvector* out, const char* keyword,
  function addChunk_iTXt (line 5102) | static unsigned addChunk_iTXt(ucvector* out, unsigned compressed,
  function addChunk_bKGD (line 5147) | static unsigned addChunk_bKGD(ucvector* out, const LodePNGInfo* info) {
  function addChunk_tIME (line 5173) | static unsigned addChunk_tIME(ucvector* out, const LodePNGTime* time) {
  function addChunk_pHYs (line 5190) | static unsigned addChunk_pHYs(ucvector* out, const LodePNGInfo* info) {
  function filterScanline (line 5207) | static void filterScanline(unsigned char* out, const unsigned char* scan...
  function flog2 (line 5276) | static float flog2(float f) {
  function filter (line 5290) | static unsigned filter(unsigned char* out, const unsigned char* in, unsi...
  function addPaddingBits (line 5503) | static void addPaddingBits(unsigned char* out, const unsigned char* in,
  function Adam7_interlace (line 5534) | static void Adam7_interlace(unsigned char* out, const unsigned char* in,
  function preProcessScanlines (line 5581) | static unsigned preProcessScanlines(unsigned char** out, size_t* outsize,
  function getPaletteTranslucency (line 5674) | static unsigned getPaletteTranslucency(const unsigned char* palette,
  function addUnknownChunks (line 5697) | static unsigned addUnknownChunks(ucvector* out, unsigned char* data,
  function lodepng_encode (line 5709) | unsigned lodepng_encode(unsigned char** out, size_t* outsize,
  function lodepng_encode_memory (line 5905) | unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize,
  function lodepng_encode32 (line 5921) | unsigned lodepng_encode32(unsigned char** out, size_t* outsize,
  function lodepng_encode24 (line 5926) | unsigned lodepng_encode24(unsigned char** out, size_t* outsize,
  function lodepng_encode_file (line 5932) | unsigned lodepng_encode_file(const char* filename, const unsigned char* ...
  function lodepng_encode32_file (line 5944) | unsigned lodepng_encode32_file(const char* filename, const unsigned char...
  function lodepng_encode24_file (line 5949) | unsigned lodepng_encode24_file(const char* filename, const unsigned char...
  function lodepng_encoder_settings_init (line 5955) | void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings) {
  type lodepng (line 6165) | namespace lodepng {
    function load_file (line 6168) | void load_file(std::vector<unsigned char>& buffer,
    function save_file (line 6187) | void save_file(const std::vector<unsigned char>& buffer,
    function decompress (line 6197) | unsigned decompress(std::vector<unsigned char>& out, const unsigned ch...
    function decompress (line 6210) | unsigned decompress(std::vector<unsigned char>& out,
    function compress (line 6218) | unsigned compress(std::vector<unsigned char>& out, const unsigned char...
    function compress (line 6230) | unsigned compress(std::vector<unsigned char>& out,
    function State (line 6253) | State& State::operator=(const State& other) {
    function decode (line 6260) | unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned...
    function decode (line 6277) | unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned...
    function decode (line 6284) | unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned...
    function decode (line 6296) | unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned...
    function decode (line 6302) | unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned...
    function encode (line 6313) | unsigned encode(std::vector<unsigned char>& out, const unsigned char* in,
    function encode (line 6326) | unsigned encode(std::vector<unsigned char>& out,
    function encode (line 6334) | unsigned encode(std::vector<unsigned char>& out, const unsigned char* in,
    function encode (line 6346) | unsigned encode(std::vector<unsigned char>& out,
    function encode (line 6355) | unsigned encode(const std::string& filename, const unsigned char* in,
    function encode (line 6364) | unsigned encode(const std::string& filename,

FILE: framework/tools/dataset-tools/lodepng.h
  type LodePNGColorType (line 87) | typedef enum LodePNGColorType {
  function namespace (line 190) | namespace lodepng {
  type LodePNGDecompressSettings (line 243) | typedef struct LodePNGDecompressSettings LodePNGDecompressSettings;
  type LodePNGDecompressSettings (line 244) | struct LodePNGDecompressSettings {
  type LodePNGCompressSettings (line 268) | typedef struct LodePNGCompressSettings LodePNGCompressSettings;
  type LodePNGCompressSettings (line 269) | struct LodePNGCompressSettings /*deflate = compress*/
  type LodePNGColorMode (line 301) | typedef struct LodePNGColorMode {
  type LodePNGTime (line 379) | typedef struct LodePNGTime {
  type LodePNGInfo (line 390) | typedef struct LodePNGInfo {
  type LodePNGDecoderSettings (line 500) | typedef struct LodePNGDecoderSettings {
  type LodePNGFilterStrategy (line 528) | typedef enum LodePNGFilterStrategy {
  type LodePNGAutoConvert (line 546) | typedef enum LodePNGAutoConvert {
  type LodePNGEncoderSettings (line 576) | typedef struct LodePNGEncoderSettings {
  type LodePNGState (line 611) | typedef struct LodePNGState {
  function namespace (line 801) | namespace lodepng {

FILE: framework/tools/loaders/benchmark_loader.cpp
  function main (line 30) | int main(int argc, char * argv[])

FILE: framework/tools/loaders/pangolin_loader.cpp
  function main (line 33) | int main(int argc, char * argv[])
  function run_pangolin (line 143) | void run_pangolin(bool *stay_on, SLAMBenchConfiguration *config) {

FILE: framework/tools/loaders/slambench_app.cpp
  function run_pangolin (line 35) | void run_pangolin(bool *stay_on, SLAMBenchConfiguration *config) {
  function main (line 75) | int main(int argc, char * argv[])

FILE: framework/tools/profiling-tools/OCLWrapper.cpp
  function computeEventDuration (line 38) | unsigned long int computeEventDuration(cl_event* event) {
  function getKernelName (line 54) | std::string getKernelName(cl_kernel kernel) {
  function enqueueKernel (line 71) | void enqueueKernel(cl_command_queue command_queue, cl_kernel kernel,
  function cl_int (line 174) | cl_int clEnqueueNDRangeKernel(cl_command_queue command_queue, cl_kernel ...
  function cl_command_queue (line 202) | cl_command_queue clCreateCommandQueue(cl_context context, cl_device_id d...

FILE: icra2018_results/plotutils.py
  function getlabel (line 85) | def getlabel(name) :
  function generate_violins (line 113) | def generate_violins (data) :
  function plot_violins (line 155) | def plot_violins (data, filename , order) :

FILE: icra2018_results/slamlog.py
  function load_data_from_input_dirs (line 41) | def load_data_from_input_dirs ( input_dirs ) :
  function load_data_from_file (line 54) | def load_data_from_file(filename) :
  function turn_data_to_stats (line 141) | def turn_data_to_stats(data) :
  function load_data_from_files (line 196) | def load_data_from_files (filelist) :
  function flat_data (line 239) | def flat_data (data_array, Xcols, Ycols) :

FILE: icra2018_results/utils.py
  class shellcolors (line 10) | class shellcolors:
  function setverbose (line 25) | def setverbose(v) :
  function printwarning (line 29) | def printwarning(msg) :
  function printerr (line 33) | def printerr(err) :
  function printinfo (line 36) | def printinfo(err) :

FILE: icra2018_results/violins.py
  function generate_latex_doc (line 43) | def generate_latex_doc (containt) :
  function generate_latex_table (line 60) | def generate_latex_table (data , table_title, value_name, value_type , p...
  function generate_latex (line 128) | def generate_latex (data) :
  function main (line 143) | def main():

FILE: scripts/evaluate.py
  function parse_input (line 13) | def parse_input(filename, remove_repeat=True, input=None):
  function tf_matrix_to_values (line 67) | def tf_matrix_to_values(matrix):
  function tf_values_to_matrix (line 72) | def tf_values_to_matrix(values):
  function transform_target_frame (line 76) | def transform_target_frame(sequences, scene, tf_target_new):
  function transform_world_frame (line 83) | def transform_world_frame(sequences, gts, auto_scale):
  function calculate_ate (line 116) | def calculate_ate(sequences, gts):
  function calculate_correctness (line 132) | def calculate_correctness(sequences, gts, ate_threshold, aoe_threshold, ...
  function angle_diff_from_quaternions (line 177) | def angle_diff_from_quaternions(q1, q2):
  function plot_all_traj (line 183) | def plot_all_traj(sequences, gts):
  function evaluate (line 204) | def evaluate(sequences, inputs, gts, gt_info, ate_threshold, aoe_thresho...
  function main (line 228) | def main():

FILE: scripts/tum_evaluate_tools/associate.py
  function read_file_list (line 50) | def read_file_list(filename):
  function associate (line 72) | def associate(first_list, second_list,offset,max_difference):
  function slerp (line 104) | def slerp(q1, q2, w1, w2):
  function associate_with_interpolation (line 120) | def associate_with_interpolation(first_list, second_list, offset, max_di...

FILE: scripts/tum_evaluate_tools/evaluate_ate.py
  function umeyama_align (line 47) | def umeyama_align(x, y, with_scale=True):
  function align (line 120) | def align(model,data):
  function compose_transform_matrix (line 154) | def compose_transform_matrix(rot, trans, scale=1):
  function plot_traj (line 165) | def plot_traj(ax,stamps,traj,style,color,label):
Copy disabled (too large) Download .json
Condensed preview — 417 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (30,877K chars).
[
  {
    "path": ".clang-format",
    "chars": 87,
    "preview": "---\nBasedOnStyle: Google\nNamespaceIndentation: All\nColumnLimit: 120\nIndentWidth: 4\n...\n"
  },
  {
    "path": ".dockerignore",
    "chars": 32,
    "preview": "docker/\nbitbucket-pipelines.yml\n"
  },
  {
    "path": ".gitignore",
    "chars": 621,
    "preview": "# Docker files\n/docker/tmp\n/docker/nvidia-driver.run\ndocker/workspace/\nframework/makefiles/benchmarks.makefile\nframework"
  },
  {
    "path": ".travis.yml",
    "chars": 116,
    "preview": "language: cpp\ndist: trusty\nsudo: required\n\nservices:\n  - docker\n  \n\nscript:\n  - make -C docker github-docker-image\n "
  },
  {
    "path": "CMakeLists.txt",
    "chars": 6132,
    "preview": "cmake_minimum_required(VERSION 3.10)\n\nproject(slambench)\n\n# CMake variables\n############################################"
  },
  {
    "path": "CONTRIBUTORS",
    "chars": 167,
    "preview": " - Bodin Bruno\n - Mawer John\n - Melot Nicolas\n - Moldovan Adrian\n - Nardi Luigi\n - Nisbet Andy\n - Saeedi Sajad \n - Vespa"
  },
  {
    "path": "LICENSE",
    "chars": 2498,
    "preview": "The MIT License (MIT)\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Develop"
  },
  {
    "path": "Makefile",
    "chars": 6557,
    "preview": "ECHO=/bin/echo\n#SHELL := /bin/bash\nWGET:=wget\nGET_REPLY:=read REPLY\nifeq (\"${SBQUIET}\",\"1\")\nGET_REPLY:=REPLY=\"y\"\nWGET:=w"
  },
  {
    "path": "README.md",
    "chars": 24459,
    "preview": "# SLAMBench \n\n[![Build Status](https://travis-ci.org/pamela-project/slambench2.svg?branch=master)](https://travis-ci.org"
  },
  {
    "path": "_config.yml",
    "chars": 26,
    "preview": "theme: jekyll-theme-cayman"
  },
  {
    "path": "benchmarks/CMakeLists.txt",
    "chars": 1425,
    "preview": "#######################################################\n# This file is the CMAKE script for Benchmarks Libraries\n#######"
  },
  {
    "path": "cmake_modules/CUDACheckCompute.cmake",
    "chars": 1646,
    "preview": "#############################\n#Sourced from:\n#https://raw.githubusercontent.com/jwetzl/CudaLBFGS/master/CheckComputeCapa"
  },
  {
    "path": "cmake_modules/FindBrisk.cmake",
    "chars": 712,
    "preview": "\nfind_path(BRISK_INCLUDE_PATH Brisk/Brisk.h\n\t~/usr/include\n\t~/usr/.local/include\n\t~/.local/include\n\t~/usr/local/include\n"
  },
  {
    "path": "cmake_modules/FindCVD.cmake",
    "chars": 610,
    "preview": "# - Try to find libCVD\n#\n#  CVD_FOUND - system has libCVD\n#  CVD_INCLUDE_DIR - the libCVD include directories\n#  CVD_LIB"
  },
  {
    "path": "cmake_modules/FindCeres.cmake",
    "chars": 1903,
    "preview": "# -*- mode: cmake; -*-\n###############################################################################\n# Find Ceres\n#\n# "
  },
  {
    "path": "cmake_modules/FindEigen.cmake",
    "chars": 2995,
    "preview": "# - Try to find Eigen3 lib\n#\n# This module supports requiring a minimum version, e.g. you can do\n#   find_package(Eigen3"
  },
  {
    "path": "cmake_modules/FindEigen3.cmake",
    "chars": 2995,
    "preview": "# - Try to find Eigen3 lib\n#\n# This module supports requiring a minimum version, e.g. you can do\n#   find_package(Eigen3"
  },
  {
    "path": "cmake_modules/FindFreeImage.cmake",
    "chars": 2810,
    "preview": "#\n# Try to find the FreeImage library and include path.\n# Once done this will define\n#\n# FREEIMAGE_FOUND\n# FREEIMAGE_INC"
  },
  {
    "path": "cmake_modules/FindG2O.cmake",
    "chars": 3257,
    "preview": "# Find the header files\n\nFIND_PATH(G2O_INCLUDE_DIR g2o/core/base_vertex.h\n  ${G2O_ROOT}/include\n  $ENV{G2O_ROOT}/include"
  },
  {
    "path": "cmake_modules/FindGVARS.cmake",
    "chars": 637,
    "preview": "# - Try to find GVARS\n#\n#  GVARS_FOUND - system has GVARS\n#  GVARS_INCLUDE_DIR - the GVARS include directories\n#  GVARS_"
  },
  {
    "path": "cmake_modules/FindGlog.cmake",
    "chars": 8628,
    "preview": "# Ceres Solver - A fast non-linear least squares minimizer\n# Copyright 2015 Google Inc. All rights reserved.\n# http://ce"
  },
  {
    "path": "cmake_modules/FindLIBYAML.cmake",
    "chars": 1048,
    "preview": "# CMake module to search for the libyaml library\n# (library for parsing YAML files)\n#\n# If it's found it sets LIBYAML_FO"
  },
  {
    "path": "cmake_modules/FindOpenCL.cmake",
    "chars": 5541,
    "preview": "# Module for locating OpenCL.\n#\n# Customizable variables:\n#   OPENCL_ROOT_DIR\n#     Specifies OpenCL's root directory. T"
  },
  {
    "path": "cmake_modules/FindOpenNI.cmake",
    "chars": 1758,
    "preview": "# -*- mode: cmake; -*-\n###############################################################################\n# Find OpenNI\n#\n#"
  },
  {
    "path": "cmake_modules/FindOpenNI2.cmake",
    "chars": 1447,
    "preview": "find_library(OPENNI2_LIBRARY\n        NAMES OpenNI2\n    \tPATHS ~/usr/lib ~/usr/local/lib ~/.local/lib64  ~/.local/lib  /u"
  },
  {
    "path": "cmake_modules/FindPAPI.cmake",
    "chars": 1360,
    "preview": "# Try to find PAPI headers and libraries.\n#\n# Usage of this module as follows:\n#\n#     find_package(PAPI)\n#\n# Variables "
  },
  {
    "path": "cmake_modules/FindSLAMBENCH.cmake",
    "chars": 1737,
    "preview": "\n\nfind_path(SLAMBENCH_INCLUDE_PATH SLAMBenchAPI.h)\n\nfind_library(SLAMBENCH_UTILS_LIBRARY libslambench-utils.a PATH ${SLA"
  },
  {
    "path": "cmake_modules/FindSuiteSparse.cmake",
    "chars": 3359,
    "preview": "\nIF(SuiteSparse_FOUND)\n  SET(SuiteSparse_FIND_QUIETLY TRUE)\nENDIF(SuiteSparse_FOUND)\n\n################ AMD #############"
  },
  {
    "path": "cmake_modules/FindTooN.cmake",
    "chars": 693,
    "preview": "\nfind_path(TOON_INCLUDE_PATH TooN/TooN.h\n\t~/usr/include\n\t~/usr/.local/include\n\t~/.local/include\n\t~/usr/local/include\n\t/u"
  },
  {
    "path": "cmake_modules/cuda_compute_capability.c",
    "chars": 1780,
    "preview": "/*\n* Copyright (C) 2011 Florian Rathgeber, florian.rathgeber@gmail.com\n*\n* This code is licensed under the MIT License. "
  },
  {
    "path": "docker/Makefile",
    "chars": 1266,
    "preview": "\n####################################\n####       DOCKER PART          ####\n####################################\n\n## sudo"
  },
  {
    "path": "docker/cuda-ubuntu-16.04.docker",
    "chars": 3633,
    "preview": "FROM ubuntu:16.04\n\n\n# Dependencies\n##################################################################\n\nRUN apt-get -y up"
  },
  {
    "path": "docker/fastCI.docker",
    "chars": 1471,
    "preview": "FROM fedora:26\n\n# Dependencies\n##################################################################\n\nRUN  dnf install -y g"
  },
  {
    "path": "docker/fedora-24.docker",
    "chars": 3204,
    "preview": "FROM fedora:24\n\n# Dependencies\n##################################################################\n\nRUN dnf install -y em"
  },
  {
    "path": "docker/fedora-25.docker",
    "chars": 3204,
    "preview": "FROM fedora:25\n\n# Dependencies\n##################################################################\n\nRUN dnf install -y em"
  },
  {
    "path": "docker/fedora-26.docker",
    "chars": 3205,
    "preview": "FROM fedora:26\n\n# Dependencies\n##################################################################\n\nRUN dnf install -y em"
  },
  {
    "path": "docker/github.docker",
    "chars": 1633,
    "preview": "FROM bbodin/slambench:travis-deps\n\n# Copy\n##################################################################\n\nCOPY ./sla"
  },
  {
    "path": "docker/run_cuda.sh",
    "chars": 1446,
    "preview": "#!/bin/sh\n\n#version_gt() { test \"$(echo \"$@\" | tr \" \" \"\\n\" | sort -V | tail -n 1)\" = \"$1\"; }\n#docker_version=$(docker ve"
  },
  {
    "path": "docker/travis-deps.docker",
    "chars": 2975,
    "preview": "FROM ubuntu:16.04\n\n\n# Dependencies\n##################################################################\n\nRUN apt-get -y up"
  },
  {
    "path": "docker/ubuntu-14.04-bitbucket.docker",
    "chars": 2037,
    "preview": "FROM bbodin/slambench:ubuntu-14.04-deps\n\n# Copy\n##################################################################\n\nCOPY"
  },
  {
    "path": "docker/ubuntu-14.04-deps.docker",
    "chars": 1785,
    "preview": "FROM ubuntu:14.04\n\n# Dependencies\n##################################################################\n\nRUN apt-get -y upd"
  },
  {
    "path": "docker/ubuntu-14.04.docker",
    "chars": 3241,
    "preview": "FROM ubuntu:14.04\n\n# Dependencies\n##################################################################\n\nRUN apt-get -y upd"
  },
  {
    "path": "docker/ubuntu-16.04.docker",
    "chars": 2966,
    "preview": "FROM ubuntu:16.04\n\n\n# Dependencies\n##################################################################\n\nRUN apt-get -y up"
  },
  {
    "path": "docker/ubuntu-16.10.docker",
    "chars": 3339,
    "preview": "FROM ubuntu:16.10\n\n# Dependencies\n##################################################################\n\nRUN df -h\nRUN apt-"
  },
  {
    "path": "framework/CMakeLists.txt",
    "chars": 557,
    "preview": "#######################################################\n# This file is the CMAKE script for SLAMBench Libraries\n########"
  },
  {
    "path": "framework/makefiles/README.md",
    "chars": 4187,
    "preview": "# SLAMBench Dependency System #\n\n## Description ##\n\nThe idea is to maximise the chance of a good build, by selection the"
  },
  {
    "path": "framework/makefiles/brisk.make",
    "chars": 756,
    "preview": "BRISK_INCLUDE_DIR=${DEPS_DIR}/brisk/include\nBRISK_DIR=${DEPS_DIR}/brisk/lib/CMake/brisk/\n\n${REPOS_DIR}/brisk :\n\tmkdir ${"
  },
  {
    "path": "framework/makefiles/ceres.make",
    "chars": 1697,
    "preview": "CERES_DIR=${DEPS_DIR}/ceres/\n\n#include eigen3 # not required\n\n${REPOS_DIR}/ceres :\n\tmkdir -p ${REPOS_DIR}\n\trm -rf ${REPO"
  },
  {
    "path": "framework/makefiles/cvd.make",
    "chars": 707,
    "preview": "\n\nCVD_INCLUDE_DIR=${DEPS_DIR}/cvd/include\nCVD_LIBRARY=${DEPS_DIR}/cvd/lib/libcvd.so\n\n\n${REPOS_DIR}/cvd :\n\tmkdir ${REPOS_"
  },
  {
    "path": "framework/makefiles/dataset-utils.makefile",
    "chars": 12226,
    "preview": "####################################\n#### DATA SET GENERATION        ####\n####################################\ncheck_gen"
  },
  {
    "path": "framework/makefiles/deps.makefile",
    "chars": 3146,
    "preview": "ROOT_DIR=$(shell pwd)\nDEPS_DIR=$(ROOT_DIR)/deps\nREPOS_DIR=$(DEPS_DIR)/repos\nDEPS_BUILD_DIR=$(DEPS_DIR)/build\nDEPS_ARGS=\n"
  },
  {
    "path": "framework/makefiles/download_benchmarks.py",
    "chars": 3495,
    "preview": "import sys\nimport json\n\nwith open(sys.argv[1]) as f:\n    data = json.load(f)\n\n\ndef echo(str=\"\", echoargs = \"\"):\n    prin"
  },
  {
    "path": "framework/makefiles/download_datasets.py",
    "chars": 2770,
    "preview": "import sys\nDATASET_DIR = \"datasets/\"\n\nfd = open(sys.argv[1])\ndata =fd.read()\nfd.close()\n\n\ndef echo(str=\"\", echoargs = \"\""
  },
  {
    "path": "framework/makefiles/eigen3.make",
    "chars": 1017,
    "preview": "EIGEN3_INCLUDE_DIR=${DEPS_DIR}/eigen3/include/eigen3\nANDROID_EIGEN3_INCLUDE_DIR=${ANDROID_DEPS_DIR}/eigen3/include/eigen"
  },
  {
    "path": "framework/makefiles/flann.make",
    "chars": 1059,
    "preview": "FLANN_INCLUDE_DIR=${DEPS_DIR}/flann/include\nFLANN_LIBRARY=${DEPS_DIR}/flann/lib/libflann.so\n#include eigen3 # not requir"
  },
  {
    "path": "framework/makefiles/freeimage.make",
    "chars": 1056,
    "preview": "FREEIMAGE_INCLUDE_PATH=${DEPS_DIR}/freeimage/include\nFREEIMAGE_DYNAMIC_LIBRARY=${DEPS_DIR}/freeimage/lib/libfreeimage.so"
  },
  {
    "path": "framework/makefiles/g2o.make",
    "chars": 1959,
    "preview": "G2O_DIR=${DEPS_DIR}/g2o\nANDROID_G2O_DIR=${ANDROID_DEPS_DIR}\n\n${SUITE_SPARSE_ROOT}/lib/libcxsparse.a : suitesparse\n\techo "
  },
  {
    "path": "framework/makefiles/gcc.make",
    "chars": 1424,
    "preview": "GCC7_COMPILER=${DEPS_DIR}/gcc7/bin/c++\nGCC5_COMPILER=${DEPS_DIR}/gcc5/bin/c++\n\nGCC_REPOS=gcc\nGCC_BUILD_DIR=${DEPS_DIR}/b"
  },
  {
    "path": "framework/makefiles/gvars.make",
    "chars": 651,
    "preview": "\n\nGVARS_INCLUDE_DIR=${DEPS_DIR}/gvars/include\nGVARS_LIBRARY=${DEPS_DIR}/gvars/lib/libGVars3.so\n\n\n${REPOS_DIR}/gvars :\n\tm"
  },
  {
    "path": "framework/makefiles/libopencl-stub.make",
    "chars": 1099,
    "preview": "dependencies/libopencl-stub : \n\n\nANDROID_OPENCL_ROOT_DIR=${ANDROID_DEPS_DIR}/libopencl-stub/\nANDROID_OPENCL_INCLUDE_DIR="
  },
  {
    "path": "framework/makefiles/opencv.make",
    "chars": 2694,
    "preview": "OPENCV_DIR=${DEPS_DIR}/opencv/share/OpenCV/\nANDROID_OPENCV_DIR=${ANDROID_DEPS_DIR}/opencv/share/OpenCV/\nOPENCV_CONTRIB_M"
  },
  {
    "path": "framework/makefiles/opengv.make",
    "chars": 983,
    "preview": "OPENGV_INCLUDE_DIR=${DEPS_DIR}/opengv/include\nOPENGV_LIBRARY=${DEPS_DIR}/opengv/lib/libopengv.a\n\n${REPOS_DIR}/opengv :\n\t"
  },
  {
    "path": "framework/makefiles/openni.make",
    "chars": 4845,
    "preview": "########################################## COMMIT USED #################################################################"
  },
  {
    "path": "framework/makefiles/opentuner.make",
    "chars": 362,
    "preview": "\n${REPOS_DIR}/opentuner :\n\tmkdir ${REPOS_DIR} -p\n\trm $@ -rf\n\tgit clone https://github.com/jansel/opentuner.git  $@ \n\n${D"
  },
  {
    "path": "framework/makefiles/pangolin.make",
    "chars": 1283,
    "preview": "PANGOLIN_DIR=${DEPS_DIR}/pangolin/lib/cmake/Pangolin/\n\nCURRENT_PANGOLIN_COMMIT=c2a6ef524401945b493f14f8b5b8aa76cc7d71a9 "
  },
  {
    "path": "framework/makefiles/pcl.make",
    "chars": 2552,
    "preview": "ifndef DEPS_DIR\n$(error DEPS_DIR is not set)\nendif\n\nifndef REPOS_DIR\n$(error REPOS_DIR is not set)\nendif\n\nifndef DEPS_BU"
  },
  {
    "path": "framework/makefiles/sophus.make",
    "chars": 781,
    "preview": "Sophus_INCLUDE_DIR=${DEPS_DIR}/Sophus/include\nSophus_INCLUDE_DIRS=${DEPS_DIR}/Sophus/include\nSophus_DIR=${DEPS_DIR}/Soph"
  },
  {
    "path": "framework/makefiles/suitesparse.make",
    "chars": 2660,
    "preview": "SUITE_SPARSE_ROOT=${DEPS_DIR}/suitesparse\n\n${REPOS_DIR}/suitesparse :\n\tmkdir ${REPOS_DIR}/ -p\n\trm ${REPOS_DIR}/suitespar"
  },
  {
    "path": "framework/makefiles/toon.make",
    "chars": 807,
    "preview": "TOON_INCLUDE_DIR=${DEPS_DIR}/toon/include\nANDROID_TOON_INCLUDE_DIR=${ANDROID_DEPS_DIR}/toon/include\n\n${REPOS_DIR}/TooN :"
  },
  {
    "path": "framework/patchs/OpenNI2_SLAMBench.patch",
    "chars": 7127,
    "preview": "From 24cca203f2e4e1de89fb858b7b018d86abb99c8a Mon Sep 17 00:00:00 2001\nFrom: \"Bruno Bodin (zebulon)\" <bbodin@inf.ed.ac.u"
  },
  {
    "path": "framework/patchs/OpenNI_SLAMBench.patch",
    "chars": 6141,
    "preview": "From 1e72c95f8eccb42e1b81330c5428d64bac4dedba Mon Sep 17 00:00:00 2001\nFrom: \"Bruno Bodin (zebulon)\" <bbodin@inf.ed.ac.u"
  },
  {
    "path": "framework/patchs/SensorKinect_SLAMBench.patch",
    "chars": 10747,
    "preview": "From 334f203bfc5f609dd0726fd54e075cb7e1ad5b8b Mon Sep 17 00:00:00 2001\nFrom: \"Bruno Bodin (zebulon)\" <bbodin@inf.ed.ac.u"
  },
  {
    "path": "framework/patchs/freeimage.patch",
    "chars": 1158,
    "preview": "From 8f0d44f1b1b8de0eda131210ce6e09e84f4deea0 Mon Sep 17 00:00:00 2001\nFrom: Ryan Coe <bluemrp9@gmail.com>\nDate: Fri, 23"
  },
  {
    "path": "framework/patchs/libopencl-stub_SLAMBench.patch",
    "chars": 103710,
    "preview": "From 2c3bc3642a5177c9305da3b8dc93293ff576b4b9 Mon Sep 17 00:00:00 2001\nFrom: \"Bruno Bodin (zebulon)\" <bbodin@inf.ed.ac.u"
  },
  {
    "path": "framework/shared/CMakeLists.txt",
    "chars": 7400,
    "preview": "cmake_minimum_required(VERSION 3.10)\n\nset(common_properties \"\")\nset(common_libraries \"\")\ninclude_directories(./include)\n"
  },
  {
    "path": "framework/shared/include/ColumnWriter.h",
    "chars": 3491,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/ParameterComponent.h",
    "chars": 1222,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/ParameterManager.h",
    "chars": 1171,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/Parameters.h",
    "chars": 17223,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/ResultWriter.h",
    "chars": 613,
    "preview": "/*\n\n Copyright (c) 2019 Intel Corp.\n\n This code is licensed under the MIT License.\n\n */\n\n\n#ifndef RESULT_WRITER_H_\n#defi"
  },
  {
    "path": "framework/shared/include/SLAMBenchAPI.h",
    "chars": 2024,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/SLAMBenchConfiguration.h",
    "chars": 7252,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/SLAMBenchException.h",
    "chars": 701,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/SLAMBenchLibraryHelper.h",
    "chars": 2994,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/SLAMBenchUI.h",
    "chars": 1781,
    "preview": "\n#ifndef SLAMBENCHUI_H_\n#define SLAMBENCHUI_H_\n\n// #define DEBUG_MUTEXES\n\n#include <outputs/OutputManager.h>\n\n#include <"
  },
  {
    "path": "framework/shared/include/SLAMBenchUI_Pangolin.h",
    "chars": 4451,
    "preview": "\n#ifndef SLAMBENCHUI_PANGOLIN_H_\n#define SLAMBENCHUI_PANGOLIN_H_\n\n#define GLM_FORCE_RADIANS\n#include <pangolin/pangolin."
  },
  {
    "path": "framework/shared/include/TimeStamp.h",
    "chars": 3158,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/Event.h",
    "chars": 747,
    "preview": "/*\n\n Copyright (c) 2019 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/FrameBuffer.h",
    "chars": 708,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/FrameBufferSource.h",
    "chars": 621,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/FrameFormat.h",
    "chars": 487,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/FrameSource.h",
    "chars": 2985,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/InputInterface.h",
    "chars": 1533,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/InputInterfaceManager.h",
    "chars": 1320,
    "preview": "/*\n\n Copyright (c) 2020 University of Manchester.\n Developed in the PAMELA project, EPSRC Programme Grant EP/K008730/1\n\n"
  },
  {
    "path": "framework/shared/include/io/PixelFormat.h",
    "chars": 748,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/SLAMFile.h",
    "chars": 1412,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/SLAMFrame.h",
    "chars": 2351,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/SensorType.h",
    "chars": 346,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/core/Core.h",
    "chars": 820,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/deserialisation/Deserialiser.h",
    "chars": 601,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/deserialisation/SLAMFileDeserialiser.h",
    "chars": 924,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/deserialisation/SLAMFileHeaderDeserialiser.h",
    "chars": 541,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/deserialisation/SLAMFrameDeserialiser.h",
    "chars": 847,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/deserialisation/SensorCollectionDeserialiser.h",
    "chars": 711,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/format/DataFormatter.h",
    "chars": 696,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/format/EventDataFormatter.h",
    "chars": 1679,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/format/ImageDataFormatter.h",
    "chars": 2253,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/format/PointCloud.h",
    "chars": 984,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/openni15/ONI15Frame.h",
    "chars": 701,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/openni15/ONI15FrameStream.h",
    "chars": 1305,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/openni15/ONI15InputInterface.h",
    "chars": 1077,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/openni2/ONI2Frame.h",
    "chars": 609,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/openni2/ONI2FrameStream.h",
    "chars": 1132,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/openni2/ONI2InputInterface.h",
    "chars": 1227,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/realsense/RealSense2Frame.h",
    "chars": 655,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/realsense/RealSense2FrameStream.h",
    "chars": 1266,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/realsense/RealSense2InputInterface.h",
    "chars": 1449,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/sensor/AccelerometerSensor.h",
    "chars": 869,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/sensor/CameraSensor.h",
    "chars": 1880,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/sensor/CameraSensorFinder.h",
    "chars": 1171,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/sensor/DepthSensor.h",
    "chars": 884,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/sensor/EventCameraSensor.h",
    "chars": 690,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/sensor/GroundTruthSensor.h",
    "chars": 674,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/sensor/GyroSensor.h",
    "chars": 688,
    "preview": "/*\n\n Copyright (c) 2019 Intel Corp.\n\n This code is licensed under the MIT License.\n\n */\n\n#ifndef IO_GYROSENSOR_H\n#define"
  },
  {
    "path": "framework/shared/include/io/sensor/IMUSensor.h",
    "chars": 856,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/sensor/OdomSensor.h",
    "chars": 449,
    "preview": "/*\n\n Copyright (c) 2019 Intel Corp.\n\n This code is licensed under the MIT License.\n\n */\n\n\n#ifndef IO_ODOMSENSOR_H\n#defin"
  },
  {
    "path": "framework/shared/include/io/sensor/PointCloudSensor.h",
    "chars": 614,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/sensor/Sensor.h",
    "chars": 1983,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/sensor/SensorCollection.h",
    "chars": 1170,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/sensor/SensorDatabase.h",
    "chars": 1510,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/sensor/sensor_builder.h",
    "chars": 8664,
    "preview": "/*\n\n Copyright (c) 2019 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/serialisation/SLAMFileHeaderSerialiser.h",
    "chars": 687,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/serialisation/SLAMFileSerialiser.h",
    "chars": 765,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/serialisation/SLAMFrameSerialiser.h",
    "chars": 566,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/io/serialisation/Serialiser.h",
    "chars": 511,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/lodepng.h",
    "chars": 77403,
    "preview": "/*\n LodePNG version 20140624\n\n Copyright (c) 2005-2014 Lode Vandevenne\n\n This software is provided 'as-is', without any "
  },
  {
    "path": "framework/shared/include/math_types.h",
    "chars": 1328,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/metrics/ATEMetric.h",
    "chars": 1118,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/metrics/DepthEstimationMetric.h",
    "chars": 1013,
    "preview": "#ifndef DEPTHESTIMATIONMETRIC_H\n#define DEPTHESTIMATIONMETRIC_H\n#include \"Metric.h\"\n#include <outputs/Output.h>\n\nnamespa"
  },
  {
    "path": "framework/shared/include/metrics/DurationMetric.h",
    "chars": 1015,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/metrics/FrameData.h",
    "chars": 869,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/metrics/MemoryMetric.h",
    "chars": 1065,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/metrics/Metric.h",
    "chars": 1098,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/metrics/MetricManager.h",
    "chars": 2188,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/metrics/MetricValue.h",
    "chars": 926,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/metrics/Phase.h",
    "chars": 748,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/metrics/PointCloudMetric.h",
    "chars": 947,
    "preview": "#ifndef POINTCLOUDMETRIC_H\n#define POINTCLOUDMETRIC_H\n\n#include \"metrics/Metric.h\"\n#include \"outputs/Output.h\"\n\nnamespac"
  },
  {
    "path": "framework/shared/include/metrics/PowerMetric.h",
    "chars": 885,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/metrics/RPEMetric.h",
    "chars": 1131,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/metrics/memory_utils/CUDAMonitor.h",
    "chars": 3170,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/metrics/power_utils/PAPIMonitor.h",
    "chars": 2893,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/metrics/power_utils/PowerMonitor.h",
    "chars": 675,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/metrics/power_utils/XU3Monitor.h",
    "chars": 2708,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/outputs/Output.h",
    "chars": 5929,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/outputs/OutputManager.h",
    "chars": 1446,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/outputs/OutputManagerWriter.h",
    "chars": 1624,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/outputs/PoseOutput.h",
    "chars": 391,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/outputs/TrajectoryAlignmentMethod.h",
    "chars": 1506,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/outputs/TrajectoryInterface.h",
    "chars": 2008,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/sb_malloc.h",
    "chars": 3421,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/sysutils.h",
    "chars": 1203,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/timings.h",
    "chars": 1543,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/utils.h",
    "chars": 873,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/values/Value.h",
    "chars": 13222,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/values/ValueDispatch.h",
    "chars": 1126,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/values/ValueInterface.h",
    "chars": 1644,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/include/values/ValuePrinter.h",
    "chars": 1116,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/ColumnWriter.cpp",
    "chars": 4474,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/ParameterComponent.cpp",
    "chars": 400,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/ParameterManager.cpp",
    "chars": 6875,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/ResultWriter.cpp",
    "chars": 3559,
    "preview": "/*\n\n Copyright (c) 2019 Intel Corp.\n\n This code is licensed under the MIT License.\n\n */\n\n#include \"ResultWriter.h\"\n#incl"
  },
  {
    "path": "framework/shared/src/SLAMBenchConfiguration.cpp",
    "chars": 22457,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/SLAMBenchUI_Pangolin.cpp",
    "chars": 30457,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/dummy_library.cpp",
    "chars": 767,
    "preview": "/*\n\n Copyright (c) 2014 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/io/FrameBuffer.cpp",
    "chars": 1236,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/io/FrameBufferSource.cpp",
    "chars": 345,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/io/FrameFormat.cpp",
    "chars": 615,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/io/FrameSource.cpp",
    "chars": 4935,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/io/InputInterface.cpp",
    "chars": 1648,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/io/InputInterfaceManager.cpp",
    "chars": 3728,
    "preview": "/*\n\n Copyright (c) 2020 University of Manchester.\n Developed in the PAMELA project, EPSRC Programme Grant EP/K008730/1\n\n"
  },
  {
    "path": "framework/shared/src/io/PixelFormat.cpp",
    "chars": 2184,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/io/SLAMFile.cpp",
    "chars": 2637,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/io/SLAMFrame.cpp",
    "chars": 11417,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/io/core/Core.cpp",
    "chars": 1007,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/io/deserialisation/Deserialiser.cpp",
    "chars": 750,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/io/deserialisation/SLAMFileDeserialiser.cpp",
    "chars": 2091,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/io/deserialisation/SLAMFileHeaderDeserialiser.cpp",
    "chars": 1302,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/io/deserialisation/SLAMFrameDeserialiser.cpp",
    "chars": 1685,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/io/deserialisation/SensorCollectionDeserialiser.cpp",
    "chars": 1457,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/io/format/DataFormatter.cpp",
    "chars": 380,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/io/format/PointCloud.cpp",
    "chars": 4104,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/io/openni/ONI2Frame.cpp",
    "chars": 719,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/io/openni/ONI2FrameStream.cpp",
    "chars": 3788,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/io/openni/ONI2InputInterface.cpp",
    "chars": 5955,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/io/openni15/ONI15Frame.cpp",
    "chars": 835,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/io/openni15/ONI15FrameStream.cpp",
    "chars": 2563,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/io/openni15/ONI15InputInterface.cpp",
    "chars": 3975,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/io/realsense/RealSense2Frame.cpp",
    "chars": 711,
    "preview": "/*\n\n Copyright (c) 2020 University of Manchester.\n Developed in the PAMELA project, EPSRC Programme Grant EP/K008730/1\n\n"
  },
  {
    "path": "framework/shared/src/io/realsense/RealSense2FrameStream.cpp",
    "chars": 1459,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  },
  {
    "path": "framework/shared/src/io/realsense/RealSense2InputInterface.cpp",
    "chars": 10285,
    "preview": "/*\n\n Copyright (c) 2017 University of Edinburgh, Imperial College, University of Manchester.\n Developed in the PAMELA pr"
  }
]

// ... and 217 more files (download for full content)

About this extraction

This page contains the full source code of the pamela-project/slambench2 GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 417 files (27.2 MB), approximately 7.1M tokens, and a symbol index with 1021 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!