void operator()(int size, const rs2::frame& rs_matrix, char* max_matrix) { const auto image = (const uint8_t *)(rs_matrix.get_data()); auto matrix_out = (char*)(max_matrix); std::copy(image, image + size, matrix_out); }
rs2::frame hole_filling_filter::prepare_target_frame(const rs2::frame& f, const rs2::frame_source& source) { // Allocate and copy the content of the input data to the target rs2::frame tgt = source.allocate_video_frame(_target_stream_profile, f, int(_bpp), int(_width), int(_height), int(_stride), _extension_type); memmove(const_cast<void*>(tgt.get_data()), f.get_data(), _current_frm_size_pixels * _bpp); return tgt; }
bool validate_ppf_results(rs2::frame origin_depth, rs2::frame result_depth, const ppf_test_config& reference_data, size_t frame_idx) { std::vector<uint16_t> diff2orig; std::vector<uint16_t> diff2ref; // Basic sanity scenario with no filters applied. // validating domain transform in/out conversion. Requiring input=output bool domain_transform_only = (reference_data.downsample_scale == 1) && (!reference_data.spatial_filter) && (!reference_data.temporal_filter); auto result_profile = result_depth.get_profile().as<rs2::video_stream_profile>(); REQUIRE(result_profile); CAPTURE(result_profile.width()); CAPTURE(result_profile.height()); REQUIRE(result_profile.width() == reference_data.output_res_x); REQUIRE(result_profile.height() == reference_data.output_res_y); auto pixels = result_profile.width()*result_profile.height(); diff2ref.resize(pixels); if (domain_transform_only) diff2orig.resize(pixels); // Pixel-by-pixel comparison of the resulted filtered depth vs data ercorded with external tool auto v1 = reinterpret_cast<const uint16_t*>(result_depth.get_data()); auto v2 = reinterpret_cast<const uint16_t*>(reference_data._output_frames[frame_idx].data()); for (auto i = 0; i < pixels; i++) { uint16_t diff = std::abs(*v1++ - *v2++); diff2ref[i] = diff; } // validating depth<->disparity domain transformation is lostless. if (domain_transform_only) REQUIRE(profile_diffs("./DomainTransform.txt",diff2orig, 0, 0, frame_idx)); // Validate the filters // The differences between the reference code and librealsense implementation are byte-compared below return profile_diffs("./Filterstransform.txt", diff2ref, 0.f, 0, frame_idx); }
rs2::frame yuy2rgb::process_frame(const rs2::frame_source& source, const rs2::frame& f) { auto p = f.get_profile(); if (p.get() != _source_stream_profile.get()) { _source_stream_profile = p; _target_stream_profile = p.clone(p.stream_type(), p.stream_index(), RS2_FORMAT_RGB8); } rs2::frame ret; auto vf = f.as<rs2::video_frame>(); ret = source.allocate_video_frame(_target_stream_profile, f, _traget_bpp, vf.get_width(), vf.get_height(), vf.get_width() * _traget_bpp, RS2_EXTENSION_VIDEO_FRAME); byte* planes[1]; planes[0] = (byte*)ret.get_data(); unpack_yuy2_rgb8(planes, (const byte*)f.get_data(), vf.get_width(), vf.get_height()); return ret; }