Skip to content

Promote changes from v1.0.3 - #42

Merged
GirishKadirisani merged 91 commits into
qualcomm-linux:clo/debian/latestfrom
bkosuri:bala/clo/debian/latest
Sep 11, 2026
Merged

GirishKadirisani merged 91 commits into
qualcomm-linux:clo/debian/latestfrom
bkosuri:bala/clo/debian/latest

Conversation

@bkosuri

@bkosuri bkosuri commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

No description provided.

Signed-off-by: Hasibur Rahman Mohammed <hasiburr@qti.qualcomm.com>
Fork-originated pull_request events don't receive repo secrets, so
the SDK download and S3 upload steps in IMSDK_UAT_Compilation always
failed for PRs from forks. Split the workflow: the pull_request
trigger now only records the PR head SHA as an artifact, and a new
workflow_run-triggered workflow (imsdk_compilation_pr.yml) performs
the actual build in the base repo's context, where secrets are
available. The privileged jobs are gated behind a `build` environment
approval to avoid running fork-authored code with secrets unreviewed.

Signed-off-by: Hasibur Rahman Mohammed <hasiburr@qti.qualcomm.com>
Any changes to headers in base won't be available in the sdk.
Build and install base to avoid build failures due to changes
in gst-plugin-base.

Signed-off-by: Bala Sai Kosuri <bkosuri@qti.qualcomm.com>
…ted codec2 version

GST_C2_PARAM_INTRA_REFRESH_MODE was introduced in codec2 v2.1
(change 6487824), but the version guard only checked MAJOR == 2,
causing it to be applied on v2.0 where the parameter does not exist
and results in a failure.

Add minor version check (>= 1) to restrict this to v2.1+.

Signed-off-by: Duanpeng Liu <duanpeng@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
The hardcoded composer capabilities in
gst-ai-multistream-inference app are removed
to enable dynamic capability negotiation.

Signed-off-by: Muthumula Sai Harshith Reddy <muthumul@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
Add missing RGBA8888/RGBx and BGRA8888/BGRx to NV12/NV21 conversion
cases in gst_fcv_video_converter_rgb_to_yuv() using the FastCV API
fcvColorRGBA8888ToYCbCr420PseudoPlanaru8.

Previously, using engine=fcv with qtimlvconverter or qtivcomposer in
pipelines that require an RGBA/BGRA → NV12 color conversion (e.g.
IMSDK ML inference pipelines on Aspen LE) would hit the unsupported
format error path and fail.

The mapping is:
  RGBA/RGBx → NV12: direct call to ColorRGBA8888ToYCbCr420PseudoPlanaru8
  BGRA/BGRx → NV21: same API (byte order is equivalent)
  BGRA/BGRx → NV12: same API + chroma swap to destination
  RGBA/RGBx → NV21: same API + chroma swap to destination

Signed-off-by: Duanpeng Liu <duanpeng@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
- Add file existence check for all watermark RGBA file paths before
  creating the GStreamer pipeline.
- Report error for each missing or non-regular file with clear path
  information.
- Exit with error code when any watermark file is not found, preventing
  the pipeline from hanging indefinitely.
- Support validation for multiple watermark entries specified via
  repeated -I/--image options.

Signed-off-by: Hongyong Huang <hongyong@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
 - qticamimgreproc takes ownership of the metadata
   pointer and frees it.
 - In qmmfsrc, freeing the metadata for discarded
   buffers only.
 - skip the freeing in qmmfsrc as reproc already
   owns it and free the memory.

Signed-off-by: Shubhankar Kulkarni <shukulk@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
 - The app supports:
 - Dual-camera (CAM1 + CAM2) pre-buffering via logical camera
 - Per-camera sensor standby during buffering
 - Live view streaming during buffering window
 - RDI and IPE Bypass tap-out modes
 - Snapshot capture during buffering and recording

Signed-off-by: Shubhankar Kulkarni  <shukulk@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
- Validate watermark RGBA file paths exist before pipeline creation.
- Reject unexpected positional CLI arguments.
- Fix GLib warning in help-h option definition.

Signed-off-by: Hongyong Huang <hongyong@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
Install versioned libgenie-vlm libs.

Signed-off-by: Nikolay Hristozov <c_nhrist@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
…ies"

This reverts commit a00fd158930c9ce579f2bdd28cc080d9829ec215.

Signed-off-by: Petar G. Georgiev <c_petarg@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
Issue 1: Direct manipulation of the PKG_CONFIG_PATH env variable
         for attaching local paths to .pc files in order to tell
         pkg_check_modules where to search for them is improper
         and is causing pollution of the work environment.
Fix 1: Use PKG_CONFIG_USE_CMAKE_PREFIX_PATH together with a global
       list variable PKG_CONFIG_LOCAL_PATH to which each sub-project
       appends their path. Before each pkg_check_modules the
       sub-project CMAKE_PREFIX_PATH it set to PKG_CONFIG_LOCAL_PATH.

Issue 2: The below "poison-system-directories" errors is due to
         malformed .pc file template.
           cc1plus: error: include location "/usr/include/gstreamer-1.0"
           is unsafe for cross-compilation [-Werror=poison-system-directories]
Fix 2: Add "Requires:" and use pcfiledir variable for such relocatable
       pkg-config usages.

Signed-off-by: Petar G. Georgiev <c_petarg@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
- Rename some of the structures in order to simplify them.
  Parts in the naming where redundant.
- Rename headers and source files and drop redundant words.
- Enhance post-process structures with helper functions.
- Make the structures, APIs and documentation compatible with
  gobject-introspection
- Include new files in GIR and TYPELIB generation

Change-Id: I244346ca75e995024aa2fd38c3304ff29fcfc052
Signed-off-by: Petar G. Georgiev <c_petarg@qti.qualcomm.com>
Call gst_init() before checking for the libcamerasrc plugin so GStreamer
is properly initialized before registry/factory lookup.

This fixes the false "libcamerasrc not present" result seen at runtime
even when the plugin is installed and working on the target.

Signed-off-by: Shantanu <shanmaju@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
Modify include file dependency.

Signed-off-by: Shradha Somani <shrasoma@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
- Modify example according to ce_cdm18 rather than ce_cdm before.
- Fix warning.
- Fix conflict between functions.

Signed-off-by: Shradha Somani <shrasoma@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
Issue: Build fails if audio codec2 is not enabled due to
missing symbol references.
Fix: Use existing macro definitions to add conditional
checks and exclude audio-codec2 component when disabled.

Signed-off-by: Bing Li <bli8@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
-Issue: negative min-quant value failed to be set in case of 10bit.

-Fix:
  1.Pass quant init/range properties from uint32_t to int32_t.
  2.Change default min-quant value from 10 to 0 as the qp range of
    8bit start from 0 while that of 10bit starts from -12.

Signed-off-by: Ziyi Gai <zgai@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
-Accept CDM provisioning URL (--cdm-prov) and license URL (--cdm-lic)
as CLI arguments to avoid hardcoding sensitive URLs in source code.

Signed-off-by: Shradha Somani <shrasoma@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
…on drain

EOS arriving on any of the three sink pads (sink, sink_ctrl, sink_ml)
was forwarded downstream via gst_pad_event_default(), triggering
GstBin's EOS aggregation and causing the encoder to receive EOS before
the worker task had drained main_frames. This dropped the last
min_buffers frames on every stream end.

Fix by consuming EOS on all three sink pads and delegating EOS delivery
to the encoder solely from the worker task, after main_frames is fully
drained.

Signed-off-by: Raja Ganapathi Busam <rbusam@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
Initial version of override files for Python GstQtiML.

Signed-off-by: Petar G. Georgiev <c_petarg@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
-Issue: parsing results will be overlaied leading to segmentation fault
        in case of open and close qmmf context multiple times.
-Fix: clean old data at the beginning of parsing.

Signed-off-by: Ziyi Gai <zgai@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
Issue: When we run any pipeline, unnecessary warnings appear
on the console. these logs are seen as GBM fails to detect
the driver's name or device information.
Fix: Using correct fd associated with drm render nodes
(/dev/dri/renderD128) for gbm device creation.

Signed-off-by: Shradha Somani <shrasoma@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
Add compilation flags needed for proper compilation of mllbin plugin

Signed-off-by: Angel Hitov <c_ahitov@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
Attach the valid ImageRegion based on the input source aspect ratio.

Signed-off-by: Filip Kardzhaliyski <fkardzha@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
- Propagate the resolution of the model input tensor from mlvconverter
  to downstream mlpostprocess via the custom ml-preprocess-information
  event.
- Use the propagated ml-preprocess-information event in mlpostprocess
  to automatically negotiate resolution in case of image mask output.
- Improve segmentation and super-resolution modules to populate only
  pixels in the image mask which have real dat.
- In vcomposer check and use the service ROI meta "ImageRegion" as a
  source for the blits when it is available.

Signed-off-by: Petar G. Georgiev <c_petarg@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
- The TextGeneration structure is not supported end-to-end as it was
  only partially implemented.
- Remove the structure as the its usage will not be implemented.

Signed-off-by: Petar G. Georgiev <c_petarg@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
The QTI allocator is inheriting DMA Allocator so manual DMA buffer
sync is no longer needed.

Signed-off-by: Petar G. Georgiev <c_petarg@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
jasjsing and others added 23 commits August 31, 2026 11:14
- Process person ROI and invoke the AFR API to
  obtain smooth ROI coordinates.
- Fall back to the full FOV when no person
  ROI is available.

Signed-off-by: Jasjot Singh <jasjsing@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
Issue: Caps negotiation fails with not-negotiated when the src
pad template's tensor type has a single entry (e.g. { FLOAT32 }),
since the resulting caps are then fully fixed and GstBaseTransform
skips querying the downstream peer before fixation — dropping a
downstream-fixed dimensions and causing mlaconverter to fall back
to its own computed shape.

Fix: In fixate_caps, when dimensions/type isn't already fixed,
query the src pad's peer caps directly and use its fixed value
before falling back to the audio converter-computed one, so
 downstream constraints aren't lost regardless of tensor type
list size.

Signed-off-by: Shradha Somani <shrasoma@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
Extract the GI overrides from gst-plugin-base into a new gst-python
module, gated by ENABLE_GST_PYTHON, so the Python bindings can be
built and enabled independently of the base plugin.

Signed-off-by: Petar G. Georgiev <c_petarg@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
Rename the type and its API (gst_ml_sample_* -> gst_ml_bundle_*) to
better reflect that it bundles a buffer with its ML info, and update
the sole external user in mlvconverter.

Signed-off-by: Petar G. Georgiev <c_petarg@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
- Use the new QNN EP plugin ABI which will be shipped as standalone
  shared lib.
- Removed libonnxruntime_providers_qnn.so from target_link_libraries
  as this library will be loaded dynamically at runtime and not be
  linked during build time.
- Register this library in the plugin at runtime if the backend
  execution provider is selected as QNN

Signed-off-by: Pratik Pachange <ppachang@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
The previous default (127.0.0.1) restricted the RTSP server to
loopback-only connections, so it could not be reached from other
devices on the network without manually setting the "address"
property. Changing the default to 0.0.0.0 binds all interfaces,
making the server reachable by all devices on the LAN.

Signed-off-by: Yordan Stoilov <ystoilov@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
Issue: Malformed messages crash receive_socket_message() via an OOB heap
read and an fd-count buffer overflow.

Analysis: Payload size and fd count come from untrusted input and were
used without bounds checks, so a record could extend past io_buf and a
large n_fds could overflow the fixed pl_info->fds buffer.

Fix:

- Skip records whose identity/payload does not fit within recv_len.
- If n_fds > GST_MAX_MEM_BLOCKS, drop message.

Signed-off-by: Viswanath Srikanth Bathina <bathina@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
-Issue: EOS will be skipped while c2buffer with index 0 hasn't been done.
-Fix: modify EOS index to avoid corruption with index 0.

Signed-off-by: Ziyi Gai <zgai@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
- Implement plugin using unified QAIRT interface.
- Supports both .dlc and .bin models.

Signed-off-by: Bala Sai Kosuri <bkosuri@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
Issue: Inavlid data was returned in the size and data field for a
       GstMLTensor return from gst_ml_frame_get_tensor when the tensors
       in the underlying buffer are allocated as single continuous
       memory block.
Fix: Calculate the data pointer offset when there is only a single
     memory block.

Signed-off-by: Petar G. Georgiev <c_petarg@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
- add lib version for AFR.

Signed-off-by: jasjsing <jasjsing@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
When the tensors property is used and a reorder is needed,
populate pointed each native output tensor's clientBuf
at its own native block instead of its final destination block,
so in the convert to float stage the not yet read tensors
get overriden by earlier tensors.

Resolve graphindices at populate time instead, so each native output
tensor's clientBuf.data points directly at its final destination
block before graphExecute() runs.

Signed-off-by: Boris Markov <mboris@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
Problem:
- Output for a composer sink pad zooms/crops into a detected object's
bounding box as soon as any detection is present on the buffer. With
nothing detected the full frame is composed correctly; when a person
(or any class) is detected the tile scales that detection's box to
fill the whole tile. Reproduced with a YOLOv8 detection stream muxed
via qtimetamux and composed by qtivcomposer.

Analysis:
- gst_buffer_get_image_region_meta() is meant to return the "ImageRegion"
ROI meta (or NULL when absent) so the blit source rectangle can be
pinned to it. The loop assigned roimeta unconditionally on every
iteration and only broke out on an "ImageRegion" match, so when the
buffer carried ROI metas but none was an "ImageRegion" it returned the
last iterated meta instead of NULL.
- qtimetamux attaches one ROI meta per detection whose roi_type is the
class label ("person", etc.), never "ImageRegion". The composer then
consumed that detection box as the blit source rectangle (setting
GST_VIDEO_CONVERTER_MASK_SOURCE), scaling the box to the tile. With no
detections there are no ROI metas, the loop body never runs, roimeta
stays NULL and the full frame is used - hence the detection-dependent
behaviour.

Fix:
- Only assign roimeta when the candidate's roi_type actually matches
"ImageRegion", leaving it NULL otherwise. The composer then falls back
to the full-frame source rectangle when no ImageRegion meta is present,
regardless of how many detection ROI metas the buffer carries.

Signed-off-by: Filip Kardzhaliyski <fkardzha@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
Update the sync property to TRUE in the
gst-ai-multistream-batch-inference pipeline to enable
reliable FPS display during execution.

Signed-off-by: Muthumula Sai Harshith Reddy <muthumul@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
Add a GStreamer-based overlay application that injects dynamic text
metadata into camera buffers and renders it using qtivoverlay.

Support runtime text, position, and color updates through keyboard input
while preserving the text_injector identity element in the pipeline.

Signed-off-by: Shantanu <shanmaju@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
- Add gst-ai-group-framing-app sample application
- Demonstrate Auto Framing (AFR) use case using AI-based
  person detection and ROI auto-framing
- Support configurable AFR parameters and debug overlay
  visualization

Signed-off-by: jasjsing <jasjsing@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
- Add HAVE_CDM_H to the condition so the example is skipped on trees
  without the restricted CE CDM components, and picked up automatically
  once cdm.h is present in the sysroot.

Signed-off-by: Shradha Somani <shrasoma@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
- Replace the enum-based 'delegate' property with a string 'backend'
  property that accepts a direct path to a QAIRT backend shared library,
  aligning with qtimlqnn's approach.
- This approach ensures any new backend can be immediately supported.

Signed-off-by: Girish K <girik@qti.qualcomm.com>
- Use qcom,system heap to allocate non secure memory and
convert it to secure memory using MEM_BUF_IOC_LEND ioctl since
system-secure heap is deprecated from kernel 6.1 onwards
- Use flag HAVE_MEM_BUF_IOC_LEND to do ioctl related calls
only if MEM_BUF_IOC_LEND is defined in linux/mem-buf.h
to avoid failure on older kernel.

Signed-off-by: Shradha Somani <shrasoma@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
- libVideoCtrl.so renamed as libqimsdk-smartvenc.so
- Header install path updated

Signed-off-by: Bala Sai Kosuri <bkosuri@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
- Remove sudo hardcoding from gst-gui-launcher-app.py
script for Wi-Fi connect and disconnect operations in
case of non-root user.

Signed-off-by: Muthumula Sai Harshith Reddy <muthumul@qti.qualcomm.com>
Signed-off-by: Girish K <girik@qti.qualcomm.com>
…pers

Issue: Crash with double-free when
gst_buffer_get_video_region_of_interest_metas_parent_id() is used from Python
via PyGObject bindings.

Analysis: gst_buffer_get_video_region_of_interest_metas_parent_id() is annotated
as (transfer full), but it only returns a newly allocated GList containing
metadata pointers still owned by the buffer. PyGObject follows the annotation
and frees both the list and the metadata, causing a double-free when the buffer
later releases the same metadata.

Fix: Update gst_buffer_get_*_metas_parent_id() return annotations from
(transfer full) to (transfer container) and clarify ownership in the
documentation. Also fix the incorrect metadata type description in
gstvideoclassificationmeta

Change-Id: I7fc684a26e6e7cd09eb97724d33ca101e00386f8
Signed-off-by: Konstantin Motov <quic_kmotov@quicinc.com>
Comment on lines +4 to +7
on:
workflow_run:
workflows: ["IMSDK_UAT_Compilation"]
types: [completed]
await github.rest.repos.createCommitStatus({
owner: context.repo.owner,
repo: context.repo.repo,
sha: "${{ steps.pr.outputs.sha }}",
await github.rest.repos.createCommitStatus({
owner: context.repo.owner,
repo: context.repo.repo,
sha: "${{ needs.init.outputs.pr-sha }}",
Comment on lines +18 to +32
save-pr-context:
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- name: Save PR number and head SHA
run: |
mkdir -p pr
echo "${{ github.event.pull_request.number }}" > pr/NR
echo "${{ github.event.pull_request.head.sha }}" > pr/SHA

- name: Upload PR context
uses: actions/upload-artifact@v4
with:
name: pr-context
path: pr/
Comment on lines +34 to +50
init:
if: github.event_name != 'pull_request'
runs-on: ubuntu-latest
outputs:
sdk-url: ${{ steps.urls.outputs.sdk-url }}
image-urls: ${{ steps.urls.outputs.image-urls }}

steps:
- name: Checkout code
uses: actions/checkout@v6

- name: Resolve SDK URL from latest wrynose nightly
id: urls
uses: ./.github/actions/resolve-nightly-download-url
with:
token: ${{ secrets.QUALCOMM_LINUX_PAT }}
artifact-token: ${{ secrets.S3_WEBAPP_TOKEN }}

permissions:
actions: read
checks: write
Comment on lines +30 to +34
- name: Checkout code
uses: actions/checkout@v6
with:
ref: ${{ inputs.ref }}
allow-unsafe-pr-checkout: true
Comment on lines +42 to +43
- name: Checkout code
uses: actions/checkout@v6
actions: read
checks: write
contents: read
statuses: write
Comment on lines +55 to +59
- name: Checkout code
uses: actions/checkout@v6
with:
ref: ${{ steps.pr.outputs.sha }}
allow-unsafe-pr-checkout: true

@github-advanced-security github-advanced-security AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Semgrep OSS found more than 20 potential problems in the proposed changes. Check the Files changed tab for more details.

@bkosuri
bkosuri force-pushed the bala/clo/debian/latest branch from e05d1c9 to a592dfe Compare September 11, 2026 05:23
Change-Id: If836e4b3ed3f2ce49e2bbd4c90e818107bd2d71c
Signed-off-by: Bala Sai Kosuri <bkosuri@qti.qualcomm.com>
@bkosuri
bkosuri force-pushed the bala/clo/debian/latest branch from a592dfe to 356303a Compare September 11, 2026 05:29
@GirishKadirisani
GirishKadirisani merged commit 2b14dfc into qualcomm-linux:clo/debian/latest Sep 11, 2026
6 of 12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.