Skip to content

Quick Start

Get up and running with Mini-ImagePipe in under 5 minutes.

Minimal Example

cpp
#include "pipeline.h"
#include "operators/gaussian_blur.h"

int main() {
    using namespace mini_image_pipe;
    
    // Create pipeline
    Pipeline pipeline;
    
    // Add operator
    auto blur = std::make_shared<GaussianBlurOperator>(GaussianKernelSize::KERNEL_5x5);
    int node = pipeline.addOperator("Blur", blur);
    
    // Execute (assuming you have input data)
    // pipeline.setInput(node, d_input, width, height, channels);
    // pipeline.execute();
    // void* output = pipeline.getOutput(node);
    
    return 0;
}

Complete Pipeline Example

cpp
#include "pipeline.h"
#include "operators/resize.h"
#include "operators/color_convert.h"
#include "operators/gaussian_blur.h"
#include "operators/sobel.h"
#include <iostream>

using namespace mini_image_pipe;

int main() {
    // 1. Configure pipeline
    PipelineConfig config;
    config.numStreams = 4;
    Pipeline pipeline(config);

    // 2. Create operators
    auto resize = std::make_shared<ResizeOperator>(320, 240);
    auto gray   = std::make_shared<ColorConvertOperator>(ColorConversionType::RGB_TO_GRAY);
    auto blur   = std::make_shared<GaussianBlurOperator>(GaussianKernelSize::KERNEL_5x5);
    auto sobel  = std::make_shared<SobelOperator>();

    // 3. Build DAG
    int n1 = pipeline.addOperator("Resize", resize);
    int n2 = pipeline.addOperator("Gray",   gray);
    int n3 = pipeline.addOperator("Blur",   blur);
    int n4 = pipeline.addOperator("Sobel",  sobel);

    pipeline.connect(n1, n2);  // Resize → Gray
    pipeline.connect(n2, n3);  // Gray → Blur
    pipeline.connect(n3, n4);  // Blur → Sobel

    // 4. Prepare input (example: allocate device memory)
    int width = 1920, height = 1080, channels = 3;
    size_t inputSize = width * height * channels * sizeof(uint8_t);
    
    void* d_input;
    cudaMalloc(&d_input, inputSize);
    
    // 5. Execute
    pipeline.setInput(n1, d_input, width, height, channels);
    
    cudaError_t err = pipeline.execute();
    if (err != cudaSuccess) {
        std::cerr << "Pipeline failed: " << cudaGetErrorString(err) << std::endl;
        return 1;
    }

    // 6. Get output
    void* output = pipeline.getOutput(n4);
    std::cout << "Pipeline executed successfully!" << std::endl;

    // Cleanup
    cudaFree(d_input);
    return 0;
}

Build and Run

bash
# Build
cmake --preset release
cmake --build --preset release

# Run your program
./build/your_program

Next Steps

Released under the MIT License.