Skip to content

Commit

Permalink
Merge pull request #194 from fixstars/feature/opencv-explicit-linking
Browse files Browse the repository at this point in the history
Feature/opencv explicit linking
  • Loading branch information
iitaku authored Jan 12, 2024
2 parents 7fc8e27 + a624182 commit 02f9c6d
Show file tree
Hide file tree
Showing 25 changed files with 3,093 additions and 455 deletions.
35 changes: 20 additions & 15 deletions .github/workflows/linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,24 +26,29 @@ jobs:
- name: Setup dependencies
shell: bash
run: |
sudo apt-get update
sudo apt-get install -y curl cmake build-essential libopencv-dev zlib1g-dev
sudo apt-get clean
sudo rm -rf /var/lib/apt/lists/*
mkdir ${HOME}/halide
curl -L https://github.com/halide/Halide/releases/download/v16.0.0/Halide-16.0.0-x86-64-linux-1e963ff817ef0968cc25d811a25a7350c8953ee6.tar.gz | tar zx -C ${HOME}/halide --strip-components 1
find ${HOME}/halide -type d | xargs chmod 755
sudo cp -r ${HOME}/halide/* /usr/
mkdir ${HOME}/onnxruntime
curl -L https://github.com/microsoft/onnxruntime/releases/download/v1.16.3/onnxruntime-linux-x64-1.16.3.tgz | tar zx -C ${HOME}/onnxruntime --strip-components 1
find ${HOME}/onnxruntime -type d | xargs chmod 755
sudo cp -r ${HOME}/onnxruntime/* /usr/
sudo apt-get update
sudo apt-get install -y curl cmake build-essential libopencv-dev
sudo apt-get clean
sudo rm -rf /var/lib/apt/lists/*
# Halide
mkdir ${HOME}/halide
curl -L https://github.com/halide/Halide/releases/download/v16.0.0/Halide-16.0.0-x86-64-linux-1e963ff817ef0968cc25d811a25a7350c8953ee6.tar.gz | tar zx -C ${HOME}/halide --strip-components 1
find ${HOME}/halide -type d | xargs chmod 755
sudo cp -r ${HOME}/halide/* /usr/
# ONNXRuntime
mkdir ${HOME}/onnxruntime
curl -L https://github.com/microsoft/onnxruntime/releases/download/v1.16.3/onnxruntime-linux-x64-1.16.3.tgz | tar zx -C ${HOME}/onnxruntime --strip-components 1
find ${HOME}/onnxruntime -type d | xargs chmod 755
sudo cp -r ${HOME}/onnxruntime/* /usr/
# zlib, libjpeg, libpng
vcpkg install zlib libjpeg-turbo libpng
- name: Configure
shell: bash
run: cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE -D ION_BUILD_TEST=ON -D ION_BUILD_EXAMPLE=ON $GITHUB_WORKSPACE
run: cmake -D CMAKE_TOOLCHAIN_FILE=${VCPKG_INSTALLATION_ROOT}/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=$BUILD_TYPE -D ION_BUILD_TEST=ON -D ION_BUILD_EXAMPLE=ON $GITHUB_WORKSPACE

- name: Build
shell: bash
Expand Down
19 changes: 13 additions & 6 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,22 @@ jobs:
run: |
# Packages
sudo apt-get update
sudo apt-get install -y doxygen curl build-essential zlib1g-dev
sudo apt-get install -y doxygen curl build-essential
sudo apt-get clean
sudo rm -rf /var/lib/apt/lists/*
- name: Download Halide package
run: |
mkdir ${HOME}/Halide
curl -L https://github.com/halide/Halide/releases/download/v16.0.0/Halide-16.0.0-x86-64-linux-1e963ff817ef0968cc25d811a25a7350c8953ee6.tar.gz | tar zx -C ${HOME}/Halide --strip-components 1
find ${HOME}/Halide -type d | xargs chmod 755
# Halide
mkdir ${HOME}/Halide
curl -L https://github.com/halide/Halide/releases/download/v16.0.0/Halide-16.0.0-x86-64-linux-1e963ff817ef0968cc25d811a25a7350c8953ee6.tar.gz | tar zx -C ${HOME}/Halide --strip-components 1
find ${HOME}/Halide -type d | xargs chmod 755
# zlib, libjpeg, libpng
vcpkg install zlib libjpeg-turbo libpng
- name: Configure
run: cmake -D CMAKE_BUILD_TYPE=Release -D ION_BUILD_TEST=OFF -D ION_BUILD_EXAMPLE=OFF -D ION_BUNDLE_HALIDE=ON -D HalideHelpers_DIR=${HOME}/Halide/lib/cmake/HalideHelpers -D Halide_DIR=${HOME}/Halide/lib/cmake/Halide $GITHUB_WORKSPACE
run: cmake -D CMAKE_TOOLCHAIN_FILE=${VCPKG_INSTALLATION_ROOT}/scripts/buildsystems/vcpkg.cmake -D CMAKE_BUILD_TYPE=Release -D ION_BUILD_TEST=OFF -D ION_BUILD_EXAMPLE=OFF -D ION_BUNDLE_HALIDE=ON -D HalideHelpers_DIR=${HOME}/Halide/lib/cmake/HalideHelpers -D Halide_DIR=${HOME}/Halide/lib/cmake/Halide $GITHUB_WORKSPACE

- name: Build
run: cmake --build . --config Release --target package
Expand Down Expand Up @@ -65,9 +69,12 @@ jobs:
rm Halide.zip
mv Halide*/* ${HOME}/Halide
# zlib, libjpeg, libpng
vcpkg install zlib:x64-windows-static libjpeg-turbo:x64-windows-static libpng:x64-windows-static
- name: Configure
shell: bash
run: cmake -G "Visual Studio 16 2019" -A x64 -D ION_BUILD_DOC=OFF -D ION_BUILD_TEST=OFF -D ION_BUILD_EXAMPLE=OFF -D ION_BUNDLE_HALIDE=ON -D HalideHelpers_DIR=${HOME}/Halide/lib/cmake/HalideHelpers -D Halide_DIR=${HOME}/Halide/lib/cmake/Halide $GITHUB_WORKSPACE
run: cmake -G "Visual Studio 16 2019" -A x64 -D VCPKG_TARGET_TRIPLET=x64-windows-static -D CMAKE_TOOLCHAIN_FILE=${VCPKG_INSTALLATION_ROOT}/scripts/buildsystems/vcpkg.cmake -D ION_BUILD_DOC=OFF -D ION_BUILD_TEST=OFF -D ION_BUILD_EXAMPLE=OFF -D ION_BUNDLE_HALIDE=ON -D HalideHelpers_DIR=${HOME}/Halide/lib/cmake/HalideHelpers -D Halide_DIR=${HOME}/Halide/lib/cmake/Halide $GITHUB_WORKSPACE

- name: Build
shell: bash
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,12 @@ jobs:
rm Halide.zip
mv Halide*/* ${HOME}/Halide
# zlib, libjpeg, libpng
vcpkg install zlib:x64-windows-static libjpeg-turbo:x64-windows-static libpng:x64-windows-static
- name: Configure
shell: bash
run: cmake -G "Visual Studio 16 2019" -A x64 -D ION_BUILD_TEST=ON -D ION_BUILD_EXAMPLE=ON -D HalideHelpers_DIR=${HOME}/Halide/lib/cmake/HalideHelpers -D Halide_DIR=${HOME}/Halide/lib/cmake/Halide $GITHUB_WORKSPACE
run: cmake -G "Visual Studio 16 2019" -A x64 -D VCPKG_TARGET_TRIPLET=x64-windows-static -D CMAKE_TOOLCHAIN_FILE=${VCPKG_INSTALLATION_ROOT}/scripts/buildsystems/vcpkg.cmake -D ION_BUILD_TEST=ON -D ION_BUILD_EXAMPLE=ON -D HalideHelpers_DIR=${HOME}/Halide/lib/cmake/HalideHelpers -D Halide_DIR=${HOME}/Halide/lib/cmake/Halide $GITHUB_WORKSPACE

- name: Build
shell: bash
Expand Down
51 changes: 24 additions & 27 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ project(ion-kit LANGUAGES C CXX)
option(ION_BUILD_DOC "Build documents." OFF)
option(ION_BUILD_TEST "Enable to build tests" ON)
option(ION_BUILD_EXAMPLE "Enable to build examples" ON)
option(ION_BUNDLE_HALIDE "Enable to bundle Halide binary into package" OFF)
option(ION_ENABLE_HALIDE_FPGA_BACKEND "Enable to Halide FPGA backend" OFF)

#
Expand Down Expand Up @@ -146,32 +145,30 @@ install(FILES
DESTINATION license)

# Halide
if (ION_BUNDLE_HALIDE)
set(HALIDE_ROOT ${Halide_DIR}/../../..)

file(GLOB HALIDE_HEADERS ${HALIDE_ROOT}/include/Halide*.h ${HALIDE_ROOT}/include/wasm*.h)
install(FILES ${HALIDE_HEADERS} DESTINATION include)

file(GLOB HALIDE_BINS
${HALIDE_ROOT}/bin/featurization_to_sample*
${HALIDE_ROOT}/bin/get_host_target*
${HALIDE_ROOT}/bin/retrain_cost_model*
${HALIDE_ROOT}/bin/weightsdir_to_weightsfile*)
install(FILES ${HALIDE_BINS} DESTINATION bin)

install(DIRECTORY ${HALIDE_ROOT}/lib/cmake/Halide DESTINATION lib/cmake/)
if (EXISTS ${HALIDE_ROOT}/lib/cmake/HalideHelpers)
install(DIRECTORY ${HALIDE_ROOT}/lib/cmake/HalideHelpers DESTINATION lib/cmake/)
endif()
if (UNIX)
file(GLOB HALIDE_LIBRARIES ${HALIDE_ROOT}/lib/libHalide*)
install(FILES ${HALIDE_LIBRARIES} DESTINATION lib)
file(GLOB HALIDE_LIBRARIES ${HALIDE_ROOT}/lib/libautoschedule*)
install(FILES ${HALIDE_LIBRARIES} DESTINATION lib)
else()
install(FILES ${HALIDE_ROOT}/bin/Release/Halide.dll DESTINATION bin)
install(FILES ${HALIDE_ROOT}/lib/Release/Halide.lib DESTINATION lib)
endif()
set(HALIDE_ROOT ${Halide_DIR}/../../..)

file(GLOB HALIDE_HEADERS ${HALIDE_ROOT}/include/Halide*.h ${HALIDE_ROOT}/include/wasm*.h)
install(FILES ${HALIDE_HEADERS} DESTINATION include)

file(GLOB HALIDE_BINS
${HALIDE_ROOT}/bin/featurization_to_sample*
${HALIDE_ROOT}/bin/get_host_target*
${HALIDE_ROOT}/bin/retrain_cost_model*
${HALIDE_ROOT}/bin/weightsdir_to_weightsfile*)
install(FILES ${HALIDE_BINS} DESTINATION bin)

install(DIRECTORY ${HALIDE_ROOT}/lib/cmake/Halide DESTINATION lib/cmake/)
if (EXISTS ${HALIDE_ROOT}/lib/cmake/HalideHelpers)
install(DIRECTORY ${HALIDE_ROOT}/lib/cmake/HalideHelpers DESTINATION lib/cmake/)
endif()
if (UNIX)
file(GLOB HALIDE_LIBRARIES ${HALIDE_ROOT}/lib/libHalide*)
install(FILES ${HALIDE_LIBRARIES} DESTINATION lib)
file(GLOB HALIDE_LIBRARIES ${HALIDE_ROOT}/lib/libautoschedule*)
install(FILES ${HALIDE_LIBRARIES} DESTINATION lib)
else()
install(FILES ${HALIDE_ROOT}/bin/Release/Halide.dll DESTINATION bin)
install(FILES ${HALIDE_ROOT}/lib/Release/Halide.lib DESTINATION lib)
endif()

#
Expand Down
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ The pipeline can be ran just in time or compiled into binary object.

## Depedencies
* [Halide (v16.0.0)](https://github.com/halide/Halide/releases/tag/v16.0.0)
* [libjpeg](https://libjpeg-turbo.org/)
* [libpng](http://www.libpng.org/)
* [zlib](https://www.zlib.net/)

## Quick start

Expand Down
14 changes: 7 additions & 7 deletions example/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,38 +12,38 @@ if(${ION_BB_BUILD_base})
endif()
endif()

if(${ION_BB_BUILD_image-processing} AND ${ION_BB_BUILD_image-io} AND ${ION_BB_BUILD_sgm})
if(${ION_BB_BUILD_image-processing} AND ${ION_BB_BUILD_image-io} AND ${ION_BB_BUILD_sgm} AND OpenCV_FOUND)
ion_aot_executable(sgm SRCS_COMPILE sgm_compile.cc SRCS_RUN sgm_run.cc INCS ${OPenCV_INCLUDE_DIR} LIBS ion-bb ${OpenCV_LIBRARIES} TARGET_STRING "host-profile")
if(${CUDA_FOUND})
ion_aot_executable(sgm_gpu SRCS_COMPILE sgm_compile.cc SRCS_RUN sgm_run.cc INCS ${OPenCV_INCLUDE_DIR} LIBS ion-bb ${OpenCV_LIBRARIES} TARGET_STRING "host-cuda-cuda_capability_50-profile")
endif()
endif()

if(${ION_BB_BUILD_base} AND ${ION_BB_BUILD_image-io} AND ${ION_BB_BUILD_dnn})
if(${ION_BB_BUILD_base} AND ${ION_BB_BUILD_image-io} AND ${ION_BB_BUILD_dnn} AND OpenCV_FOUND)
ion_aot_executable(dnn SRCS_COMPILE dnn_compile.cc SRCS_RUN dnn_run.cc INCS ${OpenCV_INCLUDE_DIR} LIBS ion-bb ${OpenCV_LIBRARIES} TARGET_STRING "host-profile")
if(${CUDA_FOUND})
ion_aot_executable(dnn_gpu SRCS_COMPILE dnn_compile.cc SRCS_RUN dnn_run.cc INCS ${OpenCV_INCLUDE_DIR} LIBS ion-bb ${OpenCV_LIBRARIES} TARGET_STRING "host-cuda-cuda_capability_50-profile")
endif()
ion_jit_executable(dnn SRCS dnn.cc INCS ${OpenCV_INCLUDE_DIRS} LIBS ${OpenCV_LIBRARIES})
endif()

if(${ION_BB_BUILD_base} AND ${ION_BB_BUILD_image-processing} AND ${ION_BB_BUILD_image-io})
if(${ION_BB_BUILD_base} AND ${ION_BB_BUILD_image-processing} AND ${ION_BB_BUILD_image-io} AND OpenCV_FOUND)
ion_aot_executable(demo SRCS_COMPILE demo_compile.cc SRCS_RUN demo_run.cc INCS ${OpenCV_INCLUDE_DIR} LIBS ion-bb ${OpenCV_LIBRARIES} TARGET_STRING "host-profile")
if(${CUDA_FOUND})
ion_aot_executable(demo_gpu SRCS_COMPILE demo_compile.cc SRCS_RUN demo_run.cc INCS ${OpenCV_INCLUDE_DIR} LIBS ion-bb ${OpenCV_LIBRARIES} TARGET_STRING "host-cuda-cuda_capability_50-profile")
endif()
ion_jit_executable(demo SRCS demo.cc INCS ${OpenCV_INCLUDE_DIR} LIBS ion-bb ${OpenCV_LIBRARIES})
endif()

if(${ION_BB_BUILD_image-processing} AND ${ION_BB_BUILD_image-io})
if(${ION_BB_BUILD_image-processing} AND ${ION_BB_BUILD_image-io} AND OpenCV_FOUND)
ion_jit_executable(isp SRCS isp.cc INCS ${OpenCV_INCLUDE_DIR} LIBS ${OpenCV_LIBRARIES})
endif()

if(${ION_BB_BUILD_image-processing} AND ${ION_BB_BUILD_image-io} AND ${ION_BB_BUILD_sgm})
if(${ION_BB_BUILD_image-processing} AND ${ION_BB_BUILD_image-io} AND ${ION_BB_BUILD_sgm} AND OpenCV_FOUND)
ion_jit_executable(isp_and_sgm SRCS isp_and_sgm.cc INCS ${OpenCV_INCLUDE_DIR} LIBS ${OpenCV_LIBRARIES})
endif()

if(${ION_BB_BUILD_base} AND ${ION_BB_BUILD_image-io} AND ${ION_BB_BUILD_image-processing})
if(${ION_BB_BUILD_base} AND ${ION_BB_BUILD_image-io} AND ${ION_BB_BUILD_image-processing} AND OpenCV_FOUND)
ion_jit_executable(imx219_isp_display_jit SRCS imx219_isp_display.cc)
endif()

Expand All @@ -55,7 +55,7 @@ endif()
# ion_jit_executable(u3v_jit SRCS u3v.cc)
#endif()

if(${ION_BB_BUILD_image-io} AND UNIX AND NOT APPLE)
if(${ION_BB_BUILD_image-io} AND OpenCV_FOUND AND UNIX AND NOT APPLE)
ion_jit_executable(v4l2_jit SRCS v4l2.cc)
ion_jit_executable(realsense_jit SRCS realsense.cc INCS ${OpenCV_INCLUDE_DIR} LIBS ${OpenCV_LIBRARIES})
endif()
Expand Down
2 changes: 1 addition & 1 deletion example/demo_compile.cc
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ int main(int argc, char *argv[]) {
// IMX219
Node imx = b.add("image_io_imx219")
.set_param(Param{"index", std::to_string(i)},
Param{"url", "http://ion-kit.s3.us-west-2.amazonaws.com/images/pedestrian.jpg"});
Param{"url", "http://ion-kit.s3.us-west-2.amazonaws.com/images/pedestrian.png"});

// ISP
Node downscale = b.add("image_processing_bayer_downscale_uint16")
Expand Down
2 changes: 1 addition & 1 deletion example/dnn.cc
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ int main(int argc, char *argv[]) {
b.with_bb_module("ion-bb");

Node n;
n = b.add("image_io_color_data_loader").set_param(Param("url", "http://ion-kit.s3.us-west-2.amazonaws.com/images/pedestrian.jpg"), Param("width", width), Param("height", height));
n = b.add("image_io_color_data_loader").set_param(Param("url", "http://ion-kit.s3.us-west-2.amazonaws.com/images/pedestrian.png"), Param("width", width), Param("height", height));
n = b.add("base_normalize_3d_uint8")(n["output"]);
n = b.add("base_reorder_buffer_3d_float")(n["output"]).set_param(Param("dim0", 2), Param("dim1", 0), Param("dim2", 1)); // CHW -> HWC
n = b.add("dnn_object_detection")(n["output"]);
Expand Down
2 changes: 1 addition & 1 deletion example/dnn_compile.cc
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ int main(int argc, char *argv[]) {
b.with_bb_module("ion-bb");

Node n;
n = b.add("image_io_color_data_loader").set_param(Param{"url", "http://ion-kit.s3.us-west-2.amazonaws.com/images/pedestrian.jpg"}, Param{"width", std::to_string(input_width)}, Param{"height", std::to_string(input_height)});
n = b.add("image_io_color_data_loader").set_param(Param{"url", "http://ion-kit.s3.us-west-2.amazonaws.com/images/pedestrian.png"}, Param{"width", std::to_string(input_width)}, Param{"height", std::to_string(input_height)});
n = b.add("base_normalize_3d_uint8")(n["output"]);
n = b.add("base_reorder_buffer_3d_float")(n["output"]).set_param(Param{"dim0", "2"}, Param{"dim1", "0"}, Param{"dim2", "1"}); // CHW -> HWC
n = b.add("dnn_object_detection")(n["output"]);
Expand Down
47 changes: 47 additions & 0 deletions example/opencv_bb.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#include <ion/ion.h>

using namespace ion;

int main(int argc, char *argv[]) {
try {
const int width = 640;
const int height = 480;

Builder b;
b.set_target(Halide::get_target_from_environment());
b.with_bb_module("ion-bb");

Port in{"input", Halide::type_of<uint8_t>(), 3};

Node n;
n = b.add("opencv_median_blur")(in);
n = b.add("opencv_display")(n["output"]);

Halide::Buffer<uint8_t> in_buf(3, width, height);
for (int y=0; y<height; ++y) {
for (int x=0; x<width; ++x) {
in_buf(0, x, y) = y * width + x;
in_buf(1, x, y) = y * width + x;
in_buf(2, x, y) = y * width + x;
}
}

Halide::Buffer<int32_t> r = Halide::Buffer<int32_t>::make_scalar();

PortMap pm;
pm.set(in, in_buf);
pm.set(n["output"], r);

for (int i=0; i<1000; ++i) {
b.run(pm);
}

} catch (const std::exception &e) {
std::cerr << e.what() << std::endl;
return -1;
} catch (...) {
return -1;
}

return 0;
}
1 change: 1 addition & 0 deletions src/bb/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ endforeach()

add_library(ion-bb SHARED bb.cc)
target_include_directories(ion-bb PUBLIC ${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR} ${ION_BB_INCLUDE_DIRS})

target_link_libraries(ion-bb PUBLIC ion-core ${ION_BB_LIBRARIES})
if(UNIX)
target_compile_options(ion-bb PUBLIC -fno-rtti) # For Halide::Generator
Expand Down
14 changes: 7 additions & 7 deletions src/bb/image-io/bb.h
Original file line number Diff line number Diff line change
Expand Up @@ -689,9 +689,9 @@ class ImageSaver : public ion::BuildingBlock<ImageSaver> {
Func in(static_cast<std::string>(gc_prefix) + "input");
Var x, y, c;
in(c, x, y) = mux(c,
{input(x, y, 2),
{input(x, y, 0),
input(x, y, 1),
input(x, y, 0)});
input(x, y, 2)});
in.compute_root();
if (get_target().has_gpu_feature()) {
Var xo, yo, xi, yi;
Expand Down Expand Up @@ -729,7 +729,7 @@ class U3VCamera1 : public ion::BuildingBlock<U3VCamera1<T, D>> {
Func camera1("u3v_camera1");
{
Buffer<uint8_t> id_buf = this->get_id();

const std::string gain_key(gain_key_ptr);
Buffer<uint8_t> gain_key_buf(static_cast<int>(gain_key.size() + 1));
gain_key_buf.fill(0);
Expand All @@ -749,14 +749,14 @@ class U3VCamera1 : public ion::BuildingBlock<U3VCamera1<T, D>> {
camera1.compute_root();
output0(_) = camera1(_);
}

Func camera1_frame_count;
{
Buffer<uint8_t> id_buf = this->get_id();
camera1_frame_count.define_extern("ion_bb_image_io_u3v_camera1_frame_count",{camera1, 1, static_cast<bool>(frame_sync), static_cast<bool>(realtime_diaplay_mode), id_buf}, type_of<uint32_t>(), 1);
camera1_frame_count.compute_root();
frame_count(_) = camera1_frame_count(_);
}
}

this->register_disposer("u3v_dispose");

Expand Down Expand Up @@ -812,7 +812,7 @@ class U3VCamera2 : public ion::BuildingBlock<U3VCamera2<T, D>> {
output0(_) = camera2(_)[0];
output1(_) = camera2(_)[1];
}

Func camera2_frame_count;{
Buffer<uint8_t> id_buf = this->get_id();
camera2_frame_count.define_extern("ion_bb_image_io_u3v_camera2_frame_count", { camera2, 2, static_cast<bool>(frame_sync), static_cast<bool>(realtime_diaplay_mode), id_buf}, type_of<uint32_t>(), 1);
Expand Down Expand Up @@ -935,7 +935,7 @@ class U3VCameraN : public ion::BuildingBlock<U3VCameraN<T, D>> {
}
this->register_disposer("u3v_dispose");
}

};

using U3VCameraN_U8x3 = U3VCameraN<uint8_t, 3>;
Expand Down
Loading

0 comments on commit 02f9c6d

Please sign in to comment.