• librealsense filter class hierachy


    1. rs2::decimation_filter

    https://intelrealsense.github.io/librealsense/doxygen/classrs2_1_1decimation__filter.html

    https://intelrealsense.github.io/librealsense/doxygen/rs__processing_8hpp_source.html

     1      class decimation_filter : public filter
     2      {
     3      public:
     4          decimation_filter() : filter(init(), 1) {}
     5          decimation_filter(float magnitude) : filter(init(), 1)
     6          {
     7              set_option(RS2_OPTION_FILTER_MAGNITUDE, magnitude);
     8          }
     9  
    10          decimation_filter(filter f) : filter(f)
    11          {
    12               rs2_error* e = nullptr;
    13               if (!rs2_is_processing_block_extendable_to(f.get(), RS2_EXTENSION_DECIMATION_FILTER, &e) && !e)
    14               {
    15                   _block.reset();
    16               }
    17               error::handle(e);
    18          }
    19  
    20      private:
    21          friend class context;
    22  
    23          std::shared_ptr<rs2_processing_block> init()
    24          {
    25              rs2_error* e = nullptr;
    26              auto block = std::shared_ptr<rs2_processing_block>(
    27                  rs2_create_decimation_filter_block(&e),
    28                  rs2_delete_processing_block);
    29              error::handle(e);
    30  
    31              // Redirect options API to the processing block
    32              //options::operator=(this);
    33  
    34              return block;
    35          }
    36      };

    2. rs2_create_decimation_filter_block: rs_processing.h, src/rs.cpp

    1 // src/rs.cpp
    2 rs2_processing_block* rs2_create_decimation_filter_block(rs2_error** error) BEGIN_API_CALL
    3 {
    4     auto block = std::make_shared<librealsense::decimation_filter>();
    5 
    6     return new rs2_processing_block{ block };
    7 }
    8 NOARGS_HANDLE_EXCEPTIONS_AND_RETURN(nullptr)

    3. librealsense::decimation_filter: src/proc/decimation-filter.h, src/proc/decimation-filter.cpp

     1 namespace librealsense
     2 {
     3 
     4     class decimation_filter : public stream_filter_processing_block
     5     {
     6     public:
     7         decimation_filter();
     8 
     9     protected:
    10         rs2::frame prepare_target_frame(const rs2::frame& f, const rs2::frame_source& source, rs2_extension tgt_type);
    11 
    12         void decimate_depth(const uint16_t * frame_data_in, uint16_t * frame_data_out,
    13             size_t width_in, size_t height_in, size_t scale);
    14 
    15         void decimate_others(rs2_format format, const void * frame_data_in, void * frame_data_out,
    16             size_t width_in, size_t height_in, size_t scale);
    17         rs2::frame process_frame(const rs2::frame_source& source, const rs2::frame& f) override;
    18 
    19     private:
    20         void    update_output_profile(const rs2::frame& f);
    21 
    22         uint8_t                 _decimation_factor;
    23         uint8_t                 _control_val;
    24         uint8_t                 _patch_size;
    25         uint8_t                 _kernel_size;
    26         rs2::stream_profile     _source_stream_profile;
    27         rs2::stream_profile     _target_stream_profile;
    28         std::map<std::tuple<const rs2_stream_profile*, uint8_t>, rs2::stream_profile> _registered_profiles;
    29         uint16_t                _real_width;        // Number of rows/columns with real datain the decimated image
    30         uint16_t                _real_height;       // Correspond to w,h in the reference code
    31         uint16_t                _padded_width;      // Corresponds to w4/h4 in the reference code
    32         uint16_t                _padded_height;
    33         bool                    _recalc_profile;
    34         bool                    _options_changed;   // Tracking changes imposed by user
    35     };
    36     MAP_EXTENSION(RS2_EXTENSION_DECIMATION_FILTER, librealsense::decimation_filter);
    37 }
     1     rs2::frame decimation_filter::process_frame(const rs2::frame_source& source, const rs2::frame& f)
     2     {
     3         update_output_profile(f);
     4 
     5         auto src = f.as<rs2::video_frame>();
     6         rs2::stream_profile profile = f.get_profile();
     7         rs2_format format = profile.format();
     8         rs2_stream type = profile.stream_type();
     9 
    10         rs2_extension tgt_type;
    11         if (type == RS2_STREAM_COLOR || type == RS2_STREAM_INFRARED)
    12             tgt_type = RS2_EXTENSION_VIDEO_FRAME;
    13         else
    14             tgt_type = f.is<rs2::disparity_frame>() ? RS2_EXTENSION_DISPARITY_FRAME : RS2_EXTENSION_DEPTH_FRAME;
    15 
    16         if (auto tgt = prepare_target_frame(f, source, tgt_type))
    17         {
    18             if (format == RS2_FORMAT_Z16)
    19             {
    20                 decimate_depth(static_cast<const uint16_t*>(src.get_data()),
    21                     static_cast<uint16_t*>(const_cast<void*>(tgt.get_data())),
    22                     src.get_width(), src.get_height(), this->_patch_size);
    23             }
    24             else
    25             {
    26                 decimate_others(format, src.get_data(),
    27                     const_cast<void*>(tgt.get_data()),
    28                     src.get_width(), src.get_height(), this->_patch_size);
    29             }
    30             return tgt;
    31         }
    32         return f;
    33     }
  • 相关阅读:
    Kudu-Impala集成特性
    [转]IIS的各种身份验证详细测试
    [转]The NTLM Authentication Protocol and Security Support Provider
    [转]WxEmojiView
    [转]Redis 数据类型
    [转]a-mongodb-tutorial-using-c-and-asp-net-mvc
    [转]MongoDB 概念解析
    [转]flash.net.Socket
    [转]emailjs-smtp-client
    [转]jquerUI Dialog中隐藏标题栏的关闭"X"按钮
  • 原文地址:https://www.cnblogs.com/imoon22/p/14276867.html
Copyright © 2020-2023  润新知