#1228 accepted meta

Implement Vertical Slice: play a clip

Reported by: Ichthyostega Owned by: Ichthyostega
Priority: urgent Milestone: 0integration
Component: lumiera Keywords: integration roadmap VerticalSlicePlayback
Sub Tickets: #1231, #1232, #1233, #1243, #1273, #1288, #1290 Parent Tickets: #1221

Description (last modified by Ichthyostega)

Implement Playback Vertical Slice

Story

As a user of Lumiera
I want a new button on the GUI
So that when I click on the button, a (mocked) clip
will be played on a GUI display

This vertical slice connects the Stage, the Steam and the Vault.
To implement this story, the following tasks are required:

  • trigger clip playback on the GUI (#1231)
  • send & process playback command in SteamDispatcher (#1232)
  • create a Player instance (or use exiting one as appropriate)
  • activate playback mode on this Player instance (#1233)
  • mocked Builder run to inject a minimal low-level model for creating a video feed („mocked clip“) (#1243)
  • dispatching the necessary frame calculation jobs (#1275)
  • scheduling and activating these jobs through the Scheduler in the Vault (#1278)
  • integrating and using a suitable Video processing library to decode the frames (#1288)
  • passing the buffer with the decoded video data up to the video displayer component in the UI (#1290)


Prerequisites

Before any work can be started, certain conditions have to be met:

  • Timeline display —or— Clip-in-Media-Bin display
    • not yet decided whether the display occurs in the context of the Timeline UI
    • or as a function available on right-click to a Clip entry located within a Media Bin
  • actionable representation of concrete video file information in the High-Level-Model (Steam Layer)
  • Mock implementation instead of the Builder, to translate High-Level-Model into a corresponding Low-Level-Model
  • Backbone of the Low-Level-Model must be ready to use (#880)
  • Player must provide minimal playback functionality (no fast-forward, jumping and looping)
  • Definition of frame render jobs
    • define data structure of a render job
    • function to define an individual render job for a given frame number
  • Scheduler implementation (#1280)
  • Decide on a suitable implementation to extract decoded video frames from given media data
    • one alternative could be to integrate the extended API of FFmpeg to use the FFmpeg decoder frame wise
    • another alternative could be to prepare a decoded raw video file and just extract decoded frames from there
    • yet another alternative would be just to generate some synthetic video data
  • Decide on suitable framework of library implementation for a Video Display Widget


Not included

  • Ability for user to load a clip because the clip is mocked


Acceptance Criteria

Scenario-1: Trigger Playback on the Stage

Given
  • a Lumiera running environment
  • And a playback button on the GUI
When
I click on the playback button
Then
  • a clip is displayed on the GUI
  • And the clip is played on the display on the GUI

Scenario-2: Send playback message from Stage to Steam layers

Given
  • a Lumiera running environment
  • And a playback button on the GUI
When
I click on the playback button
Then
a message is sent from the Stage layer to the Steam layer via UI-Bus
And
this message is received by the SteamDispatcher

Scenario-3: Register playback message in the Steam layer

Given
  • a Lumiera running environment
  • And a playback button on the GUI
When
I click on the playback button
And
the message successfully arrives in the Steam layer
Then
the Instructor in the Steam layer registers this message

Scenario-4: Process a playback message in the Steam layer

Given
  • a Lumiera running environment
  • And a playback button on the GUI
When
I click on the playback button
And
the message successfully arrives and is registered in the Steam layer
Then
this playback message is assigned an appropriate player instance
And
the player switches into simple playback mode, creating a PlayProcess

Scenario-5: Start Job-Planning activity

Given
  • a Lumiera running environment
  • And a playback button on the GUI
When
I click on the playback button
And
a PlayProcess has been created in the Player in Steam layer
Then
a seed job will be inserted into the Scheduler, to initiate Job-Planning

Scenario-6: Ongoing Calculation Stream

Given
  • a Lumiera running environment
  • And a playback button on the GUI
When
I click on the playback button
And
a seed job for Job-Planning has been inserted into the Scheduler
Then
the Render Engine becomes active, performing a Stream-of-Calculations

Scenario-7: Video data sent up to the Video display widget in the GUI

Given
  • a Lumiera running environment
  • And a playback button on the GUI
When
I click on the playback button
And
the Render Engine has been activated, invoking Jobs for a Stream-of-Calculations
Then
video data is placed in suitable buffers and handed over to the Video widget in the GUI

Change history (9)

comment:1 by Benny Lyons, at 2022-09-17T10:23:04Z

blockedby: 1231, 1232, 1233
Description: modified (diff)

comment:2 by Ichthyostega, at 2022-09-23T14:29:15Z

Description: modified (diff)
  • add further prerequisite: Video Display Widget for the UI
  • reformat Acceptance Criteria to make the Gherkin structure stand out more clearly

comment:3 by Benny Lyons, at 2022-10-07T18:36:16Z

blockedby: 1231, 12321231, 1232, 1243

comment:4 by Ichthyostega, at 2023-02-05T00:40:09Z

Keywords: VerticalSlicePlayback added; meta removed
Type: todometa

comment:8 by Ichthyostega, at 2023-04-02T00:16:03Z

blockedby: 1231, 1232, 1233, 12431231, 1232, 1233, 1243, 1273, 1288, 1290
Description: modified (diff)

comment:9 by Benny Lyons, at 2023-07-03T11:20:32Z

Description: modified (diff)

Still requires more refinement on what is mocked, Scheduler, low-level and high-level trees and of course what exactly we want from the vault

in reply to:  9 comment:10 by Ichthyostega, at 2023-07-14T16:13:44Z

Replying to Benny Lyons:

Still requires more refinement on what is mocked, Scheduler, low-level and high-level trees and of course what exactly we want from the vault

To clarify...

  • Scheduler and Node invocation are not mocked
    (since getting these parts and the player to work is the very purpose of this »vertical slice«)
  • the high-level model is bypassed'
  • the Builder is mocked in a way to produce a specifically rigged low-level model
  • very likely I will also mock the media data input (replace it by a simple generator)
  • moreover, we'll use a faked/rigged viewer-output-connection

comment:11 by Ichthyostega, at 2023-07-14T16:37:06Z

Description: modified (diff)
Owner: set to Ichthyostega
Status: newaccepted

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

blockedby: 1231, 1232, 1233, 1243, 1273, 1288, 1290
blocking: 1221
Parent Tickets: 1221
Sub Tickets: 1231, 1232, 1233, 1243, 1273, 1288, 1290

Migration MasterTickets ⟼ Subtickets-plugin

Note: See TracTickets for help on using tickets.