|
@@ -14,17 +14,81 @@ void color_image_render::render_tex(cv::Size img_size, config_type conf) {
|
|
|
info.mode = TEX_COLOR_ONLY;
|
|
info.mode = TEX_COLOR_ONLY;
|
|
|
info.flip_y = conf.flip_y;
|
|
info.flip_y = conf.flip_y;
|
|
|
info.range = calc_render_range(img_size);
|
|
info.range = calc_render_range(img_size);
|
|
|
|
|
+ info.color.fmt = conf.fmt;
|
|
|
info.color.id = img_tex.id;
|
|
info.color.id = img_tex.id;
|
|
|
|
|
+ if (conf.fmt == COLOR_NV12) { // chroma tex
|
|
|
|
|
+ info.color.id_ext[0] = ext_tex[0].id;
|
|
|
|
|
+ }
|
|
|
info.color.alpha = conf.alpha;
|
|
info.color.alpha = conf.alpha;
|
|
|
render_texture(info);
|
|
render_texture(info);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-void color_image_render::render(obj_name_type name, config_type conf) {
|
|
|
|
|
|
|
+template<typename T>
|
|
|
|
|
+void color_image_render::render_rgb(const image_info_type<T> &info, config_type conf) {
|
|
|
|
|
+ assert(conf.fmt == COLOR_RGB);
|
|
|
|
|
+ img_tex.upload(info, conf.stream);
|
|
|
|
|
+ render_tex(info.size, conf);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+// @formatter:off
|
|
|
|
|
+template void color_image_render::render_rgb<uchar1>(const image_info_u8c1 &, config_type);
|
|
|
|
|
+template void color_image_render::render_rgb<uchar2>(const image_info_u8c2 &, config_type);
|
|
|
|
|
+template void color_image_render::render_rgb<uchar3>(const image_info_u8c3 &, config_type);
|
|
|
|
|
+template void color_image_render::render_rgb<uchar4>(const image_info_u8c4 &, config_type);
|
|
|
|
|
+// @formatter:on
|
|
|
|
|
+
|
|
|
|
|
+void color_image_render::render_rgb(obj_name_type name, config_type conf) {
|
|
|
|
|
+ assert(conf.fmt == COLOR_RGB);
|
|
|
auto img_type = OBJ_TYPE(name);
|
|
auto img_type = OBJ_TYPE(name);
|
|
|
- assert(img_type == typeid(image_u8c3));
|
|
|
|
|
- auto img = OBJ_QUERY(image_u8c3, name);
|
|
|
|
|
|
|
+
|
|
|
|
|
+ auto impl_func = [&](auto V) {
|
|
|
|
|
+ using T = std::remove_cvref_t<decltype(V)>;
|
|
|
|
|
+ if (img_type == typeid(T)) {
|
|
|
|
|
+ auto img = OBJ_QUERY(T, name);
|
|
|
|
|
+ if (img == nullptr) return;
|
|
|
|
|
+ render_rgb(img->as_info(), conf);
|
|
|
|
|
+ }
|
|
|
|
|
+ };
|
|
|
|
|
+ impl_func(image_u8c1());
|
|
|
|
|
+ impl_func(image_u8c2());
|
|
|
|
|
+ impl_func(image_u8c3());
|
|
|
|
|
+ impl_func(image_u8c4());
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void color_image_render::render_nv12(const image_info_u8c1 &img_info, config_type conf) {
|
|
|
|
|
+ assert(conf.fmt == COLOR_NV12);
|
|
|
|
|
+ auto img_size = nv12_size_to_img(img_info.size);
|
|
|
|
|
+
|
|
|
|
|
+ auto luma_img = img_info.sub_image(0, 0, -1, img_size.height);
|
|
|
|
|
+ img_tex.upload(luma_img, conf.stream);
|
|
|
|
|
+ auto chroma_img = img_info.sub_image(img_size.height).cast<uchar2>();
|
|
|
|
|
+ ext_tex[0].upload(chroma_img, conf.stream);
|
|
|
|
|
+
|
|
|
|
|
+ render_tex(img_size, conf);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void color_image_render::render_nv12(obj_name_type name, config_type conf) {
|
|
|
|
|
+ assert(conf.fmt == COLOR_NV12);
|
|
|
|
|
+ assert(OBJ_TYPE(name) == typeid(image_u8c1));
|
|
|
|
|
+ auto img = OBJ_QUERY(image_u8c1, name);
|
|
|
if (img == nullptr) return;
|
|
if (img == nullptr) return;
|
|
|
- render(img->as_info(), conf);
|
|
|
|
|
|
|
+ render_nv12(img->as_info(), conf);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void color_image_render::render(obj_name_type name, config_type conf) {
|
|
|
|
|
+ switch (conf.fmt) {
|
|
|
|
|
+ case COLOR_RGB: {
|
|
|
|
|
+ render_rgb(name, conf);
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ case COLOR_NV12: {
|
|
|
|
|
+ render_nv12(name, conf);
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ default: {
|
|
|
|
|
+ RET_ERROR;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void depth_image_render::render(obj_name_type name, config_type conf) {
|
|
void depth_image_render::render(obj_name_type name, config_type conf) {
|
|
@@ -53,8 +117,9 @@ void depth_image_render::render(obj_name_type name, config_type conf) {
|
|
|
cv::applyColorMap(img_u8.as_mat(), img_color.as_mat(), cv::COLORMAP_TURBO);
|
|
cv::applyColorMap(img_u8.as_mat(), img_color.as_mat(), cv::COLORMAP_TURBO);
|
|
|
|
|
|
|
|
auto c_conf = color_image_render::config_type();
|
|
auto c_conf = color_image_render::config_type();
|
|
|
|
|
+ c_conf.fmt = COLOR_RGB;
|
|
|
c_conf.flip_y = conf.flip_y;
|
|
c_conf.flip_y = conf.flip_y;
|
|
|
c_conf.alpha = conf.alpha;
|
|
c_conf.alpha = conf.alpha;
|
|
|
c_conf.stream = conf.stream;
|
|
c_conf.stream = conf.stream;
|
|
|
- color_render.render(img_color, c_conf);
|
|
|
|
|
|
|
+ color_render.render_rgb(img_color, c_conf);
|
|
|
}
|
|
}
|