src/: C++/CUDA sourcescuda/: CUDA kernels and headerspano/: panorama logic and public library targetsutils/: OpenGL/IO helpersstable/: stabilization code
tests/: runnable sample/test binaries (Bazelcc_binary) and GTest targets undersrc/*.scripts/: setup and tooling (e.g.,install_bazelisk.sh,create_control_points.py).- Bazel files:
WORKSPACE,MODULE.bazel,BUILD.bazelfiles under dirs. - Other:
assets/sample images,.clang-formatstyle, rootMakefilefor common Bazel workflows.
- Install Bazelisk:
./scripts/install_bazelisk.sh(Linux x86_64/aarch64). - Debug build all:
make debug(ormake bld). - Optimized build:
make perf. - Clean:
make clean(ormake expungefor a full clean). - Specific targets:
bazelisk build //src/pano:cuda_pano. - GTest targets:
bazelisk test //src/pano:cudaPano3_test //src/cuda:cudaBlend3_test. - Stitching demo (after build):
./bazel-bin/tests/test_cuda_blend --show --perf --output=out.png --directory=<data_dir>or./laplacian_blend.sh <data_dir>.
- Language: C++17 (most), CUDA C++14 in kernels.
- Formatting: enforce
.clang-format(2-space indent, 120 cols, include sorting, left-aligned*). Runclang-format -ion touched files. - Includes: use Bazel
include_prefixpaths (e.g.,#include <cupano/pano/cudaPano.h>). - Naming: follow existing patterns (camelCase for files like
cudaBlendShow.cpp,_test.cppfor tests, Bazel targetssnake_case).
- Framework: GoogleTest for
cc_testundersrc/*. - Test files: name
*_test.cppcolocated with code (e.g.,src/cuda/cudaBlend3_test.cpp). - Run:
bazelisk test //src/...or execute binaries intests/frombazel-bin/tests/with flags. - Visual checks: include output image diffs when relevant.
- Commits: present tense, concise scope prefix (
cuda:,pano:,utils:), e.g.,cuda: optimize laplacian blend path. - PRs: describe motivation, key changes, performance impact; link issues; include commands used to build/test and sample outputs (images if visual).
- CI expectation: all Bazel builds/tests pass for both x86_64 (
--cpu=k8) and aarch64 when applicable.
- Requires NVIDIA CUDA toolkit/driver and OpenCV dev headers (
/usr/includeby default). - External tools for config: Hugin/Enblend (
sudo apt-get install hugin hugin-tools enblend). - Generate control points:
python scripts/create_control_points.py <left.mp4> <right.mp4>before running demos.