Skip to main content
The IQ9-EVK supports camera sensor connectivity through four MIPI CSI interfaces, supporting both C-PHY and D-PHY modes.

Hardware Architecture

CSI Interface Mapping

CSI InterfaceAnalog SwitchCamera ConnectorB2B Connector
CSI0U45 (TMUX646ZECR)JCAM0JEXP4, Pins 111–120
CSI1U42 (TMUX646ZECR)JCAM1JEXP4, Pins 51–60
CSI2U44 (TMUX646ZECR)JCAM2JEXP4, Pins 40–49
CSI3U43 (TMUX646ZECR)JCAM3JEXP4, Pins 29–38

DIP Switch Configuration

The four CSI PHYs can be routed to either MIPI camera ports or GMSL camera ports (via mezzanine board) using DIP switches.
SW1 is the left series of switches in the image above.
SwitchONOFF (default)
SW1-5CSI0 → GMSL mezzanineCSI0 → mainboard
SW1-6CSI1 → GMSL mezzanineCSI1 → mainboard
SW1-7CSI2 → GMSL mezzanineCSI2 → mainboard
SW1-8CSI3 → GMSL mezzanineCSI3 → mainboard

Supported Camera Sensors

Raspberry Pi Camera Sensors

Flex cable (Arducam 22-pin Raspberry Pi to Qualcomm 30-pin CSI adapter):

MIPI CSI Camera Sensors

Supported Resolutions

ResolutionAspect RatioIMX577OV9282
4000 × 30004:3YesNo
3840 × 216016:9YesNo
1920 × 108016:9YesNo
1280 × 72016:9YesYes
1024 × 7684:3YesYes
800 × 6004:3YesYes
640 × 4804:3YesYes
320 × 2404:3YesYes
Advanced features such as SHDR, LDC, and EIS are not supported on IQ-9075. There is no hardware JPEG encoder — snapshots use a software encoder running on the CPU.

Camera Streaming

Single Camera Stream

gst-launch-1.0 -e qtiqmmfsrc name=camsrc camera=0 ! \
  'video/x-raw,format=NV12,width=1280,height=720,framerate=30/1' ! fakesink
If the pipeline status changes to PLAYING, the camera is running. Press Ctrl+C to stop.

Video Encoding

gst-launch-1.0 -e qtiqmmfsrc name=camsrc camera=0 ! \
  video/x-raw,format=NV12,width=1280,height=720,framerate=30/1,\
  interlace-mode=progressive,colorimetry=bt601 ! \
  v4l2h264enc capture-io-mode=4 output-io-mode=5 \
  extra-controls="controls,video_bitrate=6000000,video_bitrate_mode=0;" ! \
  h264parse ! mp4mux ! filesink location=/home/ubuntu/mux_avc.mp4
Retrieve the file:
scp -r ubuntu@<ip-addr>:/home/ubuntu/mux_avc.mp4 .

Object Detection Pipeline

Download required models and assets first:
cd /home/ubuntu
curl -L -O https://raw.githubusercontent.com/quic/sample-apps-for-qualcomm-linux/refs/heads/main/qualcomm-linux/scripts/download_artifacts.sh
sudo chmod +x download_artifacts.sh && sudo ./download_artifacts.sh
Then run the object detection pipeline:
gst-launch-1.0 -e qtivcomposer name=mixer \
  sink_0::position="<0, 0>" sink_0::dimensions="<640, 360>" \
  sink_1::position="<640, 0>" sink_1::dimensions="<640, 360>" \
  mixer. ! queue ! waylandsink enable-last-sample=false fullscreen=true \
  qtiqmmfsrc name=camsrc_0 camera=0 multicamera-hint=true ! \
  video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 ! queue ! \
  tee name=split_0 split_0. ! queue ! qtimetamux name=mux_0 ! queue ! \
  qtivoverlay ! queue ! mixer. split_0. ! queue ! qtimlvconverter ! queue ! \
  qtimltflite delegate=external external-delegate-path=libQnnTFLiteDelegate.so \
  external-delegate-options="QNNExternalDelegate,backend_type=htp;" \
  model=/etc/models/yolox_quantized.tflite ! queue ! \
  qtimlpostprocess settings="{\"confidence\": 75.0}" results=10 module=yolov8 \
  labels=/etc/labels/yolox.json ! text/x-raw ! queue ! mux_0.

Video Encoding + Snapshot

1

Start the pipeline

gst-pipeline-app -e qtiqmmfsrc name=camsrc camera=0 ! \
  video/x-raw,format=NV12,width=1280,height=720,framerate=30/1,\
  interlace-mode=progressive,colorimetry=bt601 ! queue ! \
  v4l2h264enc capture-io-mode=4 output-io-mode=5 \
  extra-controls="controls,video_bitrate_mode=0,video_bitrate=6000000;" ! \
  queue ! h264parse ! mp4mux ! queue ! \
  filesink location="/home/ubuntu/mux_720_avc.mp4" \
  camsrc.image_1 ! "image/jpeg,width=1280,height=720,framerate=30/1" ! \
  multifilesink location=/home/ubuntu/frame%d.jpg async=false sync=true \
  enable-last-sample=false
2

Take a snapshot

From the interactive menu: (1) Ready → (3) Playing → (p) Plugin Mode → (11) camerasrc → (37) capture-image → (1) Snapshot → enter count
3

Stop and retrieve files

Press Enter → b (Back) → q (Quit).
scp -r ubuntu@<ip-addr>:/home/ubuntu/<filename> .

Multi-Camera with Offline IFE

The IQ-9075 has two IFEs for real-time bayer-to-YUV processing. The Offline IFE feature allows a single IFE to process two cameras in offline mode, enabling concurrent streaming from all four cameras.
A maximum of two cameras can operate concurrently with real-time IFE. All four cameras can operate concurrently using the Offline IFE feature.
Run the 4-camera AI inference pipeline with multicamera-hint=true on each qtiqmmfsrc source. See the single-camera object detection pipeline above for the pattern — replicate for camera=1, camera=2, and camera=3.

Verify Multi-Camera Operation

User log — look for:
RealTimeFeatureZSLPreviewRawOfflineIFE_0_cam_0 status is now PipelineStatus::STREAM_ON
Kernel log — look for:
Acquired Single IFE[0] SFE[0] OFFLINE: Y with [9 pix] [0 pd] [0 rdi] ports for ctx:1

Troubleshooting

1

Check camera module connection and DIP switch settings

2

Restart cam-server

systemctl restart cam-server
# or
pkill cam-server
3

Run a single-stream test

gst-launch-1.0 -e qtiqmmfsrc name=camsrc camera=0 ! \
  video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 ! fakesink
Collect logs and search for probe success:
journalctl -f > /home/ubuntu/log.txt
Expected probe success log:
CAM_INFO: CAM-SENSOR: Probe success, slot:0, slave_addr: 0x34, sensor_id:0x577
If no probe success appears, check the flex cable connection or camera module.
Enable CSI debug logs and collect dmesg:
sudo su
echo 3 > /sys/kernel/debug/camera/ife/ife_csid_debug
dmesg -w > /home/ubuntu/dmesg.txt
Start the camera and check for SOF/EOF IRQ messages in the log.

Collect Debug Logs

journalctl -f > /home/ubuntu/user_log.txt   # User space logs
dmesg -w > /home/ubuntu/kernel_log.txt       # Kernel logs

Resources

TopicLink
Camera ArchitectureCamera Architecture
Camera Sensor Driver DevelopmentCamera Sensor Driver Development
Customize Camera Use Case and PipelineCustomize Camera Use Case and Pipeline
Customize Advanced Camera FeaturesCustomize Advanced Camera Features