diff --git a/include/web_video_server/h264_streamer.hpp b/include/web_video_server/h264_streamer.hpp index b069353..8783cd1 100644 --- a/include/web_video_server/h264_streamer.hpp +++ b/include/web_video_server/h264_streamer.hpp @@ -9,28 +9,31 @@ namespace web_video_server { - class H264Streamer: public LibavStreamer - { +class H264Streamer : public LibavStreamer +{ public: - H264Streamer(const async_web_server_cpp::HttpRequest & request, - async_web_server_cpp::HttpConnectionPtr connection, - rclcpp::Node::SharedPtr nh); - ~H264Streamer(); + H264Streamer( + const async_web_server_cpp::HttpRequest & request, + async_web_server_cpp::HttpConnectionPtr connection, + rclcpp::Node::SharedPtr nh); + ~H264Streamer(); + protected: - virtual void initializeEncoder(); - std::string preset_; - }; + virtual void initializeEncoder(); + std::string preset_; +}; - class H264StreamerType: public LibavStreamerType - { +class H264StreamerType : public LibavStreamerType +{ public: - H264StreamerType(); - virtual boost::shared_ptr < ImageStreamer > - create_streamer(const async_web_server_cpp::HttpRequest & request, - async_web_server_cpp::HttpConnectionPtr - connection, - rclcpp::Node::SharedPtr nh); - }; + H264StreamerType(); + virtual boost::shared_ptr + create_streamer( + const async_web_server_cpp::HttpRequest & request, + async_web_server_cpp::HttpConnectionPtr + connection, + rclcpp::Node::SharedPtr nh); +}; } diff --git a/include/web_video_server/image_streamer.hpp b/include/web_video_server/image_streamer.hpp index 80219da..7a0b628 100644 --- a/include/web_video_server/image_streamer.hpp +++ b/include/web_video_server/image_streamer.hpp @@ -12,84 +12,88 @@ namespace web_video_server { - class ImageStreamer - { +class ImageStreamer +{ public: - ImageStreamer(const async_web_server_cpp::HttpRequest & request, - async_web_server_cpp::HttpConnectionPtr connection, - rclcpp::Node::SharedPtr nh); + ImageStreamer( + const async_web_server_cpp::HttpRequest & request, + async_web_server_cpp::HttpConnectionPtr connection, + rclcpp::Node::SharedPtr nh); - virtual void start() = 0; - virtual ~ImageStreamer(); + virtual void start() = 0; + virtual ~ImageStreamer(); - bool isInactive() - { - return inactive_; - } + bool isInactive() + { + return inactive_; + } /** * Restreams the last received image frame if older than max_age. */ - virtual void restreamFrame(double max_age) = 0; + virtual void restreamFrame(double max_age) = 0; + + std::string getTopic() + { + return topic_; + } - std::string getTopic() - { - return topic_; - } protected: - async_web_server_cpp::HttpConnectionPtr connection_; - async_web_server_cpp::HttpRequest request_; - rclcpp::Node::SharedPtr nh_; - bool inactive_; - image_transport::Subscriber image_sub_; - std::string topic_; - }; + async_web_server_cpp::HttpConnectionPtr connection_; + async_web_server_cpp::HttpRequest request_; + rclcpp::Node::SharedPtr nh_; + bool inactive_; + image_transport::Subscriber image_sub_; + std::string topic_; +}; - class ImageTransportImageStreamer: public ImageStreamer - { +class ImageTransportImageStreamer : public ImageStreamer +{ public: - ImageTransportImageStreamer(const async_web_server_cpp::HttpRequest & request, - async_web_server_cpp::HttpConnectionPtr connection, - rclcpp::Node::SharedPtr nh); - virtual ~ImageTransportImageStreamer(); + ImageTransportImageStreamer( + const async_web_server_cpp::HttpRequest & request, + async_web_server_cpp::HttpConnectionPtr connection, + rclcpp::Node::SharedPtr nh); + virtual ~ImageTransportImageStreamer(); - virtual void start(); + virtual void start(); protected: - virtual void sendImage(const cv::Mat &, const rclcpp::Time & time) = 0; - virtual void restreamFrame(double max_age); - virtual void initialize(const cv::Mat &); + virtual void sendImage(const cv::Mat &, const rclcpp::Time & time) = 0; + virtual void restreamFrame(double max_age); + virtual void initialize(const cv::Mat &); - image_transport::Subscriber image_sub_; - int output_width_; - int output_height_; - bool invert_; - std::string default_transport_; - std::string qos_profile_name_; + image_transport::Subscriber image_sub_; + int output_width_; + int output_height_; + bool invert_; + std::string default_transport_; + std::string qos_profile_name_; - rclcpp::Time last_frame; - cv::Mat output_size_image; - boost::mutex send_mutex_; + rclcpp::Time last_frame; + cv::Mat output_size_image; + boost::mutex send_mutex_; private: - image_transport::ImageTransport it_; - bool initialized_; + image_transport::ImageTransport it_; + bool initialized_; - void imageCallback(const sensor_msgs::msg::Image::ConstSharedPtr & msg); - }; + void imageCallback(const sensor_msgs::msg::Image::ConstSharedPtr & msg); +}; - class ImageStreamerType - { +class ImageStreamerType +{ public: - virtual boost::shared_ptr < ImageStreamer > - create_streamer(const async_web_server_cpp::HttpRequest & request, - async_web_server_cpp::HttpConnectionPtr - connection, - rclcpp::Node::SharedPtr nh) = 0; - - virtual std::string create_viewer(const async_web_server_cpp::HttpRequest & request) = 0; - }; + virtual boost::shared_ptr + create_streamer( + const async_web_server_cpp::HttpRequest & request, + async_web_server_cpp::HttpConnectionPtr + connection, + rclcpp::Node::SharedPtr nh) = 0; + + virtual std::string create_viewer(const async_web_server_cpp::HttpRequest & request) = 0; +}; } diff --git a/include/web_video_server/jpeg_streamers.hpp b/include/web_video_server/jpeg_streamers.hpp index 5110acb..c3c5165 100644 --- a/include/web_video_server/jpeg_streamers.hpp +++ b/include/web_video_server/jpeg_streamers.hpp @@ -11,45 +11,50 @@ namespace web_video_server { - class MjpegStreamer: public ImageTransportImageStreamer - { +class MjpegStreamer : public ImageTransportImageStreamer +{ public: - MjpegStreamer(const async_web_server_cpp::HttpRequest & request, - async_web_server_cpp::HttpConnectionPtr connection, - rclcpp::Node::SharedPtr nh); - ~MjpegStreamer(); + MjpegStreamer( + const async_web_server_cpp::HttpRequest & request, + async_web_server_cpp::HttpConnectionPtr connection, + rclcpp::Node::SharedPtr nh); + ~MjpegStreamer(); + protected: - virtual void sendImage(const cv::Mat &, const rclcpp::Time & time); + virtual void sendImage(const cv::Mat &, const rclcpp::Time & time); private: - MultipartStream stream_; - int quality_; - }; + MultipartStream stream_; + int quality_; +}; - class MjpegStreamerType: public ImageStreamerType - { +class MjpegStreamerType : public ImageStreamerType +{ public: - boost::shared_ptr < ImageStreamer > - create_streamer(const async_web_server_cpp::HttpRequest & request, - async_web_server_cpp::HttpConnectionPtr - connection, - rclcpp::Node::SharedPtr nh); - std::string create_viewer(const async_web_server_cpp::HttpRequest & request); - }; - - class JpegSnapshotStreamer: public ImageTransportImageStreamer - { + boost::shared_ptr + create_streamer( + const async_web_server_cpp::HttpRequest & request, + async_web_server_cpp::HttpConnectionPtr + connection, + rclcpp::Node::SharedPtr nh); + std::string create_viewer(const async_web_server_cpp::HttpRequest & request); +}; + +class JpegSnapshotStreamer : public ImageTransportImageStreamer +{ public: - JpegSnapshotStreamer(const async_web_server_cpp::HttpRequest & request, - async_web_server_cpp::HttpConnectionPtr connection, - rclcpp::Node::SharedPtr nh); - ~JpegSnapshotStreamer(); + JpegSnapshotStreamer( + const async_web_server_cpp::HttpRequest & request, + async_web_server_cpp::HttpConnectionPtr connection, + rclcpp::Node::SharedPtr nh); + ~JpegSnapshotStreamer(); + protected: - virtual void sendImage(const cv::Mat &, const rclcpp::Time & time); + virtual void sendImage(const cv::Mat &, const rclcpp::Time & time); private: - int quality_; - }; + int quality_; +}; } diff --git a/include/web_video_server/libav_streamer.hpp b/include/web_video_server/libav_streamer.hpp index 4b53fdd..4f811ac 100644 --- a/include/web_video_server/libav_streamer.hpp +++ b/include/web_video_server/libav_streamer.hpp @@ -21,65 +21,68 @@ extern "C" namespace web_video_server { - class LibavStreamer: public ImageTransportImageStreamer - { +class LibavStreamer : public ImageTransportImageStreamer +{ public: - LibavStreamer(const async_web_server_cpp::HttpRequest & request, - async_web_server_cpp::HttpConnectionPtr connection, - rclcpp::Node::SharedPtr nh, const std::string & format_name, - const std::string & codec_name, - const std::string & content_type); + LibavStreamer( + const async_web_server_cpp::HttpRequest & request, + async_web_server_cpp::HttpConnectionPtr connection, + rclcpp::Node::SharedPtr nh, const std::string & format_name, + const std::string & codec_name, + const std::string & content_type); - ~LibavStreamer(); + ~LibavStreamer(); protected: - virtual void initializeEncoder(); - virtual void sendImage(const cv::Mat &, const rclcpp::Time & time); - virtual void initialize(const cv::Mat &); - AVOutputFormat output_format_; - AVFormatContext * format_context_; - const AVCodec * codec_; - AVCodecContext * codec_context_; - AVStream * video_stream_; + virtual void initializeEncoder(); + virtual void sendImage(const cv::Mat &, const rclcpp::Time & time); + virtual void initialize(const cv::Mat &); + AVOutputFormat output_format_; + AVFormatContext * format_context_; + const AVCodec * codec_; + AVCodecContext * codec_context_; + AVStream * video_stream_; - AVDictionary * opt_; // container format options + AVDictionary * opt_; // container format options private: - AVFrame * frame_; - struct SwsContext * sws_context_; - rclcpp::Time first_image_timestamp_; - boost::mutex encode_mutex_; - - std::string format_name_; - std::string codec_name_; - std::string content_type_; - int bitrate_; - int qmin_; - int qmax_; - int gop_; - - uint8_t * io_buffer_; // custom IO buffer - }; - - class LibavStreamerType: public ImageStreamerType - { + AVFrame * frame_; + struct SwsContext * sws_context_; + rclcpp::Time first_image_timestamp_; + boost::mutex encode_mutex_; + + std::string format_name_; + std::string codec_name_; + std::string content_type_; + int bitrate_; + int qmin_; + int qmax_; + int gop_; + + uint8_t * io_buffer_; // custom IO buffer +}; + +class LibavStreamerType : public ImageStreamerType +{ public: - LibavStreamerType(const std::string & format_name, const std::string & codec_name, - const std::string & content_type); + LibavStreamerType( + const std::string & format_name, const std::string & codec_name, + const std::string & content_type); - boost::shared_ptr < ImageStreamer > - create_streamer(const async_web_server_cpp::HttpRequest & request, - async_web_server_cpp::HttpConnectionPtr - connection, - rclcpp::Node::SharedPtr nh); + boost::shared_ptr + create_streamer( + const async_web_server_cpp::HttpRequest & request, + async_web_server_cpp::HttpConnectionPtr + connection, + rclcpp::Node::SharedPtr nh); - std::string create_viewer(const async_web_server_cpp::HttpRequest & request); + std::string create_viewer(const async_web_server_cpp::HttpRequest & request); private: - const std::string format_name_; - const std::string codec_name_; - const std::string content_type_; - }; + const std::string format_name_; + const std::string codec_name_; + const std::string content_type_; +}; } diff --git a/include/web_video_server/multipart_stream.hpp b/include/web_video_server/multipart_stream.hpp index 33bef0b..21135d1 100644 --- a/include/web_video_server/multipart_stream.hpp +++ b/include/web_video_server/multipart_stream.hpp @@ -9,39 +9,40 @@ namespace web_video_server { - struct PendingFooter - { - rclcpp::Time timestamp; - std::weak_ptr < std::string > contents; - }; +struct PendingFooter +{ + rclcpp::Time timestamp; + std::weak_ptr contents; +}; - class MultipartStream { +class MultipartStream { public: - MultipartStream(std::function < rclcpp::Time() > get_now, - async_web_server_cpp::HttpConnectionPtr & connection, - const std::string & boundry = "boundarydonotcross", - std::size_t max_queue_size = 1); - - void sendInitialHeader(); - void sendPartHeader(const rclcpp::Time & time, const std::string & type, size_t payload_size); - void sendPartFooter(const rclcpp::Time & time); - void sendPartAndClear( - const rclcpp::Time & time, const std::string & type, - std::vector < unsigned char > &data); - void sendPart( - const rclcpp::Time & time, const std::string & type, const boost::asio::const_buffer & buffer, - async_web_server_cpp::HttpConnection::ResourcePtr resource); + MultipartStream( + std::function get_now, + async_web_server_cpp::HttpConnectionPtr & connection, + const std::string & boundry = "boundarydonotcross", + std::size_t max_queue_size = 1); + + void sendInitialHeader(); + void sendPartHeader(const rclcpp::Time & time, const std::string & type, size_t payload_size); + void sendPartFooter(const rclcpp::Time & time); + void sendPartAndClear( + const rclcpp::Time & time, const std::string & type, + std::vector & data); + void sendPart( + const rclcpp::Time & time, const std::string & type, const boost::asio::const_buffer & buffer, + async_web_server_cpp::HttpConnection::ResourcePtr resource); private: - bool isBusy(); + bool isBusy(); private: - std::function < rclcpp::Time() > get_now_; - const std::size_t max_queue_size_; - async_web_server_cpp::HttpConnectionPtr connection_; - std::string boundry_; - std::queue < PendingFooter > pending_footers_; - }; + std::function get_now_; + const std::size_t max_queue_size_; + async_web_server_cpp::HttpConnectionPtr connection_; + std::string boundry_; + std::queue pending_footers_; +}; } diff --git a/include/web_video_server/png_streamers.hpp b/include/web_video_server/png_streamers.hpp index f965e32..cb330d0 100644 --- a/include/web_video_server/png_streamers.hpp +++ b/include/web_video_server/png_streamers.hpp @@ -11,45 +11,50 @@ namespace web_video_server { - class PngStreamer: public ImageTransportImageStreamer - { +class PngStreamer : public ImageTransportImageStreamer +{ public: - PngStreamer(const async_web_server_cpp::HttpRequest & request, - async_web_server_cpp::HttpConnectionPtr connection, - rclcpp::Node::SharedPtr nh); - ~PngStreamer(); + PngStreamer( + const async_web_server_cpp::HttpRequest & request, + async_web_server_cpp::HttpConnectionPtr connection, + rclcpp::Node::SharedPtr nh); + ~PngStreamer(); + protected: - virtual void sendImage(const cv::Mat &, const rclcpp::Time & time); + virtual void sendImage(const cv::Mat &, const rclcpp::Time & time); private: - MultipartStream stream_; - int quality_; - }; + MultipartStream stream_; + int quality_; +}; - class PngStreamerType: public ImageStreamerType - { +class PngStreamerType : public ImageStreamerType +{ public: - boost::shared_ptr < ImageStreamer > - create_streamer(const async_web_server_cpp::HttpRequest & request, - async_web_server_cpp::HttpConnectionPtr - connection, - rclcpp::Node::SharedPtr nh); - std::string create_viewer(const async_web_server_cpp::HttpRequest & request); - }; - - class PngSnapshotStreamer: public ImageTransportImageStreamer - { + boost::shared_ptr + create_streamer( + const async_web_server_cpp::HttpRequest & request, + async_web_server_cpp::HttpConnectionPtr + connection, + rclcpp::Node::SharedPtr nh); + std::string create_viewer(const async_web_server_cpp::HttpRequest & request); +}; + +class PngSnapshotStreamer : public ImageTransportImageStreamer +{ public: - PngSnapshotStreamer(const async_web_server_cpp::HttpRequest & request, - async_web_server_cpp::HttpConnectionPtr connection, - rclcpp::Node::SharedPtr nh); - ~PngSnapshotStreamer(); + PngSnapshotStreamer( + const async_web_server_cpp::HttpRequest & request, + async_web_server_cpp::HttpConnectionPtr connection, + rclcpp::Node::SharedPtr nh); + ~PngSnapshotStreamer(); + protected: - virtual void sendImage(const cv::Mat &, const rclcpp::Time & time); + virtual void sendImage(const cv::Mat &, const rclcpp::Time & time); private: - int quality_; - }; + int quality_; +}; } diff --git a/include/web_video_server/ros_compressed_streamer.hpp b/include/web_video_server/ros_compressed_streamer.hpp index 2fa62c5..7b920c6 100644 --- a/include/web_video_server/ros_compressed_streamer.hpp +++ b/include/web_video_server/ros_compressed_streamer.hpp @@ -10,41 +10,43 @@ namespace web_video_server { - class RosCompressedStreamer: public ImageStreamer - { +class RosCompressedStreamer : public ImageStreamer +{ public: - RosCompressedStreamer(const async_web_server_cpp::HttpRequest & request, - async_web_server_cpp::HttpConnectionPtr connection, - rclcpp::Node::SharedPtr nh); - ~RosCompressedStreamer(); - virtual void start(); - virtual void restreamFrame(double max_age); + RosCompressedStreamer( + const async_web_server_cpp::HttpRequest & request, + async_web_server_cpp::HttpConnectionPtr connection, + rclcpp::Node::SharedPtr nh); + ~RosCompressedStreamer(); + virtual void start(); + virtual void restreamFrame(double max_age); protected: - virtual void sendImage( - const sensor_msgs::msg::CompressedImage::ConstSharedPtr msg, - const rclcpp::Time & time); + virtual void sendImage( + const sensor_msgs::msg::CompressedImage::ConstSharedPtr msg, + const rclcpp::Time & time); private: - void imageCallback(const sensor_msgs::msg::CompressedImage::ConstSharedPtr msg); - MultipartStream stream_; - rclcpp::Subscription < sensor_msgs::msg::CompressedImage > ::SharedPtr image_sub_; - rclcpp::Time last_frame; - sensor_msgs::msg::CompressedImage::ConstSharedPtr last_msg; - boost::mutex send_mutex_; - std::string qos_profile_name_; - }; - - class RosCompressedStreamerType: public ImageStreamerType - { + void imageCallback(const sensor_msgs::msg::CompressedImage::ConstSharedPtr msg); + MultipartStream stream_; + rclcpp::Subscription::SharedPtr image_sub_; + rclcpp::Time last_frame; + sensor_msgs::msg::CompressedImage::ConstSharedPtr last_msg; + boost::mutex send_mutex_; + std::string qos_profile_name_; +}; + +class RosCompressedStreamerType : public ImageStreamerType +{ public: - boost::shared_ptr < ImageStreamer > - create_streamer(const async_web_server_cpp::HttpRequest & request, - async_web_server_cpp::HttpConnectionPtr - connection, - rclcpp::Node::SharedPtr nh); - std::string create_viewer(const async_web_server_cpp::HttpRequest & request); - }; + boost::shared_ptr + create_streamer( + const async_web_server_cpp::HttpRequest & request, + async_web_server_cpp::HttpConnectionPtr + connection, + rclcpp::Node::SharedPtr nh); + std::string create_viewer(const async_web_server_cpp::HttpRequest & request); +}; } diff --git a/include/web_video_server/utils.hpp b/include/web_video_server/utils.hpp index 6a70629..f2b291b 100644 --- a/include/web_video_server/utils.hpp +++ b/include/web_video_server/utils.hpp @@ -12,6 +12,6 @@ namespace web_video_server * @param name The name of the QoS profile name. * @return An optional containing the matching QoS profile. */ - std::optional < rmw_qos_profile_t > get_qos_profile_from_name(const std::string name); +std::optional get_qos_profile_from_name(const std::string name); } // namespace web_video_server diff --git a/include/web_video_server/vp8_streamer.hpp b/include/web_video_server/vp8_streamer.hpp index 5eb2c44..2cf0991 100644 --- a/include/web_video_server/vp8_streamer.hpp +++ b/include/web_video_server/vp8_streamer.hpp @@ -45,29 +45,33 @@ namespace web_video_server { - class Vp8Streamer: public LibavStreamer - { +class Vp8Streamer : public LibavStreamer +{ public: - Vp8Streamer(const async_web_server_cpp::HttpRequest & request, - async_web_server_cpp::HttpConnectionPtr connection, - rclcpp::Node::SharedPtr nh); - ~Vp8Streamer(); + Vp8Streamer( + const async_web_server_cpp::HttpRequest & request, + async_web_server_cpp::HttpConnectionPtr connection, + rclcpp::Node::SharedPtr nh); + ~Vp8Streamer(); + protected: - virtual void initializeEncoder(); + virtual void initializeEncoder(); + private: - std::string quality_; - }; + std::string quality_; +}; - class Vp8StreamerType: public LibavStreamerType - { +class Vp8StreamerType : public LibavStreamerType +{ public: - Vp8StreamerType(); - virtual boost::shared_ptr < ImageStreamer > - create_streamer(const async_web_server_cpp::HttpRequest & request, - async_web_server_cpp::HttpConnectionPtr - connection, - rclcpp::Node::SharedPtr nh); - }; + Vp8StreamerType(); + virtual boost::shared_ptr + create_streamer( + const async_web_server_cpp::HttpRequest & request, + async_web_server_cpp::HttpConnectionPtr + connection, + rclcpp::Node::SharedPtr nh); +}; } diff --git a/include/web_video_server/vp9_streamer.hpp b/include/web_video_server/vp9_streamer.hpp index 62654d0..ee83581 100644 --- a/include/web_video_server/vp9_streamer.hpp +++ b/include/web_video_server/vp9_streamer.hpp @@ -9,27 +9,30 @@ namespace web_video_server { - class Vp9Streamer: public LibavStreamer - { +class Vp9Streamer : public LibavStreamer +{ public: - Vp9Streamer(const async_web_server_cpp::HttpRequest & request, - async_web_server_cpp::HttpConnectionPtr connection, - rclcpp::Node::SharedPtr nh); - ~Vp9Streamer(); + Vp9Streamer( + const async_web_server_cpp::HttpRequest & request, + async_web_server_cpp::HttpConnectionPtr connection, + rclcpp::Node::SharedPtr nh); + ~Vp9Streamer(); + protected: - virtual void initializeEncoder(); - }; + virtual void initializeEncoder(); +}; - class Vp9StreamerType: public LibavStreamerType - { +class Vp9StreamerType : public LibavStreamerType +{ public: - Vp9StreamerType(); - virtual boost::shared_ptr < ImageStreamer > - create_streamer(const async_web_server_cpp::HttpRequest & request, - async_web_server_cpp::HttpConnectionPtr - connection, - rclcpp::Node::SharedPtr nh); - }; + Vp9StreamerType(); + virtual boost::shared_ptr + create_streamer( + const async_web_server_cpp::HttpRequest & request, + async_web_server_cpp::HttpConnectionPtr + connection, + rclcpp::Node::SharedPtr nh); +}; } diff --git a/include/web_video_server/web_video_server.hpp b/include/web_video_server/web_video_server.hpp index bc86bab..f4fbb8b 100644 --- a/include/web_video_server/web_video_server.hpp +++ b/include/web_video_server/web_video_server.hpp @@ -16,60 +16,60 @@ namespace web_video_server * @class WebVideoServer * @brief */ - class WebVideoServer - { +class WebVideoServer +{ public: /** * @brief Constructor * @return */ - WebVideoServer(rclcpp::Node::SharedPtr & node); + WebVideoServer(rclcpp::Node::SharedPtr & node); /** * @brief Destructor - Cleans up */ - virtual ~WebVideoServer(); + virtual ~WebVideoServer(); /** * @brief Starts the server and spins */ - void spin(); + void spin(); - void setup_cleanup_inactive_streams(); + void setup_cleanup_inactive_streams(); - bool handle_stream( - const async_web_server_cpp::HttpRequest & request, - async_web_server_cpp::HttpConnectionPtr connection, const char * begin, const char * end); + bool handle_stream( + const async_web_server_cpp::HttpRequest & request, + async_web_server_cpp::HttpConnectionPtr connection, const char * begin, const char * end); - bool handle_stream_viewer( - const async_web_server_cpp::HttpRequest & request, - async_web_server_cpp::HttpConnectionPtr connection, const char * begin, const char * end); + bool handle_stream_viewer( + const async_web_server_cpp::HttpRequest & request, + async_web_server_cpp::HttpConnectionPtr connection, const char * begin, const char * end); - bool handle_snapshot( - const async_web_server_cpp::HttpRequest & request, - async_web_server_cpp::HttpConnectionPtr connection, const char * begin, const char * end); + bool handle_snapshot( + const async_web_server_cpp::HttpRequest & request, + async_web_server_cpp::HttpConnectionPtr connection, const char * begin, const char * end); - bool handle_list_streams( - const async_web_server_cpp::HttpRequest & request, - async_web_server_cpp::HttpConnectionPtr connection, const char * begin, const char * end); + bool handle_list_streams( + const async_web_server_cpp::HttpRequest & request, + async_web_server_cpp::HttpConnectionPtr connection, const char * begin, const char * end); private: - void restreamFrames(double max_age); - void cleanup_inactive_streams(); + void restreamFrames(double max_age); + void cleanup_inactive_streams(); - rclcpp::Node::SharedPtr node_; - rclcpp::WallTimer < rclcpp::VoidCallbackType > ::SharedPtr cleanup_timer_; - int ros_threads_; - double publish_rate_; - int port_; - std::string address_; - boost::shared_ptr < async_web_server_cpp::HttpServer > server_; - async_web_server_cpp::HttpRequestHandlerGroup handler_group_; + rclcpp::Node::SharedPtr node_; + rclcpp::WallTimer::SharedPtr cleanup_timer_; + int ros_threads_; + double publish_rate_; + int port_; + std::string address_; + boost::shared_ptr server_; + async_web_server_cpp::HttpRequestHandlerGroup handler_group_; - std::vector < boost::shared_ptr < ImageStreamer >> image_subscribers_; - std::map < std::string, boost::shared_ptr < ImageStreamerType >> stream_types_; - boost::mutex subscriber_mutex_; - }; + std::vector> image_subscribers_; + std::map> stream_types_; + boost::mutex subscriber_mutex_; +}; }