@@ -25,11 +25,12 @@
|
|||||||
|
|
||||||
## 🟠 High (4)
|
## 🟠 High (4)
|
||||||
|
|
||||||
### #2: PipeWire process callback can block indefinitely
|
### ~~#2: PipeWire process callback can block indefinitely~~ ✅ Fixed
|
||||||
|
|
||||||
- **Location**: `src/cap_portal.rs:320`
|
- **Location**: `src/cap_portal.rs:320`
|
||||||
- **Description**: `frame_tx.send(PwEvent::Frame(frame))` is called from the PipeWire `.process` callback on a bounded channel of size 3. If encoding stalls, this blocks the PipeWire callback and delays `stream.queue_raw_buffer(raw_buf)`.
|
- **Description**: `frame_tx.send(PwEvent::Frame(frame))` is called from the PipeWire `.process` callback on a bounded channel of size 3. If encoding stalls, this blocks the PipeWire callback and delays `stream.queue_raw_buffer(raw_buf)`.
|
||||||
- **Fix**: Use `try_send` and drop frames on full, or use an unbounded channel with a backpressure counter.
|
- **Fix**: Use `try_send` and drop frames on full, or use an unbounded channel with a backpressure counter.
|
||||||
|
- **Fixed in**: [`a09a423`](commit:a09a423) — Replaced `send()` with `try_send()` + `AtomicU64` drop counter. PipeWire `.process` callback is now guaranteed non-blocking. Dropped frames are counted and logged every 30 occurrences.
|
||||||
|
|
||||||
### #3: Portal PTS uses raw PipeWire timestamp as encoder frame-number timebase
|
### #3: Portal PTS uses raw PipeWire timestamp as encoder frame-number timebase
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user