Program Listing for File VideoDataset.h

Return to documentation for file (include/mola_input_video/VideoDataset.h)

/*               _
 _ __ ___   ___ | | __ _
| '_ ` _ \ / _ \| |/ _` | Modular Optimization framework for
| | | | | | (_) | | (_| | Localization and mApping (MOLA)
|_| |_| |_|\___/|_|\__,_| https://github.com/MOLAorg/mola

 Copyright (C) 2018-2026 Jose Luis Blanco, University of Almeria,
                         and individual contributors.
 SPDX-License-Identifier: GPL-3.0
 See LICENSE for full license information.
*/

#pragma once

#include <mola_kernel/interfaces/Dataset_UI.h>
#include <mola_kernel/interfaces/RawDataSourceBase.h>
#include <mrpt/hwdrivers/CCameraSensor.h>
#include <mrpt/obs/CObservationImage.h>
#include <mrpt/typemeta/TEnumType.h>

namespace mola
{
enum class InputMode
{
  ImageDirectory,
  VideoFile,
  LiveCamera
};

class VideoDataset : public RawDataSourceBase, public Dataset_UI
{
  DEFINE_MRPT_OBJECT(VideoDataset, mola)

 public:
  VideoDataset();

  void spinOnce() override;

  // Dataset_UI interface:
  size_t datasetUI_size() const override;
  size_t datasetUI_lastQueriedTimestep() const override;
  double datasetUI_playback_speed() const override;
  void   datasetUI_playback_speed(double speed) override;
  bool   datasetUI_paused() const override;
  void   datasetUI_paused(bool paused) override;
  void   datasetUI_teleport(size_t timestep) override;

 protected:
  void initialize_rds(const Yaml& cfg) override;

 private:
  InputMode                           input_mode_ = InputMode::ImageDirectory;
  mrpt::hwdrivers::CCameraSensor::Ptr cam_;

  double                time_warp_scale_ = 1.0;
  bool                  paused_          = false;
  size_t                image_index_     = 0;
  std::optional<size_t> teleport_here_;
  mutable std::mutex    dataset_ui_mtx_;

  std::vector<std::string> image_files_;
  std::string              image_base_dir_;
  mrpt::Clock::time_point  last_play_wallclock_time_;
  double                   last_dataset_time_  = 0;
  double                   image_publish_rate_ = 10.0;  // Hz
  std::string              sensor_label_       = "camera";
  mrpt::img::TCamera       camera_model_;
  mrpt::poses::CPose3D     camera_pose_;
};
}  // namespace mola

MRPT_ENUM_TYPE_BEGIN(mola::InputMode)
MRPT_FILL_ENUM(mola::InputMode::ImageDirectory);
MRPT_FILL_ENUM(mola::InputMode::VideoFile);
MRPT_FILL_ENUM(mola::InputMode::LiveCamera);
MRPT_ENUM_TYPE_END()