HOME
Shop
  • English
  • 简体中文
HOME
Shop
  • English
  • 简体中文
  • Product Series

    • FPGA+ARM

      • GM-3568JHF

        • Introduction

          • GM-3568JHF Introduction
        • Quick Start

          • Preface
          • Environment Setup
          • Compilation Notes
          • Flashing Guide
          • Debugging Tools
          • Software Update
          • Viewing System Information
          • Test Commands
          • Application Compilation
          • Source Code Access
        • Peripherals & Interfaces

          • USB
          • Display and Touch
          • Ethernet
          • WIFI
          • Bluetooth
          • TF-Card
          • Audio
          • Serial Port
          • CAN
          • RTC
        • Application Development

          • UART Read/Write Demo
          • Key Detection Demo
          • LED Blink Demo
          • MIPI Screen Detection Demo
          • Read USB Device Information Demo
          • FAN Detection Demo
          • FPGA FSPI Communication Demo
          • FPGA DMA Read/Write Demo
          • GPS Debugging Demo
          • Ethernet Test Demo
          • RS485 Read/Write Demo
          • FPGA I2C Read/Write Demo
          • PN532 NFC Card-Reading Demo
          • TF Card Read/Write Demo
        • QT Development

          • ARM64 Cross-Compiler Environment Setup
          • Adding a QT Program to Boot Auto-Start
        • RKNN_NPU Development

          • RK3568 NPU Overview
          • Development Environment Setup
          • Run the Official YOLOv5 Example
        • FPGA Development

          • ARM and FPGA Communication
          • FPGA Development Manual
        • Others

          • Modifying the Root Filesystem
          • System Auto-Start Services
        • Downloads

          • Downloads
      • MB-E30P

        • Introduction

          • MB-E30P Introduction
        • Quick Start

          • Preface
          • Environment Setup
          • Compilation Instructions
          • Flashing Guide
          • Debugging Tools
          • Software Update
          • Viewing Information
          • Test Commands
          • Application Compilation
          • Source Code Acquisition
        • Peripherals & Interfaces

          • USB
          • Display and Touch
          • Ethernet
          • WIFI
          • Bluetooth
          • TF-Card
          • Audio
          • RTC
        • Application Development

          • Key Detection Demo
          • LED Blink Demo
          • MIPI Screen Detection Demo
          • Read USB Device Information Demo
          • FAN Detection Demo
          • FPGA FSPI Communication Demo
          • FPGA DMA Read/Write Demo
          • Ethernet Test Demo
          • FPGA IIC Read/Write Demo
          • PN532 NFC Card Reading Demo
          • TF Card Read/Write Demo
        • QT Development

          • ARM64 Cross-Compiler Environment Setup
          • Adding a QT Program to the Boot Auto-Start Service
        • RKNN_NPU Development

          • RK3568 NPU Overview
          • Development Environment Setup
          • Run the Official YOLOv5 Example
          • Model Conversion In Detail
          • Run Custom Models on the Board
        • FPGA Development

          • ARM and FPGA Communication
          • FPGA Development Manual
        • Others

          • Modifying the Root Filesystem
          • System Auto-Start Service
        • Downloads

          • Downloads
    • ShimetaPi

      • M4-R1

        • Introduction

          • M4-R1 Introduction
        • Quick Start

          • OpenHarmony Overview
          • Image Burning
          • Application Development Quick Start
          • Device Development Quick Start
        • Application Development

          • ArkUI

            • ArkTS Language Overview
            • UI Components - Row Container Introduction
            • UI Components - Column Container Introduction
            • UI Components - Text Component
            • UI Components - Toggle Component
            • UI Components - Slider Component
            • UI Components - Animation Component & Transition Component
          • Documentation

            • OpenHarmony Official Materials
          • Development Notes

            • Full-SDK Replacement Tutorial
            • Introducing and Using Third-Party Libraries
            • HDC Debugging
            • Restore Factory Mode via Command Line
            • Upgrade App to System Permission
          • First App

            • Build Your First ArkTS Application - HelloWorld
          • Demos

            • Serial-Debug-Assistant Application Demo
            • Writing-Board Application Demo
            • Digital Clock Application Demo
            • Wi-Fi Information Acquisition Application Demo
        • Device Development

          • Ubuntu Development

            • Environment Setup
            • Download Source Code
            • Compile Source Code
          • DevEco Device Tool

            • Tool Introduction
            • Development Environment Construction
            • Import the SDK
            • HUAWEI DevEco Tool Function Introduction
        • Kernel Peripherals & Interfaces

          • Guide
          • Device Tree Introduction
          • NAPI Introduction
          • ArkTS Introduction
          • NAPI Development Hands-on Demo
          • GPIO Introduction
          • I2C Communication
          • SPI Communication
          • PWM Control
          • UART Communication
          • TF Card (MicroSD)
          • Screen (Display)
          • Touch
          • Ethernet
          • M.2 SSD
          • Audio
          • WIFI & BT
          • Camera
        • Downloads

          • Downloads
      • M5-R1

        • Introduction

          • M5-R1 Development Docs
        • Quick Start

          • Image Burning
          • Environment Setup
          • Download Source Code
        • Peripherals & Interfaces

          • Raspberry Pi Interfaces
          • GPIO Interface
          • I2C Interface
          • SPI Communication
          • PWM Control
          • Serial Port Communication
          • TF Card
          • Display
          • Touch
          • Audio
          • RTC
          • Ethernet
          • M.2
          • MINI-PCIE
          • Camera
          • WIFI & BT
        • Downloads

          • Downloads
      • Pico-G1

        • Product Overview

          • Product Introduction
          • SDK Version Information
        • Quick Start

          • Development Environment Setup
          • Image Build
          • Image Flashing
          • System Login
          • Network Configuration
          • File Transfer
          • SDK Directory Structure
          • Deploying Your First Application
          • Deploying Your First Driver
          • Mounting an SD Card
        • Peripherals & Interfaces

          • GPIO Control
          • UART Serial Communication
          • I2C Communication
          • SPI Communication
        • MPP Media Development

          • MPP Media Processing Software
          • Image Processing Chain
          • Video Input
          • Image Encoding
        • NPU & AI

          • NPU Driver and Runtime Library Architecture
          • .xmm Model Loading
          • SVP Video Processing
          • AI Noise Reduction (AI_NR)
        • Application Samples

          • Encryption/Decryption Application
          • ADC Acquisition Application
          • Low-Power Application
          • Audio Processing Application
          • Video Encoding Application
          • Video Input Application
          • Video Graphics Subsystem (VGS) Application
          • 08 Region Overlay Application
          • 09 Intelligent Video Engine Application
          • 10 UVC Webcam Application
          • 11 All-in-One Quickstart Application
          • 12 FPN Correction Application
          • 13 Regional Motion Detection Application
          • 14 MTCNN Face Detection Application
        • Expansion Board Peripheral Examples

          • 00 - Pico Expansion Board Peripheral Examples Overview
          • 01 - OLED Display Application
          • 02 - TFT Display Application
          • 03 - MPU6050 Gyroscope Application
          • 04 - ADC Acquisition Application
          • 05 - Passive Buzzer Application
          • 06 - MQ Gas Sensor Application
          • 07 - GPS Positioning Application
          • 08 - SHT20 Temperature & Humidity Application
          • 09 - Ultrasonic Ranging Application
          • 10 - SpO2 Sensor Application
          • 11 - DC Motor Control Application
          • 12 - Servo Control Application
    • OpenHarmony

      • SC-3568HA

        • Introduction

          • SC-3568HA Overview
        • Quick Start Guide

          • OpenHarmony Overview
          • Image Flashing
          • Setting Up the Development Environment
          • Hello World Application and Deployment
        • Application Development

          • ArkUI

            • Introduction to ArkTS Language
            • Introduction to UI Components and Practical Applications (Part 1)
            • Introduction to UI Components and Practical Applications (Part 2)
            • Introduction to UI Components and Practical Applications (Part 3)
          • Expand

            • Getting Started Guide
            • Referencing and Using Third-Party Libraries
            • Application Compilation and Deployment
            • Command-Line Factory Reset
            • System Debugging -- HDC Debugging
            • APP Stability Testing
            • Chapter 7 Application Testing
        • Device Development

          • Environment Setup
          • Download Source Code
          • Compiling Source Code
        • Peripheral And Interface

          • Raspberry Pi interface
          • GPIO Interface
          • I2C Interface
          • SPI communication
          • PWM (Pulse Width Modulation) control
          • Serial port communication
          • TF Card
          • Display Screen
          • Touch
          • Audio
          • RTC
          • Ethernet
          • M.2
          • MINI-PCIE
          • Camera
          • WIFI&BT
          • Raspberry Pi expansion board
        • Downloads

          • Downloads
      • M-K1HSE

        • Introduction

          • M-K1HSE Introduction
        • Quick Start

          • Development environment construction
          • Source code acquisition
          • Compilation Notes
          • Burning Guide
        • Application Development

          • Application Development Environment Setup
          • First Application - Hello World
        • Peripherals and interfaces

          • 01 Audio
          • 02 RS485
          • 03 Display
        • System customization development

          • System transplant
          • System customization
          • Driver Development
          • System Debugging
          • OTA Update
        • Downloads

          • Downloads
    • HVS Camera

      • Quick Start

        • SDK Overview
        • Downloads
        • Your First C++ Program
        • Python Data Analysis
        • MultiVision Studio
      • Development

        • Programming Guides

          • Open Camera
          • Read Events
          • Recording & Replay
          • Event Processing (Denoising)
          • Display & Visualization
          • Tuning
          • Capture APS Image
        • Toolkit SDK

          • Hybrid Vision Toolkit
          • Quick Start
          • C++ API
          • Python API
        • Algorithm

          • Hybrid Vision Algo
          • Hybrid Vision Algo API
          • Windows Algo SDK
        • Samples Overview
        • Applications
      • Fundamentals

        • Event Camera Fundamentals
        • HVS Hybrid Vision
        • Event Visualization
        • Data Formats Reference
        • Glossary
        • Bias & Tuning
        • Video Tutorials
      • USB Cameras

        • HVS Camera Quick Start
        • Networking Capabilities

          • HVS Camera System Architecture
          • EVS Network Server
          • EVS Time Sync
          • Web Window
        • HVS Camera Compatibility Matrix
        • FAQ & Troubleshooting Guide
        • Products

          • CF-NRS1 (Lingguang No.1 Hybrid Vision Camera)
      • MIPI Modules

        • MIPI Module Quick Start
        • Carrier Boards

          • RDK X5 Carrier Board Adaptation
          • Raspberry Pi Carrier Board Adaptation
          • Digua Pi Carrier Board Adaptation
          • ShimeTai Board Carrier Board Adaptation
        • MIPI Module Compatibility Matrix
        • Products

          • EVS_003 Sensor Module
    • AI-model

      • 1684XB-32T

        • Introduction

          • AIBOX-1684XB-32 Introduction
        • Quick Start

          • First Use
          • Network Configuration
          • Disk Usage
          • Memory Allocation
          • Fan Control Strategy
          • Firmware Upgrade
          • Cross Compilation
          • Model Quantization
        • Application Development

          • Development Overview

            • Sophgo SDK Development
            • Sophgo Demo Introduction
          • Large Language Models

            • Deploying Llama3 Example
            • Sophon LLM_api_server Development
            • Deploying MiniCPM-V-2_6
            • Qwen-2-5-VL Image and Video Recognition Demo
            • Qwen3-chat Demo
            • Qwen3-Qwen Agent-MCP Development
            • Qwen3-langchain-AI Agent
          • Deep Learning

            • ResNet (Image Classification)
            • LPRNet (License Plate Recognition)
            • SAM (General Image Segmentation Foundation Model)
            • YOLOv5 (Object Detection)
            • OpenPose (Human Keypoint Detection)
            • PP-OCR (Optical Character Recognition)
        • Downloads

          • Downloads
      • 1684X-416T

        • Introduction

          • AIBOX-1684X-416 Introduction
        • Demo Quick Guide

          • ShimeTai Intelligent Monitoring Demo Quick Usage Guide
      • RDK-X5

        • Introduction

          • RDK-X5 Hardware Introduction
        • Quick Start

          • RDK-X5 Quick Start
        • Application Development

          • AI Online Model Development

            • Experiment 01 - Access Volcengine Doubao AI
            • Experiment 02 - Image Analysis
            • Experiment 03 - Multimodal Visual Analysis & Localization
            • Experiment 04 - Multimodal Image-Text Comparison
            • Experiment 05 - Multimodal Document/Table Analysis
            • Experiment 06 - Camera-based AI Visual Analysis
          • Large Language Models

            • Experiment 01 - Speech Recognition
            • Experiment 02 - Voice Conversation
            • Experiment 03 - Multimodal Image Analysis - Voice
            • Experiment 04 - Multimodal Image Comparison - Voice
            • Experiment 05 - Multimodal Document Analysis - Voice
            • Experiment 06 - Multimodal Vision Application - Voice
          • ROS2 Basics

            • Experiment 01 - Environment Setup
            • Experiment 02 - Create & Build a Workspace Package
            • Experiment 03 - Run ROS2 Topic Communication Node
            • Experiment 04 - ROS2 Camera Application
          • 40-pin IO Development

            • Experiment 01 - GPIO Output (LED Blink)
            • Experiment 02 - GPIO Input
            • Experiment 03 - Button-controlled LED
            • Experiment 04 - PWM Output
            • Experiment 05 - Serial Output
            • Experiment 06 - I2C Experiment
            • Experiment 07 - SPI Experiment
          • USB Module Usage

            • Experiment 01 - USB Voice Module Usage
            • Experiment 02 - Sound Source Localization Module
          • Machine Vision Practice

            • Experiment 01 - Open USB Camera
            • Experiment 02 - Color Recognition
            • Experiment 03 - Gesture Recognition
            • Experiment 04 - YOLOv5 Object Detection
      • RDK-S100

        • Introduction

          • RDK-S100 Hardware Introduction
        • Quick Start

          • RDK-S100 Quick Start
        • Application Development

          • AI Online Model Development

            • Experiment 01 - Access Volcengine Doubao AI
            • Experiment 02 - Image Analysis
            • Experiment 03 - Multimodal Visual Analysis & Localization
            • Experiment 04 - Multimodal Image-Text Comparison
            • Experiment 05 - Multimodal Document/Table Analysis
            • Experiment 06 - Camera-based AI Visual Analysis
          • Large Language Models

            • Experiment 01 - Speech Recognition
            • Experiment 02 - Voice Conversation
            • Experiment 03 - Multimodal Image Analysis - Voice
            • Experiment 04 - Multimodal Image Comparison - Voice
            • Experiment 05 - Multimodal Document Analysis - Voice
            • Experiment 06 - Multimodal Vision Application - Voice
          • ROS2 Basics

            • Experiment 01 - Environment Setup
            • Experiment 02 - Create & Build a Workspace Package
            • Experiment 03 - Run ROS2 Topic Communication Node
            • Experiment 04 - ROS2 Camera Application
          • 40-pin IO Development

            • Experiment 01 - GPIO Output (LED Blink)
            • Experiment 02 - GPIO Input
            • Experiment 03 - Button-controlled LED
            • Experiment 04 - PWM Output
            • Experiment 05 - Serial Output
            • Experiment 06 - I2C Experiment
            • Experiment 07 - SPI Experiment
          • USB Module Usage

            • Experiment 01 - USB Voice Module Usage
            • Experiment 02 - Sound Source Localization Module
          • Machine Vision Practice

            • Experiment 01 - Open USB Camera
            • Experiment 02 - Image Processing Basics
            • Experiment 03 - Object Detection
            • Experiment 04 - Image Segmentation
      • RK1828

        • Introduction

          • M5-182X-A1 AI Edge Box - Product Introduction
          • M5-182X-A1 Hardware Specifications
          • M5-182X-A1 Usage & Safety
        • Quick Start

          • M5-182X-A1 Image Flashing
          • RK182X Hardware Installation & Verification
          • RK182X Development Environment Quick Setup
          • RK182X SDK Overview
          • RK182X Environment Setup in Detail
          • RK182X Quick Start
          • Vendor SDK Data Extraction Record
        • Development Guide

          • ClawChips Architecture and Principles
          • SKILL User Manual
          • RK182X Series LLM Inference (RK1828 Model)
          • RK182X Series CNN Inference (RK1828 Model)
          • Model Conversion
          • RK182X AI Agent Application Development Guide
          • RK182X Industrial Anomaly Detection Application
        • SDK Reference

          • RKNN3-SDK Overview

            • RKNN3 SDK Overview
          • RKNN3-Toolkit

            • RKNN3 Toolkit Installation and Usage
          • RKLLM

            • RKLLM On-Device LLM Inference
          • RK182X Series NPU Overview and Architecture (RK1828 Model)
          • RK182X INT8 Quantized Inference Deployment
          • RK182X MPP Multimedia Framework
          • MPP Details

            • RK182X Video Decoding
            • RK182X Video Encoding
          • NPU Details

            • RKNN Model Conversion
            • RK182X NPU INT8 Quantized Inference
            • RK182X Multi-Model Parallel Inference
          • RGA Details

            • RK182X RGA 2D Graphics Acceleration
          • VPU Details

            • RK182X VPU Codec
        • Hardware Reference

          • RK182X Series Hardware Architecture Overview (RK1828 Model)
          • RK182X Pin Definitions and Multiplexing Configuration
          • RK182X Pin Definitions
          • RK182X Power Management
          • RK182X Clock and PLL Configuration
          • RK182X Clock and Frequency Configuration
        • Tutorials

          • Hello World
          • Hello RK1828 - The First Program
          • RTSP Streaming
          • RTSP Streaming + AI Analysis
          • ShiMetaPi AI Lobster One-Click Deployment
          • PaddleOCR-VL Text Recognition
          • Qwen3-1.7B LLM Text Chat
          • AI Multi-View Inspection (Qwen3-VL Wrapper)
          • YOLOv5 Object Detection
        • Downloads

          • Downloads
        • FAQ

          • FAQ
    • Core-Board

      • C-3568BQ

        • Introduction

          • C-3568BQ Overview
      • C-3588LQ

        • Introduction

          • C-3588LQ Overview
      • GC-3568JBAF

        • Introduction

          • GC-3568JBAF Overview
      • C-K1BA

        • Introduction

          • C-K1BA Overview
    • Software Platform

      • ShiMetaPi Workbench

        • Introduction

          • Product Overview
          • Core Architecture
          • Feature Entries
          • Supported Hardware
          • Release Notes
        • Quick Start

          • Install & Login
          • Connect the Device
          • Set Up the Environment
          • Connect to AIHub
          • First Inference
        • User Guide

          • Workspace Overview
          • Device Manager
          • Model Market
          • One-Click Deploy
          • Vision — SVP
          • Vision - Custom Models
          • shimeta-py IDE
          • Terminal
          • Agent Debug Assistant
          • Settings and Resources
        • FAQ

          • Installation & Login
          • Device Connection
          • Models & Deployment
          • Vision & Runtime
          • Settings & Other
      • ShimetaPi Repository

        • Introduction

          • ShimetaPi Software Repository
        • Pico G1 (GK7206)

          • Quick Start

            • Installation & First Inference
            • shimeta_infer — Image Inference
            • shimeta_camera — Real-time Camera Inference
            • SVP Scene Detection
            • File Transfer & Built-in Model Reference
            • FAQ
          • HTTP API & Python SDK

            • HTTP API Reference
      • Model Fine-tuning Platform

        • Introduction

          • Model Training Platform
        • Quick Start

          • Register & Login
          • Create Your First Model (30-Minute Quick Experience)
        • Training Guide

          • Data Preparation & Annotation
          • Training Parameter Configuration
          • Start & Monitor Training
          • Model Evaluation & Testing
        • Model Deployment

          • Export Model
          • Deploy to Edge Device

Your First C++ Program

This page uses the repo's built-in get_started sample to walk you through the camera's minimal capture loop. All build, deploy, and run commands below revolve around this sample; its executable is hv_sample_get_started.

First clone the toolkit release repository (gitee and github have identical content; for more download options see Downloads):

# gitee (recommended in China)
git clone https://gitee.com/ShiMetaPi_0/shimetapi_hybrid_vision_toolkit.git
# github
git clone https://github.com/ShiMetaPi/shimetapi_hybrid_vision_toolkit.git

In v2.0 the three backends (USB / MIPI / Ethernet) share the same Camera API; the backend is selected via DeviceConfig.backend.

Platform overview

The Hybrid Vision Toolkit release (shimetapi_Hybrid_vision_toolkit_release) is distributed as precompiled .so libraries, currently adapted to three platforms: x86_64 (USB), S100, and X5 — the prebuilt libraries ship with the repo (lib/x86_64, lib/s100, lib/x5); building only compiles the samples and links the library for the target architecture:

PlatformInterfacePrebuilt libsBuildStatus
x86_64 (Ubuntu host)USB cameralib/x86_64./run.sh build✅ Adapted
S100 (RDK carrier board)MIPI modulelib/s100./run.sh build s100✅ Adapted
X5 (RDK carrier board)MIPI modulelib/x5./run.sh build x5✅ Adapted
RK3588MIPI module——⏳ Pending
  • Build artifacts go to out/<arch>/build (the three architectures don't overwrite each other); ./run.sh --list shows the prebuilt-library readiness.
  • Platform differences only show up in build method and deployment paths — at the API level USB / MIPI are identical except for DeviceConfig.backend and the event decoder (USB uses Evt2Decoder, MIPI uses MipiRaw8Decoder).

1. USB (x86_64)

APIs involved

APIDescriptionDocs
CameraUnified capture (Init → StartStream → GetFrame → …)View →
DeviceConfigBackend + VID/PID configurationView →
FrameUnified frame (evs event bytes + aps interpreted per Frame.format)View →
EventCDDecoded event (x, y, t, polarity)View →
Evt2DecoderEVT2 byte stream → EventCDView →

Prerequisites

sudo apt-get update
sudo apt-get install -y build-essential cmake libusb-1.0-0 libopencv-dev

Core code

Below is the teaching version of the get_started sample — command-line argument parsing is omitted to focus on the minimal USB-backend flow. The actual source at samples/cpp/get_started/main.cpp in the repo also supports switching backends from the command line (--mipi / --sensor-index N, or passing VID PID as arguments); see that file for the full logic.

The USB backend selects the device by VID/PID; GetFrame synchronously pulls the combined frame (events + APS), then Evt2Decoder decodes it:

#include <shimetapi/hv/camera.h>
#include <shimetapi/hv/device_config.h>
#include <shimetapi/codec/evt2_codec.h>
#include <iostream>
#include <vector>

int main() {
    Shimeta::hv::Camera cam;
    Shimeta::hv::DeviceConfig cfg;
    cfg.backend    = Shimeta::hv::Backend::Usb;
    cfg.vendor_id  = 0x1d6b;   // replace with your actual VID/PID
    cfg.product_id = 0x0105;
    cfg.event_fmt  = Shimeta::hv::EventFormat::Evt2;

    cam.Init(cfg);
    if (!cam.StartStream()) {
        std::cerr << "Failed to open the camera; check the USB connection and permissions." << std::endl;
        return 1;
    }
    std::cout << "Camera ready" << std::endl;

    // Synchronously pull 10 frames
    Shimeta::codec::Evt2Decoder dec;
    Shimeta::Frame f;
    for (int i = 0; i < 10; ++i) {
        if (cam.GetFrame(f, 1000)) {
            std::vector<Shimeta::EventCD> events;
            dec.Decode(f.evs.data, f.evs.size, events);   // raw bytes → EventCD
            std::cout << "frame " << i << ": evs=" << f.evs.size
                      << " bytes, decoded " << events.size() << " events" << std::endl;
        }
    }

    cam.StopStream();
    cam.Destroy();
    return 0;
}

In v2.0 the camera delivers raw event bytes (Frame.evs), which must be decoded with the matching codec. EventCD fields: x/y (coordinates), t (microsecond timestamp), polarity (true = CD_ON / false = CD_OFF).

Build and run

cd shimetapi_Hybrid_vision_toolkit    # the repo directory cloned above
./run.sh build                        # prebuilt libs ship with the repo; only samples are compiled; on an x86_64 host the default target is x86_64
./out/x86_64/build/samples/cpp/get_started/hv_sample_get_started                  # default 0x1d6b:0x0105
./out/x86_64/build/samples/cpp/get_started/hv_sample_get_started 0x1d6b 0x0105    # explicit VID PID

USB permissions: if you get LIBUSB_ERROR_ACCESS, the recommended fix is a udev rule (no sudo needed at runtime):

echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="1d6b", ATTR{idProduct}=="0105", MODE="0666"' \
  | sudo tee /etc/udev/rules.d/99-hv-camera.rules
sudo udevadm control --reload-rules && sudo udevadm trigger

2. S100 (MIPI / cross-compilation)

APIs involved

APIDescriptionDocs
CameraUnified capture (same as USB, backend switched to Mipi)View →
DeviceConfigbackend + evs_fps / sensor_indexView →
FrameUnified frame (evs RAW8 + aps image)View →
MipiRaw8DecoderRAW8 subframe stream → EventCDView →

MIPI is not a USB device: instead of VID/PID, devices are selected by sensor index. On S100, the apx003cc sensor configuration (linear_4096x256_raw8) has index 9 (the sample gets this default injected by CMake per architecture).

Prerequisites

All of the following cross-compiles on an x86_64 host (no build environment needed on the board):

# 1) aarch64 cross toolchain (the Ubuntu system package is enough)
sudo apt-get install -y g++-aarch64-linux-gnu

# 2) S100 board sysroot (evs_device_vendor_sdk repo; gitee and github have identical content)
git clone https://gitee.com/ShiMetaPi_0/evs_device_vendor_sdk.git      # recommended in China
# git clone https://github.com/ShiMetaPi/evs_device_vendor_sdk.git    # overseas mirror
export S100_SYSROOT=$PWD/evs_device_vendor_sdk/source/hobot-multimedia/debian/usr

Core code

Teaching version — the flow that get_started --mipi runs on the board (EVS-only single VC, device selected by sensor index):

#include <shimetapi/hv/camera.h>
#include <shimetapi/hv/device_config.h>
#include <shimetapi/codec/mipi_raw8_codec.h>
#include <iostream>
#include <vector>

int main() {
    Shimeta::hv::Camera cam;
    Shimeta::hv::DeviceConfig cfg;
    cfg.backend      = Shimeta::hv::Backend::Mipi;   // EVS-only single VC
    cfg.sensor_index = 9;                            // S100: index of apx003cc linear_4096x256_raw8

    cam.Init(cfg);
    if (!cam.StartStream()) {
        std::cerr << "Failed to start the MIPI device" << std::endl;
        return 1;
    }
    std::cout << "MIPI device started" << std::endl;

    // MIPI Frame.evs is an apx003 RAW8 subframe stream → use MipiRaw8Decoder (not Evt2Decoder)
    Shimeta::codec::MipiRaw8Decoder dec;
    Shimeta::Frame f;
    for (int i = 0; i < 10; ++i) {
        if (cam.GetFrame(f, 1000)) {
            std::vector<Shimeta::EventCD> events;
            dec.Decode(f.evs.data, f.evs.size, events);   // adapts to the subframe count by data length
            std::cout << "frame " << i << ": decoded " << events.size() << " events" << std::endl;
        }
    }

    cam.StopStream();
    cam.Destroy();
    return 0;
}

MIPI's Frame.evs is a RAW8 subframe stream and must be decoded with MipiRaw8Decoder, not Evt2Decoder — this is the only decoding difference between USB and MIPI.

Build and deploy

./run.sh build s100    # the aarch64 toolchain file is injected automatically (toolchains/toolchain-aarch64-linux-gnu.cmake)
file out/s100/build/samples/cpp/get_started/hv_sample_get_started   # verify: should be ELF aarch64

out/s100/build is a self-contained directory — the build bundles the libshimetapi_*.so libraries from lib/s100 into it, and the sample rpath resolves via $ORIGIN, so copying the whole directory onto the board is enough to run:

# On the host: deploy to the board
scp -r out/s100/build root@<board-IP>:/app/

# Run on the board (this is the mode of the core code above)
export LD_LIBRARY_PATH=/app/build    # prebuilt libs and executables live in the same build directory
/app/build/samples/cpp/get_started/hv_sample_get_started --mipi                    # EVS-only, sensor_index defaults to 9
/app/build/samples/cpp/get_started/hv_sample_get_started --mipi --sensor-index 9   # explicit index

No cross-compilation environment needed on the board

S100_SYSROOT, the aarch64 toolchain, etc. are only used on the build host; the board runs out of the box. OpenCV-based samples (player / live_record_display) also need the repo's third_party/aarch64_opencv/lib/aarch64-linux-gnu copied onto the board with export LD_LIBRARY_PATH pointing to it.

3. X5 (MIPI / cross-compilation)

X5 works the same way as S100 (same API, same samples); only three things differ: the SDK path environment variable, the sensor_index default, and the APS output format.

Prerequisites

# 1) aarch64 cross toolchain (same as S100)
sudo apt-get install -y g++-aarch64-linux-gnu

# 2) X5 SDK source tree (evs_device_vendor_sdk repo, x5_v3.4.1 branch; gitee and github have identical content)
git clone -b x5_v3.4.1 --single-branch https://gitee.com/ShiMetaPi_0/evs_device_vendor_sdk.git
# or (overseas) git clone -b x5_v3.4.1 --single-branch https://github.com/ShiMetaPi/evs_device_vendor_sdk.git
export X5_SDK_ROOT=$PWD/evs_device_vendor_sdk    # tells the build script where the SDK is

Core code, build, and deploy

The code is line-for-line identical to the S100 section (same Camera API + MipiRaw8Decoder) and cross-compiles without source changes — X5's differences are only in build configuration and on-board output, so build directly:

./run.sh build x5      # reads X5_SDK_ROOT
file out/x5/build/samples/cpp/get_started/hv_sample_get_started     # should be ELF aarch64

# Deploy and run like S100: copy the whole directory onto the board, set LD_LIBRARY_PATH there first
scp -r out/x5/build root@<board-IP>:/app/
export LD_LIBRARY_PATH=/app/build    # run on the board
/app/build/samples/cpp/get_started/hv_sample_get_started --mipi     # EVS-only, sensor_index defaults to 49

4. RK3588 (pending)

The RK3588 platform is not yet adapted: the current release ships no lib/rk3588 prebuilt library, ./run.sh has no rk3588 build target yet, and ./run.sh --list won't list this architecture for now.

  • No code changes needed in advance: once adapted it will still use Backend::Mipi (EVS-only) with the same Camera API and MipiRaw8Decoder — you'll only need to rebuild the samples against the lib/rk3588 prebuilt library.
  • Still to come: the lib/rk3588 prebuilt library (aarch64) + cross-compilation integration against the matching board sysroot + on-board validation (including the sensor_index table).
  • Watch Downloads for release updates, or contact technical support.

5. Creating a new program

Creating a new sample under samples/cpp/ (say my_demo) requires 3 changes, all mandatory — skipping ② or ③ means your sample never gets compiled. These changes are the same for USB, S100, and X5; in main.cpp pick the USB or MIPI core code from this page for your target platform.

① Create the sample

samples/cpp/my_demo/
├── CMakeLists.txt    # sample build script
└── main.cpp          # sample source (either USB or MIPI backend)

CMakeLists.txt can copy get_started's verbatim (link the IMPORTED targets defined by the root CMakeLists; no need to spell out header paths or .so locations):

add_executable(hv_sample_my_demo main.cpp)
target_link_libraries(hv_sample_my_demo PRIVATE
    HVToolkit::shimetapi_hv HVToolkit::shimetapi_codec HVToolkit::shimetapi_io)
  • Multiple source files: append to add_executable, e.g. add_executable(hv_sample_my_demo main.cpp utils.cpp)
  • Need OpenCV (display-window samples): copy the conditional block from samples/cpp/player/CMakeLists.txt; when cross-compiling it automatically uses third_party/aarch64_opencv, so OpenCV doesn't need to be installed on the board.

② Register the subdirectory

add_subdirectory(cpp/my_demo)

Without this line the directory won't be compiled even though it exists.

③ Add the dependency

Find add_dependencies(bundle_libs ...) (around line 119) and append the new target name:

add_dependencies(bundle_libs
    hv_sample_get_started hv_sample_callback hv_sample_record hv_sample_viewer
    hv_sample_bench_hw hv_sample_live_record_display hv_sample_player
    hv_sample_my_demo)   # ← added

This step ensures "bundle the prebuilt libs into the build root" happens after your new sample builds. It compiles without it, but the deploy directory may end up missing libraries.

④ Register the sample (optional)

SAMPLE_NAMES="get_started callback record viewer bench_hw live_record_display player my_demo"

This only affects whether ./run.sh samples lists the new sample (OK/MISS status); it has nothing to do with compilation.

Build and run

PlatformBuildRun
USB (x86_64)./run.sh build./out/x86_64/build/samples/cpp/my_demo/hv_sample_my_demo
S100 (MIPI)./run.sh build s100After deploying out/s100/build, run /app/build/samples/cpp/my_demo/hv_sample_my_demo --mipi
X5 (MIPI)./run.sh build x5After deploying out/x5/build, run /app/build/samples/cpp/my_demo/hv_sample_my_demo --mipi

For S100 and X5, the cross-compilation prerequisites and deployment environment variables follow their respective platform sections; the MIPI sensor_index defaults are 9 and 49 respectively.

If artifacts misbehave after editing CMakeLists

CMake caches old target dependencies. If behavior doesn't match expectations after an edit, delete the corresponding out/<arch>/build and rebuild.

6. More information

S100 vs X5 differences

S100X5
SDK environment varS100_SYSROOTX5_SDK_ROOT
sensor_index default¹949
APS output format²NV12 (color)Gray8 (gray)

¹ Both are indexes of the apx003cc linear_4096x256_raw8 configuration — X5's SDK sensor list is longer, so the same configuration lands at 49.

² On S100 the APS goes through ISP/PYM and outputs NV12; on X5 the current ISP 2A ioctl is restricted, so the APS takes the VIN direct-read RAW10→Gray8 bypass — this is expected behavior (not a fault); applications just branch on Frame.format when decoding.

7. Further reading

  • Full API reference: C++ API
  • Task-based deep dives: Programming Guides (open camera → read events → record → denoise → display → tune)
  • Samples overview: Samples Overview
  • Full board-side workflow (flashing images, hardware connection): RDK S100 Carrier Board / RDK X5 Carrier Board
Edit this page on GitHub
Prev
Downloads
Next
Python Data Analysis