Skip to content

Add Intel IPU6 and libcamera support via GStreamer integration#1032

Open
bilalobe wants to merge 3 commits intoboltgolt:masterfrom
bilalobe:master
Open

Add Intel IPU6 and libcamera support via GStreamer integration#1032
bilalobe wants to merge 3 commits intoboltgolt:masterfrom
bilalobe:master

Conversation

@bilalobe
Copy link
Copy Markdown

@bilalobe bilalobe commented Jul 17, 2025

Add optional GStreamer-assisted capture path for systems where direct OpenCV capture is not usable

Summary

This PR adds an optional way for Howdy to start a user-configured GStreamer command before opening the configured video device.

The goal is narrow: support systems where the camera cannot be read reliably through the existing direct OpenCV path alone, but can be made available through a user-managed capture pipeline.

What this changes

This PR adds three optional configuration values in the [video] section:

  • use_gstreamer
  • gstreamer_pipeline
  • gstreamer_startup_delay

When use_gstreamer = true, Howdy will:

  1. start the configured GStreamer command as a subprocess
  2. wait for the configured startup delay
  3. open device_path using the existing recorder flow
  4. terminate the subprocess when capture is released

If use_gstreamer = false, behavior remains unchanged.

What this does not do

This PR does not:

  • replace the current capture implementation
  • add native libcamera integration to Howdy
  • auto-detect pipelines or camera backends
  • change the default configuration for existing users

The configured device_path is still the device Howdy reads from. This change only adds an optional subprocess startup step before capture.

Why this is useful

On some systems, especially newer laptop camera stacks, the configured capture device may need to be created or prepared externally before OpenCV can use it.

This PR allows that preparation step to be driven by configuration instead of requiring local wrapper scripts or manual process management outside Howdy.

Behavior and failure mode

  • disabled by default
  • existing setups are unaffected unless explicitly enabled
  • if enabled without a configured pipeline, Howdy exits with an error
  • if the configured command cannot be started, Howdy exits with an error
  • subprocess shutdown is handled during release/destruction

Files changed

  • howdy/src/recorders/video_capture.py
  • howdy/src/config.ini
  • howdy/src/GSTREAMER_INTEGRATION.md

@afalout
Copy link
Copy Markdown

afalout commented Aug 19, 2025

Hello,

first off, a big Thank You @bilalobe for your effort.

This functionality is very much needed, and will only be more necessary going forward. I have several Microsoft Surface tablets and laptops and would love to have this working.

@boltgolt - did you have a chance to take a look at this PR?

Thanks,
Andrej

@saidsay-so saidsay-so changed the base branch from dev to master September 2, 2025 19:50
@alba4k
Copy link
Copy Markdown

alba4k commented Feb 23, 2026

this looks quite vibe-coded, and I'm not just referring to the PR body.

But if it works as promised, this is great :)

Although I have had howdy working on my xps 9320 even without this

Copy link
Copy Markdown
Author

@bilalobe bilalobe left a comment

Choose a reason for hiding this comment

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

I revisited this on my own IPU6/libcamera machine and want to tighten the framing a bit.

The core problem is real: on newer laptops, the camera stack often does not present a stable desktop-friendly V4L2 stream that OpenCV can consume directly. In practice, I ended up needing a bridge of the form:

libcamera / libcamerasrc -> GStreamer -> v4l2loopback -> OpenCV/Howdy

So the underlying motivation for this PR is still valid.

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.

3 participants