You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
3.5 KiB
99 lines
3.5 KiB
// License: Apache 2.0. See LICENSE file in root directory.
|
|
// Copyright(c) 2024 Intel Corporation. All Rights Reserved.
|
|
|
|
#include <librealsense2/rs.hpp>
|
|
#include <string>
|
|
#include "subdevice-model.h"
|
|
#include "processing-block-model.h"
|
|
#include "viewer.h"
|
|
|
|
|
|
namespace rs2
|
|
{
|
|
processing_block_model::processing_block_model(
|
|
subdevice_model* owner,
|
|
const std::string& name,
|
|
std::shared_ptr<rs2::filter> block,
|
|
std::function<rs2::frame(rs2::frame)> invoker,
|
|
std::string& error_message, bool enable)
|
|
: _owner(owner), _name(name), _block(block), _invoker(invoker), _enabled(enable)
|
|
{
|
|
std::stringstream ss;
|
|
ss << "##" << ((owner) ? owner->dev.get_info(RS2_CAMERA_INFO_NAME) : _name)
|
|
<< "/" << ((owner) ? (*owner->s).get_info(RS2_CAMERA_INFO_NAME) : "_")
|
|
<< "/" << (long long)this;
|
|
|
|
if (_owner)
|
|
_full_name = get_device_sensor_name(_owner) + "." + _name;
|
|
else
|
|
_full_name = _name;
|
|
|
|
_enabled = restore_processing_block(_full_name.c_str(),
|
|
block, _enabled);
|
|
|
|
populate_options(ss.str().c_str(), owner, owner ? &owner->_options_invalidated : nullptr, error_message);
|
|
}
|
|
|
|
void processing_block_model::save_to_config_file()
|
|
{
|
|
save_processing_block_to_config_file(_full_name.c_str(), _block, _enabled);
|
|
}
|
|
|
|
void processing_block_model::draw_options( viewer_model & viewer,
|
|
bool update_read_only_options,
|
|
bool is_streaming,
|
|
std::string & error_message )
|
|
{
|
|
for( auto & id_model : options_metadata )
|
|
{
|
|
if( viewer.is_option_skipped( id_model.first ) )
|
|
continue;
|
|
|
|
switch( id_model.first )
|
|
{
|
|
case RS2_OPTION_MIN_DISTANCE:
|
|
case RS2_OPTION_MAX_DISTANCE:
|
|
case RS2_OPTION_HISTOGRAM_EQUALIZATION_ENABLED:
|
|
id_model.second.update_all_fields( error_message, *viewer.not_model );
|
|
break;
|
|
}
|
|
|
|
id_model.second.draw_option( update_read_only_options, is_streaming, error_message, *viewer.not_model );
|
|
}
|
|
}
|
|
|
|
|
|
void processing_block_model::populate_options(const std::string& opt_base_label,
|
|
subdevice_model* model,
|
|
bool* options_invalidated,
|
|
std::string& error_message)
|
|
{
|
|
for( option_value option : _block->get_supported_option_values() )
|
|
{
|
|
options_metadata[option->id] = create_option_model( option,
|
|
opt_base_label,
|
|
model,
|
|
_block,
|
|
model ? &model->_options_invalidated : nullptr,
|
|
error_message );
|
|
}
|
|
}
|
|
|
|
void save_processing_block_to_config_file(const char* name,
|
|
std::shared_ptr<rs2::processing_block> pb, bool enable)
|
|
{
|
|
for (auto opt : pb->get_supported_options())
|
|
{
|
|
auto val = pb->get_option(opt);
|
|
std::string key = name;
|
|
key += ".";
|
|
key += pb->get_option_name(opt);
|
|
config_file::instance().set(key.c_str(), val);
|
|
}
|
|
|
|
std::string key = name;
|
|
key += ".enabled";
|
|
config_file::instance().set(key.c_str(), enable);
|
|
}
|
|
}
|