# 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&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`
`compression=ubwc` | Added `format=NV12_Q08C` |
Change the format from format=NV12 to format=NV12_Q08C.
Remove the compression=ubwc parameter.
Change the format from format=NV12 to format=NV12_Q08C.
Remove the compression=ubwc parameter.
Added caps and format=NV12
Updated to output-io-mode=4 and capture-io-mode=4
Add video/x-raw,format=NV12.
Change the modes to output-io-mode=4 and capture-io-mode=4.