# Migrate to Qualcomm Linux 1.4 or later releases

Consider the following key updates and improvements to learn how to migrate from the Qualcomm^®^ Linux^®^ 1.3 release to Qualcomm Linux 1.4 or later releases.

Qualcomm Linux 1.4 and later releases have the latest long-term support (LTS) version of Yocto 5.0, known as Yocto `scarthgap`. The generic buffer management (GBM) memory manager and Weston drivers are now upstream, replacing the downstream versions used in 1.3 and earlier releases.

If you’re new to Qualcomm Linux and using the latest 1.5 release, there’s no need to migrate your software. For the list of new features, enhancements, and limitations of the latest release, see [Qualcomm Linux 1.5 Release Notes](https://docs.qualcomm.com/bundle/publicresource/topics/RNO-250630224842/).

## Changes in Yocto

The changes in Yocto for the 1.4 and later releases are as follows:

- Upgraded the Yocto release from `kirkstone` (v4.0.22) to `scarthgap` (v5.0.6). For the features and enhancements of `scarthgap`, see [Release notes for 5.0 (scarthgap)](https://docs.yoctoproject.org/5.0.6/singleindex.html#release-notes-for-5-0-scarthgap).
- Upgraded the GNU Compiler Collection (GCC) compiler to v13.2. To avoid compatibility issues, recompile any prebuilt applications with the latest Qualcomm Linux release.

## Changes in memory manager

In the 1.4 and later releases, the upstream [`libgbm` package](https://git.openembedded.org/openembedded-core/tree/meta/recipes-graphics/mesa?h=scarthgap&amp;id=00a662c5e28235fb64348aab4ce9aeb5e7f95d06) for memory management replaces the downstream variant.
This change affects the memory formats and GBM functionality across display, graphics, video, and camera modules.

For the list of formats supported by the upstream GBM, see the [`mesa` repository](https://gitlab.freedesktop.org/mesa/mesa/-/blob/main/src/gbm/main/gbm.h).

## Changes in display

In the 1.4 and later releases, the display stack of the QCS6490 and QCS5430 system-on-chip (SoC) platforms is now upstream, eliminating the need for the proprietary Snapdragon^®^ Display Manager (SDM) backend. The IQ-8275 and IQ-9075 SoC platforms already use an upstream display stack.

Due to this migration, some features that depend on the SDM component aren’t available by default. If you need these features, you can switch the display stack to the downstream implementation.

To enable these features in 1.4 and later releases, use the information in the following table:

| Feature | Enable in 1.4 and later releases |
| --- | --- |
| Embedded DisplayPort (eDP) support | Enable the downstream path as described in [Qualcomm Linux Display Guide - Addendum](https://docs.qualcomm.com/bundle/resource/topics/80-70020-18A/configure.html#enable-display-downstream-drivers). |
| Type-C over DisplayPort (DP) | Enable the downstream path as described in [Qualcomm Linux Display Guide - Addendum](https://docs.qualcomm.com/bundle/resource/topics/80-70020-18A/configure.html#enable-display-downstream-drivers). |
| Prebuild modetest binary | In the `libdrm_2.4.120.bb` file, enable the `install-test-programs` option. For more information, see [Qualcomm Linux Display Guide](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-18/samples.html#run-drm-mode-test). |

## Changes in camera

In the 1.4 and later releases, the buffer management utility uses the upstream GBM component instead of the downstream component. Therefore, change the Qualcomm Intelligent Multimedia (IM) commands that invoke camera buffer management.

The default format for raw buffers is now `memory:GBM`. Don’t specify the memory format in the `gst` commands.

**Pipeline example**

- The pipeline for the 1.3 release is as follows:

gst-launch-1.0 qtiqmmfsrc name=camsrc video_0::type=preview ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1,compression=ubwc ! waylandsink fullscreen=true async=true sync=false
        Copy to clipboard
- The pipeline for the 1.4 and later releases is as follows:

gst-launch-1.0 -e qtiqmmfsrc name=camsrc video_1::type=preview ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1,interlace-mode=progressive,colorimetry=bt601 ! waylandsink fullscreen=true sync=false
        Copy to clipboard

For more information about changes in the plugins, see [Changes in Qualcomm IM SDK](https://docs.qualcomm.com/doc/80-70020-150/topic/introduction.html#qim-sdk).

## Changes in video

To manage buffers for video encoding or decoding, the 1.4 and later releases support direct memory access (DMA) Export mode (4), DMA Import mode (5), and Memory Map (MMAP) mode (2). Select the appropriate mode for your specific use case.

**Example**

When you encode in camera, it already produces DMA buffers. In this case, do the following:

> 
> 
> - Set the encoder input to DMA Import mode (5). This mode ensures that the camera buffer file descriptor (FD) is used directly, without allocating new buffer at video driver-side and copying the content.
> - Set the encoder output to DMA Import mode (5). This mode ensures that the video driver allocates output buffers.

The video pipeline for this example is as follows:

gst-launch-1.0 qtiqmmfsrc ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! v4l2h264enc output-io-mode=5 capture-io-mode=4 ! h264parse ! mp4mux ! filesink location=/opt/cam_enc.mp4
    Copy to clipboard

In this pipeline, the `output-io-mode` is DMA Import mode (5), indicating input to the encoder, and the `capture-io-mode` is DMA Export mode (4), indicating output to the encoder.

## Changes in Qualcomm IM SDK

In the 1.4 and later releases of Qualcomm IM SDK, the behavior of the `waylandsink`, `qtiqmmfsrc`, `v4l2h264dec`, and `v4l2h264enc` plugins has changed due to the upstream migration of the memory manager component. For more details, see [Changes in memory manager](https://docs.qualcomm.com/doc/80-70020-150/topic/introduction.html#memory-manager).

To reflect the changes in the Qualcomm IM SDK plugins and the upstream GBM alignment, update the sample applications as follows.

### waylandsink plugin

Earlier versions of the Qualcomm IM SDK used a downstream version of the `waylandsink` plugin, which included `x,y,width,height` coordinates as extra arguments. In later releases, this functionality isn’t available due to the switch to the upstream `waylandsink` plugin. Instead, use the `qtivcomposer` plugin for this functionality.

The plugin changes and the corresponding actions you must take are as follows:

| Change | Change | Action |
| --- | --- | --- |
| 1.3 | 1.4 and later releases | Action |
| Has `x,y,width,height` coordinates. | Provides functionality through the `qtivcomposer` plugin. | Use the `qtivcomposer` plugin for composition. |
|  |  |  |

**Pipeline example**

- The pipeline for the 1.3 release is as follows:

gst-launch-1.0 -e qtivcomposer name=mixer sink_0::position="<0, 0>" sink_0::dimensions="<1280, 720>" sink_1::position="<590, 310>" sink_1::dimensions="<640, 360>" mixer. ! queue ! waylandsink enable-last-sample=false sync=true fullscreen=true filesrc location=/opt/mux1.mp4 ! qtdemux ! queue ! h264parse ! v4l2h264dec capture-io-mode=5 output-io-mode=5 ! mixer. filesrc location=/opt/mux1.mp4 ! qtdemux ! queue ! h264parse ! v4l2h264dec capture-io-mode=5 output-io-mode=5 ! mixer.
        Copy to clipboard
- The pipeline for the 1.4 and later releases is as follows:

gst-launch-1.0 -e qtivcomposer name=mixer sink_0::position="<0, 0>" sink_0::dimensions="<1280, 720>" sink_1::position="<590, 310>" sink_1::dimensions="<640, 360>" mixer. ! queue ! waylandsink fullscreen=true filesrc location=/opt/mux1.mp4 ! qtdemux ! queue ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw, format=NV12 ! mixer. filesrc location=/opt/mux1.mp4 ! qtdemux ! queue ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw, format=NV12 ! mixer.
        Copy to clipboard

### qtiqmmfsrc plugin

In the 1.4 and later releases, the `qtiqmmfsrc` plugin doesn’t support the compression field for universal bandwidth compressed (UBWC) NV12. Instead, use the new format specifically designed for UBWC compressed NV12 images.

The plugin changes and the corresponding actions you must take are as follows:

| Change | Change | Action |
| --- | --- | --- |
| 1.3 | 1.4 and later releases | Action |
| `format=NV12`<br><br><br>`compression=ubwc` | Added `format=NV12_Q08C` | <ul class="simple"><br><li><p>Change the format from <code class="docutils literal notranslate"><span class="pre">format=NV12</span></code> to <code class="docutils literal notranslate"><span class="pre">format=NV12_Q08C</span></code>.</p></li><br><li><p>Remove the <code class="docutils literal notranslate"><span class="pre">compression=ubwc</span></code> parameter.</p></li><br></ul> |
|  |  |  |

**Pipeline example**

- The pipeline for the 1.3 release is as follows:

gst-launch-1.0 qtiqmmfsrc name=camsrc video_0::type=preview ! video/x-raw\(memory:GBM\),format=NV12,width=1920,height=1080,framerate=30/1,compression=ubwc ! v4l2h264enc output-io-mode=5 capture-io-mode=5 ! h264parse ! filesink location=/opt/video.h264
        Copy to clipboard
- The pipeline for the 1.4 and later releases is as follows:

gst-launch-1.0 -ev qtiqmmfsrc name=camsrc video_0::type=preview ! video/x-raw,format=NV12_Q08C,width=1920,height=1080,framerate=30/1 ! queue ! v4l2h264enc output-io-mode=5 capture-io-mode=4 ! h264parse ! filesink location=/opt/video.h264
        Copy to clipboard

### v4l2h264enc and v4l2h264dec plugins

In the earlier releases, the GST framework managed the application buffers. In the 1.4 and later releases, the `v4l2` drivers support buffer management internally.

To add this enhancement to the driver, do the following:

- For applications using the camera source with the `v4l2h264enc` plugin, change the pipeline configuration from `output-io-mode=5`/ `capture-io-mode=5` to `output-io-mode=5`/ `capture-io-mode=4`.
- For applications using the filesource with the `v4l2h264dec` plugin, change the pipeline configuration from `output-io-mode=5`/ `capture-io-mode=5` to `output-io-mode=4`/ `capture-io-mode=4`.

The plugin changes and the corresponding actions you must take are as follows:

| Use case | Change | Change | Action |
| --- | --- | --- | --- |
| Use case | 1.3 | 1.4 and later releases | Action |
| Video encode | `format=NV12`<br><br><br>`compression=ubwc` | Added `format=NV12_Q08C` | <ul class="simple"><br><li><p>Change the format from <code class="docutils literal notranslate"><span class="pre">format=NV12</span></code> to <code class="docutils literal notranslate"><span class="pre">format=NV12_Q08C</span></code>.</p></li><br><li><p>Remove the <code class="docutils literal notranslate"><span class="pre">compression=ubwc</span></code> parameter.</p></li><br></ul> |
| Video encode | `output-io-mode=5` and `capture-io-mode=5` | Updated to `output-io-mode=5` and `capture-io-mode=4` | Change the modes to `output-io-mode=5` and `capture-io-mode=4`. |
| Video decode | `output-io-mode=5` and `capture-io-mode=5` | <ul class="simple"><br><li><p>Added caps and <code class="docutils literal notranslate"><span class="pre">format=NV12</span></code></p></li><br><li><p>Updated to <code class="docutils literal notranslate"><span class="pre">output-io-mode=4</span></code> and <code class="docutils literal notranslate"><span class="pre">capture-io-mode=4</span></code></p></li><br></ul> | <ul class="simple"><br><li><p>Add <code class="docutils literal notranslate"><span class="pre">video/x-raw,format=NV12</span></code>.</p></li><br><li><p>Change the modes to <code class="docutils literal notranslate"><span class="pre">output-io-mode=4</span></code> and <code class="docutils literal notranslate"><span class="pre">capture-io-mode=4</span></code>.</p></li><br></ul> |
|  |  |  |  |

**Pipeline example**

- The video decoder pipeline for the 1.3 release is as follows:

gst-launch-1.0 -e filesrc location=/opt/mux1.mp4 ! qtdemux ! queue ! h264parse ! v4l2h264dec capture-io-mode=5 output-io-mode=5 !  waylandsink fullscreen=true
        Copy to clipboard
- The video decoder pipeline for the 1.4 and later releases is as follows:

gst-launch-1.0 -e filesrc location=/opt/mux1.mp4 ! qtdemux ! queue ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! waylandsink fullscreen=true
        Copy to clipboard
- The video encoder pipeline for the 1.3 release is as follows:

gst-launch-1.0 -e qtiqmmfsrc name=camsrc video_0::type=preview ! video/x-raw\(memory:GBM\),format=NV12,width=3840,height=2160,framerate=30/1,compression=ubwc,interlace-mode=progressive,colorimetry=bt601 ! queue ! v4l2h264enc capture-io-mode=5 output-io-mode=5 ! queue ! h264parse ! mp4mux ! queue ! filesink location="/opt/mux1.mp4"
        Copy to clipboard
- The video encoder pipeline for the 1.4 and later releases is as follows:

gst-launch-1.0 -e qtiqmmfsrc name=camsrc video_0::type=preview ! video/x-raw,format=NV12_Q08C,width=3840,height=2160,framerate=30/1,interlace-mode=progressive,colorimetry=bt601 ! queue ! v4l2h264enc capture-io-mode=4 output-io-mode=5 ! queue ! h264parse ! mp4mux ! queue ! filesink location="/opt/mux1.mp4"
        Copy to clipboard

## Next steps

- To update over-the-air (OTA) for Qualcomm Linux, see [Qualcomm Linux Yocto Guide](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-27/ota_update_for_qualcomm_linux.html#ota-update-for-qualcomm-linux).
- To learn more about the new features, enhancements, and limitations of the Qualcomm Intelligent Multimedia (IM) SDK, see [Qualcomm Intelligent Multimedia (IM) SDK Release Notes](https://docs.qualcomm.com/bundle/publicresource/topics/80-70020-52/qim-sdk-release-1-5.html).
- To learn more about the new features, enhancements, and limitations of the latest release, see [Qualcomm Linux 1.5 Release Notes](https://docs.qualcomm.com/bundle/publicresource/topics/RNO-250630224842/).

Last Published: Jul 01, 2025

[Next Topic
References](https://docs.qualcomm.com/bundle/publicresource/80-70020-150/topics/references.md)

Source: [https://docs.qualcomm.com/doc/80-70020-150/topic/introduction.html](https://docs.qualcomm.com/doc/80-70020-150/topic/introduction.html)