# EIS 和 LDC 用例

Source: [https://docs.qualcomm.com/doc/80-70014-17Y/topic/eis_and_ldc_use_cases_public.html](https://docs.qualcomm.com/doc/80-70014-17Y/topic/eis_and_ldc_use_cases_public.html)

本节介绍 EIS 和 LDC 功能以及如何运行其各种用例。

电子图像稳定 (EIS) 是一种使用电子处理的图像增强技术。EIS 可最大限度地减少模糊并补偿设备抖动。EIS 从 IMU 传感器获取运动数据，并生成变换矩阵，以补偿所有三个方向上的器件力矩。陀螺仪传感器提供俯仰、偏航和侧倾运动。在 Qualcomm Adreno GPU 上运行的图像扭转库模块根据生成的变换矩阵对图像进行扭转。iWarp 库使用 OpenGL API 进行扭转。

镜头畸变校正 (LDC) 是一个校正因鱼眼镜头而引起的畸变的过程，它使场景中的直线由于镜头的畸变而被拍摄为曲线。使用镜头的校准过程生成静态网格。在 Qualcomm Adreno GPU 上运行的图像扭转库模块根据生成的静态网格对图像进行扭转。iWarp 库使用 OpenGL API 进行扭转。

EIS 和 LDC 可以独立运行，也可以同时运行。以下是 EIS 和 LDC 用例中可能出现的 GST 命令选项：

| GST 命令选项 | 说明 |
| --- | --- |
| `eis=1` | 仅在第一个流上启用 EIS |
| `eis=2` | 在两个流上启用 EIS |
| `ldc=1` | 在所有流（1 或 2）上启用 LDC |
| `eis=1, ldc=1` | 仅在第一个流上启用 EIS 和 LDC |
| `eis=2, ldc=1` | 在两个流上启用 EIS 和 LDC |

Note: 使用 SSH 连接到设备控制台。相关说明，请参见[如何使用 SSH？](https://docs.qualcomm.com/bundle/publicresource/topics/80-70014-254/how_to.html#how-to-ssh-)确保在 Permissive 模式下启用 SSH。

## EIS 单流用例

使用以下 GStreamer 命令启用此用例：

    gst-launch-1.0 -e qtiqmmfsrc name=camsrc eis=1 ! \
    video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! \
    v4l2h264enc capture-io-mode=5 output-io-mode=5 extra-controls="controls,video_bitrate=6000000,\
    video_bitrate_mode=0;" ! h264parse ! mp4mux ! filesink location=/opt/cam_1080p.mp4
    Copy to clipboard

使用以下日志验证是否选择了此用例：

    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
    Copy to clipboard

## 在两个流中的第一个启用 EIS 的用例

使用以下 GStreamer 命令启用此用例：

    gst-launch-1.0 -e qtiqmmfsrc name=camsrc eis=1 video_0::type=preview ! \
    video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! \
    v4l2h264enc capture-io-mode=5 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\(memory:GBM\),format=NV12,width=1280,height=720,framerate=30/1,\
    interlace-mode=progressive,colorimetry=bt601 ! v4l2h264enc capture-io-mode=5 \
    output-io-mode=5 extra-controls="controls,video_bitrate=6000000,video_bitrate_mode=0;" \
    ! h264parse ! mp4mux ! filesink location=/opt/cam_vid.mp4
    Copy to clipboard

使用以下日志验证是否选择了此用例：

    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
    Copy to clipboard

## 在两个流上启用 EIS

使用以下 GStreamer 命令启用此用例：

    gst-launch-1.0 -e qtiqmmfsrc name=camsrc eis=2 video_0::type=preview ! \
    video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! \
    v4l2h264enc capture-io-mode=5 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\(memory:GBM\),format=NV12,width=1280,height=720,framerate=30/1,\
    interlace-mode=progressive,colorimetry=bt601 ! v4l2h264enc capture-io-mode=5 \
    output-io-mode=5 extra-controls="controls,video_bitrate=6000000,video_bitrate_mode=0;" \
    ! h264parse ! mp4mux ! filesink location=/opt/cam_vid.mp4
    Copy to clipboard

使用以下日志验证是否选择了此用例：

    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
    Copy to clipboard

## LDC 单流用例

使用以下 GStreamer 命令启用此用例：

    gst-launch-1.0 -e qtiqmmfsrc name=camsrc ldc=1 ! \
    video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! \
    v4l2h264enc capture-io-mode=5 output-io-mode=5 extra-controls="controls,video_bitrate=6000000,\
    video_bitrate_mode=0;" ! h264parse ! mp4mux ! filesink location=/opt/cam_1080p.mp4
    Copy to clipboard

使用以下日志验证是否选择了此用例：

    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
    Copy to clipboard

## 在两个流上启用LDC的用例

使用以下 GStreamer 命令启用此用例：

    gst-launch-1.0 -e qtiqmmfsrc name=camsrc ldc=1 video_0::type=preview ! \
    video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! \
    v4l2h264enc capture-io-mode=5 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\(memory:GBM\),format=NV12,width=1280,height=720,\
    framerate=30/1,interlace-mode=progressive,colorimetry=bt601 ! v4l2h264enc capture-io-mode=5 \
    output-io-mode=5 extra-controls="controls,video_bitrate=6000000,video_bitrate_mode=0;" ! \
    h264parse ! mp4mux ! filesink location=/opt/cam_vid.mp4
    Copy to clipboard

使用以下日志验证是否选择了此用例：

    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
    Copy to clipboard

## EIS 和 LDC 单流用例

使用以下 GStreamer 命令启用此用例：

    gst-launch-1.0 -e qtiqmmfsrc name=camsrc eis=1 ldc=1 ! \
    video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 \
    ! v4l2h264enc capture-io-mode=5 output-io-mode=5 extra-controls="controls,video_bitrate=6000000,\
    video_bitrate_mode=0;" ! h264parse ! mp4mux ! filesink location=/opt/cam_1080p.mp4
    Copy to clipboard

使用以下日志验证是否选择了此用例：

    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
    Copy to clipboard

## 在两个流中的第一个流启用 EIS 和 LDC 的用例

使用以下 GStreamer 命令启用此用例：

    gst-launch-1.0 -e qtiqmmfsrc name=camsrc eis=1 ldc=1 video_0::type=preview ! \
    video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! \
    v4l2h264enc capture-io-mode=5 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\(memory:GBM\),format=NV12,width=1280,height=720,framerate=30/1,\
    interlace-mode=progressive,colorimetry=bt601 ! v4l2h264enc capture-io-mode=5 \
    output-io-mode=5 extra-controls="controls,video_bitrate=6000000,video_bitrate_mode=0;" ! \
    h264parse ! mp4mux ! filesink location=/opt/cam_vid.mp4
    Copy to clipboard

使用以下日志验证是否选择了此用例：

    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
    Copy to clipboard

## 在两个流上启用EIS 和 LDC 的用例

使用以下 GStreamer 命令启用此用例：

    gst-launch-1.0 -e qtiqmmfsrc name=camsrc eis=2 ldc=1 video_0::type=preview ! \
    video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1 ! \
    v4l2h264enc capture-io-mode=5 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\(memory:GBM\),format=NV12,width=1280,height=720,\
    framerate=30/1,interlace-mode=progressive,colorimetry=bt601 ! v4l2h264enc capture-io-mode=5 \
    output-io-mode=5 extra-controls="controls,video_bitrate=6000000,video_bitrate_mode=0;" ! \
    h264parse ! mp4mux ! filesink location=/opt/cam_vid.mp4
    Copy to clipboard

使用以下日志验证是否选择了此用例：

    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
    Copy to clipboard

**Parent Topic:** [高级摄像头功能](https://docs.qualcomm.com/doc/80-70014-17Y/topic/advanced_camera_features.html)

Last Published: Oct 23, 2024

[Previous Topic
SHDR](https://docs.qualcomm.com/bundle/publicresource/80-70014-17Y/topics/shdr_public.md) [Next Topic
SHDR、EIS 和 LDC 并发用例](https://docs.qualcomm.com/bundle/publicresource/80-70014-17Y/topics/shdr_eis_and_ldc_concurrency_use_cases_public.md)