#1395 accepted todo

resolve integration of BufferProvider with DataSink

Reported by: Ichthyostega Owned by: Ichthyostega
Priority: grave Milestone: 0integration
Component: lumieraSteam Keywords: render data interfaces cleanup
Sub Tickets: #657, #824, #1367, #1410, #1415 Parent Tickets: #671, #713, #819, #1287, #1308, #1369, #1396, #1417

Description

As a Lumiera developer,
I want to represent output buffers through BuffHandle,
so that I can use uniform buffer access in accordance to the Buffer Provider protocol

make two similar protocols congruent

Both the buffer handling and the output designation and data sink handling were defined around the same time, and both were defined in terms of a protocol (and both still seem largely adequate today). From the implementation perspective of media processing, it is irrelevant if the destination buffer is provided from a memory pool, is actually attached to the frame cache, or represents a data block tied to I/O — in all cases, the buffer must be provided exclusively, and marked complete when done.

But the default implementations for both frameworks do not mesh up well with that observation; notably the DataDink indeed exposes a BuffHandle, but expects it to be treated in a special way. It seems the default implementation is too tightly interconnected with the interface and protocol aspects here, making it impossible to let the BuffHandle act as an uniform proxy.

Acceptance Criteria

The existing Render Node invocation code can handle an OutputSink correctly, while just adhering to the Buffer Provider protocol

Change history (10)

comment:1 by Undercover Agent, at 2025-12-25T00:00:00Z

blockedby: 657, 824, 1367
blocking: 671, 713, 1287, 1308, 1369, 1396
Parent Tickets: 671, 713, 1287, 1308, 1369, 1396
Sub Tickets: 657, 824, 1367

comment:2 by Ichthyostega, at 2026-02-09T22:04:46Z

Sub Tickets: 657, 824, 1367657, 824, 1367, 1410

Add subticket #1410 (clean-up BufferProvider base implementation).

comment:3 by Ichthyostega, at 2026-02-19T23:17:42Z

Sub Tickets: 657, 824, 1367, 1410657, 824, 1367, 1410, 1415

Add subticket #1415 (setup proxying through BufferProvider).

comment:4 by Ichthyostega <prg@…>, at 2026-02-19T23:23:20Z

Owner: set to Ichthyostega
Status: newaccepted

In 722c12e3/Lumiera:

BufferProvider: assess status and consider approach to OutputSlot (see #1395)

The first round of the BufferProvider clean-up is roughly complete.

  • a much cleaner diagnostic interface has been defined and implemented
  • this allowed to modernise the DiagnosticBufferProvider_test and the BufferProviderProtocol_test
  • the implementation scheme has been split in two realms
  • the old heap-memory based implementation has been re-arranged, so that the aforementioned tests are green again.

Now is the point to draft a solution to get the interfaces of
BufferProvider and OutputSlot aligned, so that the latter
can expose its lifecycle through the former.

Today, I have analysed various aspects and developed a pathway
to get into that task, and next I will reshape the previously
failed OutputProxyProvider_test into a prototype to
validate this idea

comment:5 by Ichthyostega, at 2026-03-10T02:11:55Z

Parent Tickets: 671, 713, 1287, 1308, 1369, 1396671, 713, 1287, 1308, 1369, 1396, 1417

Attach to parent #1417 (unwind from Render Node pull).

comment:6 by Ichthyostega <prg@…>, at 2026-04-11T03:16:53Z

In 2c8ee05/Lumiera:

OutputSlot: validate and complete redesign (see #1395)

This is a breakthrough...
Using the realigned implementation structure in BufferProvider,
and especially the ability to establish an overarching context by
passing an connection-ID through the LocalTag in the BufferMetadata,
it was possible to resolve the longstanding mismatch buried deep within
the OutputSlot implementation.

Based on the new internal APIs in BufferProvider, it was thus possible
to setup an OututBufferProxy that acts as a hub to connect the
DataSink handles with the actual OutputSlot::Connection implementation.
This change allowed to rectify the convoluted control structure in
OutputSlot and finally to manage the Lifecycle properly. Furthermore,
one level of unnecessary implementation-inheritance could be removed,
so that it is no longer necessary to subclass OutputSlot in order to
configure the link to a specific output backend.

Using this redesigned internal structure, it was now fairly simple to
re-implement a tracking DiagnosticOutputSlot and then to verify proper
integration by passing the OutputSlotProtocol_test again.

comment:7 by Ichthyostega, at 2026-04-13T17:27:45Z

Parent Tickets: 671, 713, 1287, 1308, 1369, 1396, 1417671, 713, 819, 1287, 1308, 1369, 1396, 1417

Attach to parent #819 (diagnostic OutputSlot).

comment:8 by Ichthyostega <prg@…>, at 2026-05-31T22:25:44Z

In ab22f37/Lumiera:

MERGE dev/play into integration

Integrate the work related to buffer management in the render engine.

  • in-depth analysis and rework of the BufferProvider framework (see #1395)
  • build a prototype for production-grade buffer allocation handling (closes: #1415)(see #1396)
  • as an aside: Application code and namespace reorganisation

comment:9 by Ichthyostega <prg@…>, at 2026-05-31T22:25:46Z

In ab22f37/Lumiera:

MERGE dev/play into integration

Integrate the work related to buffer management in the render engine.

  • in-depth analysis and rework of the BufferProvider framework (see #1395)
  • build a prototype for production-grade buffer allocation handling (closes: #1415)(see #1396)
  • as an aside: Application code and namespace reorganisation

comment:10 by Ichthyostega <prg@…>, at 2026-05-31T22:29:38Z

In ab22f37/Lumiera:

MERGE dev/play into integration

Integrate the work related to buffer management in the render engine.

  • in-depth analysis and rework of the BufferProvider framework (see #1395)
  • build a prototype for production-grade buffer allocation handling (closes: #1415)(see #1396)
  • as an aside: Application code and namespace reorganisation
Note: See TracTickets for help on using tickets.