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.
96 lines
3.6 KiB
96 lines
3.6 KiB
// License: Apache 2.0. See LICENSE file in root directory.
|
|
// Copyright(c) 2018 Intel Corporation. All Rights Reserved.
|
|
|
|
#ifndef __RS_CONVERTER_CONVERTER_PNG_H
|
|
#define __RS_CONVERTER_CONVERTER_PNG_H
|
|
|
|
|
|
// 3rd party header for writing png files
|
|
#define STB_IMAGE_WRITE_IMPLEMENTATION
|
|
#include "stb_image_write.h"
|
|
|
|
#include "../converter.hpp"
|
|
|
|
|
|
namespace rs2 {
|
|
namespace tools {
|
|
namespace converter {
|
|
|
|
class converter_png : public converter_base {
|
|
rs2_stream _streamType;
|
|
std::string _filePath;
|
|
rs2::colorizer _colorizer;
|
|
|
|
public:
|
|
converter_png(const std::string& filePath, rs2_stream streamType = rs2_stream::RS2_STREAM_ANY)
|
|
: _filePath(filePath)
|
|
, _streamType(streamType)
|
|
{
|
|
}
|
|
|
|
std::string name() const override
|
|
{
|
|
return "PNG converter";
|
|
}
|
|
|
|
void convert(rs2::frame& frame) override
|
|
{
|
|
rs2::video_frame videoframe = frame.as<rs2::video_frame>();
|
|
if (!videoframe || !(_streamType == rs2_stream::RS2_STREAM_ANY || videoframe.get_profile().stream_type() == _streamType)) {
|
|
return;
|
|
}
|
|
|
|
if (frames_map_get_and_set(videoframe.get_profile().stream_type(),
|
|
static_cast<rs2::tools::converter::frame_number_t>(videoframe.get_timestamp()))) {
|
|
return;
|
|
}
|
|
|
|
start_worker(
|
|
[this, &frame] {
|
|
rs2::video_frame videoframe = frame.as<rs2::video_frame>();
|
|
|
|
if (videoframe.get_profile().stream_type() == rs2_stream::RS2_STREAM_DEPTH) {
|
|
videoframe = _colorizer.process(videoframe);
|
|
}
|
|
|
|
std::stringstream filename;
|
|
filename << _filePath
|
|
<< "_" << videoframe.get_profile().stream_name()
|
|
<< "_" << std::setprecision(14) << std::fixed << videoframe.get_timestamp()
|
|
<< ".png";
|
|
|
|
std::stringstream metadata_file;
|
|
metadata_file << _filePath
|
|
<< "_" << videoframe.get_profile().stream_name()
|
|
<< "_metadata_" << std::setprecision(14) << std::fixed << videoframe.get_timestamp()
|
|
<< ".txt";
|
|
|
|
std::string filenameS = filename.str();
|
|
std::string metadataS = metadata_file.str();
|
|
|
|
add_sub_worker(
|
|
[filenameS, metadataS, videoframe] {
|
|
stbi_write_png(
|
|
filenameS.c_str()
|
|
, videoframe.get_width()
|
|
, videoframe.get_height()
|
|
, videoframe.get_bytes_per_pixel()
|
|
, videoframe.get_data()
|
|
, videoframe.get_stride_in_bytes()
|
|
);
|
|
|
|
metadata_to_txtfile(videoframe, metadataS);
|
|
});
|
|
|
|
wait_sub_workers();
|
|
});
|
|
}
|
|
};
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
#endif
|