QCS6490Stable
Platform Scope
This section is only applicable for QCS6490.
01 · What Is It?
Electronic Image Stabilization (EIS) and Lens Distortion Correction (LDC) are advanced image enhancement techniques that mitigate physical artifacts and optical distortions in real-time.
- EIS: Minimizes blurring by compensating for device shake. It processes motion data (pitch, yaw, and roll) from the IMU sensor to generate transformation matrices for precise GPU-based warping.
- LDC: Corrects geometric distortion introduced by fisheye or wide-angle lenses. It maps curved lines back to straight edges using a static mesh generated during lens calibration.
Both features utilize the iWarp library module running on the GPU, leveraging the OpenGL API for high-performance image warping.
02 · Command Options
EIS and LDC can be deployed independently or concurrently using the following qtiqmmfsrc parameters:
| GST Command Option | Description |
|---|
eis=1 | Enables EIS on the first stream only |
eis=2 | Enables EIS on two streams |
ldc=1 | Enables LDC on all active (1 or 2) streams |
eis=1, ldc=1 | Enables EIS and LDC on the first stream only |
eis=2, ldc=1 | Enables EIS and LDC on two streams |
03 · How Do I Change It?
Follow these steps to initialize the device environment and capture verification logs.
Connect to the device console using SSH. See How To SSH? for instructions.
Initialize log collection
Monitor the system journal to verify pipeline state changes and feature initialization.journalctl -f > /opt/log.txt
Execute GStreamer Pipeline
Choose a use case from the sections below and run the corresponding command.
Verify Feature Status
Check the log output for specific CamX and cam-server status strings to confirm the GPU warping nodes are active.
04 · Feature Validation
EIS single stream use case
Use the following GStreamer command to enable this use case:
GStreamer (EIS Single Stream)
gst-launch-1.0 -e qtiqmmfsrc name=camsrc eis=1 ! \
video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! \
v4l2h264enc capture-io-mode=4 output-io-mode=5 extra-controls="controls,video_bitrate=6000000,\
video_bitrate_mode=0;" ! h264parse ! mp4mux ! filesink location=/opt/cam_1080p.mp4
Verify this use case is selected using the following logs:
Log Verification (EIS Single Stream)
cam-server[926]: [INFO]: RecorderCameraContext : OpenCamera: EIS on single stream is ON..
cam-server[908]: CamX: [ INFO]908 981 [CHI ] camxchinodeeisdgv26.cpp:1346 Initialize() m_nodeCaps 131072
cam-server[908]: CamX: [CORE_CFG]908 1796 [CORE ] camxpipeline.h:3024 SetPipelineStatus() RealTimeFeatureZSLPreviewRawYuvEisIoT_0 status is now PipelineStatus::STREAM_ON
EIS enabled on first of two streams use case
Use the following GStreamer command to enable this use case:
GStreamer (EIS on Stream 1/2)
gst-launch-1.0 -e qtiqmmfsrc name=camsrc eis=1 video_0::type=preview ! \
video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! \
v4l2h264enc capture-io-mode=4 output-io-mode=5 \
extra-controls="controls,video_bitrate=6000000,video_bitrate_mode=0;" ! \
h264parse ! mp4mux ! filesink location=/opt/cam_prev.mp4 camsrc. ! \
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=/opt/cam_vid.mp4
Verify this use case is selected using the following logs:
Log Verification (EIS on Stream 1/2)
cam-server[926]: [INFO]: RecorderCameraContext : OpenCamera: EIS on single stream is ON..
cam-server[926]: CamX: [ INFO]926 988 [CHI ] camxchinodeeisdgv26.cpp:1346 Initialize() m_nodeCaps 131072
cam-server[926]: CamX: [CORE_CFG]926 2529 [CORE ] camxpipeline.h:3024 SetPipelineStatus() RealTimeFeatureZSLPreviewRawYuvEisIoT_0 status is now PipelineStatus::STREAM_ON
EIS enabled on two streams
Use the following GStreamer command to enable this use case:
GStreamer (EIS Dual Stream)
gst-launch-1.0 -e qtiqmmfsrc name=camsrc eis=2 video_0::type=preview ! \
video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! \
v4l2h264enc capture-io-mode=4 output-io-mode=5 \
extra-controls="controls,video_bitrate=6000000,video_bitrate_mode=0;" ! \
h264parse ! mp4mux ! filesink location=/opt/cam_prev.mp4 camsrc. ! \
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=/opt/cam_vid.mp4
Verify this use case is selected using the following logs:
Log Verification (EIS Dual Stream)
cam-server[914]: [INFO]: RecorderCameraContext : OpenCamera: EIS on dual stream is ON..
cam-server[914]: CamX: [ INFO]914 960 [CHI ] camxchinodeeisdgv26.cpp:1346 Initialize() m_nodeCaps 131072
cam-server[914]: CamX: [CORE_CFG]914 2421 [CORE ] camxpipeline.h:3024 SetPipelineStatus() RealTimeFeatureZSLPreviewRawYuvEisIoT_0 status is now PipelineStatus::STREAM_ON
LDC single stream use case
Use the following GStreamer command to enable this use case:
GStreamer (LDC Single Stream)
gst-launch-1.0 -e qtiqmmfsrc name=camsrc ldc=1 ! \
video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! \
v4l2h264enc capture-io-mode=4 output-io-mode=5 extra-controls="controls,video_bitrate=6000000,\
video_bitrate_mode=0;" ! h264parse ! mp4mux ! filesink location=/opt/cam_1080p.mp4
Verify this use case is selected using the following logs:
Log Verification (LDC Single Stream)
cam-server[926]: [INFO]: RecorderCameraContext : OpenCamera: EIS is disabled cam-server[926]: [INFO]: RecorderCameraContext : OpenCamera: LDC is ON..
cam-server[926]: CamX: [ INFO]926 990 [CHI ] camxchinodeeisdgv26.cpp:1346 Initialize() m_nodeCaps 524288
cam-server[926]: CamX: [CORE_CFG]926 2132 [CORE ] camxpipeline.h:3024 SetPipelineStatus() RealTimeFeatureZSLPreviewRawYuvEisIoT_0 status is now PipelineStatus::STREAM_ON
LDC enabled on two streams use case
Use the following GStreamer command to enable this use case:
GStreamer (LDC Dual Stream)
gst-launch-1.0 -e qtiqmmfsrc name=camsrc ldc=1 video_0::type=preview ! \
video/x-raw,format= NV12,width=1920,height=1080,framerate=30/1 ! \
v4l2h264enc capture-io-mode=4 output-io-mode=5 extra-controls="controls,video_bitrate=6000000,\
video_bitrate_mode=0;" ! h264parse ! mp4mux ! filesink location=/opt/cam_prev.mp4 \
camsrc. ! 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=/opt/cam_vid.mp4
Verify this use case is selected using the following logs:
Log Verification (LDC Dual Stream)
cam-server[914]: [INFO]: RecorderCameraContext : OpenCamera: EIS is disabled cam-server[914]: [INFO]: RecorderCameraContext : OpenCamera: LDC is ON..
cam-server[914]: CamX: [ INFO]914 966 [CHI ] camxchinodeeisdgv26.cpp:1346 Initialize() m_nodeCaps 524288
cam-server[914]: CamX: [CORE_CFG]914 1591 [CORE ] camxpipeline.h:3024 SetPipelineStatus() RealTimeFeatureZSLPreviewRawYuvEisIoT_0 status is now PipelineStatus::STREAM_ON
EIS and LDC single stream use case
Use the following GStreamer command to enable this use case:
GStreamer (EIS + LDC Single Stream)
gst-launch-1.0 -e qtiqmmfsrc name=camsrc eis=1 ldc=1 ! \
video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 \
! v4l2h264enc capture-io-mode=4 output-io-mode=5 extra-controls="controls,video_bitrate=6000000,\
video_bitrate_mode=0;" ! h264parse ! mp4mux ! filesink location=/opt/cam_1080p.mp4
Verify this use case is selected using the following logs:
Log Verification (EIS + LDC Single Stream)
cam-server[914]: [INFO]: RecorderCameraContext : OpenCamera: EIS on single stream is ON..
cam-server[914]: [INFO]: RecorderCameraContext : OpenCamera: LDC is ON.. cam-server[914]: CamX: [CORE_CFG]914 2621 [CORE ] camxpipeline.h:3024 SetPipelineStatus() RealTimeFeatureZSLPreviewRawYuvEisIoT_0 status is now PipelineStatus::STREAM_ON
EIS and LDC enabled on first of two streams use case
Use the following GStreamer command to enable this use case:
GStreamer (EIS + LDC on Stream 1/2)
gst-launch-1.0 -e qtiqmmfsrc name=camsrc eis=1 ldc=1 video_0::type=preview ! \
video/x-raw,format= NV12,width=1920,height=1080,framerate=30/1 ! \
v4l2h264enc capture-io-mode=4 output-io-mode=5 extra-controls="controls,video_bitrate=6000000,\
video_bitrate_mode=0;" ! h264parse ! mp4mux ! filesink location=/opt/cam_prev.mp4 camsrc. ! \
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=/opt/cam_vid.mp4
Verify this use case is selected using the following logs:
Log Verification (EIS + LDC on Stream 1/2)
cam-server[2661]: [INFO]: RecorderCameraContext : OpenCamera: EIS on single stream is ON..
cam-server[2661]: CamX: [ INFO]2661 2663 [CHI ]
camxchinodeeisdgv26.cpp:1346 Initialize() m_nodeCaps 262144
cam-server[2661]: CamX: [CORE_CFG]2661 2834 [CORE ] camxpipeline.h:3024 SetPipelineStatus() RealTimeFeatureZSLPreviewRawYuvEisIoT_0 status is now PipelineStatus::STREAM_ON
EIS and LDC enabled on two streams use case
The EIS and LDC enabled on two streams use case is currently not supported.
Use the following GStreamer command to enable this use case:
GStreamer (EIS + LDC Dual Stream)
gst-launch-1.0 -e qtiqmmfsrc name=camsrc eis=2 ldc=1 video_0::type=preview ! \
video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! \
v4l2h264enc capture-io-mode=4 output-io-mode=5 extra-controls="controls,video_bitrate=6000000,\
video_bitrate_mode=0;" ! h264parse ! mp4mux ! filesink location=/opt/cam_prev.mp4 camsrc. ! \
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=/opt/cam_vid.mp4
Verify this use case is selected using the following logs:
Log Verification (EIS + LDC Dual Stream)
cam-server[882]: [INFO]: RecorderCameraContext : OpenCamera: EIS on dual stream is ON..
cam-server[882]: CamX: [ INFO]882 977 [CHI ] camxchinodeeisdgv26.cpp:1346 Initialize() m_nodeCaps 262144
cam-server[882]: CamX: [CORE_CFG]882 1613 [CORE ] camxpipeline.h:3024 SetPipelineStatus() RealTimeFeatureZSLPreviewRawYuvEisIoT_0 status is now PipelineStatus::STREAM_ON