Opened at 2022-09-12T11:59:47Z
Last modified at 2023-07-14T16:37:06Z
#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 )
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
Instructorin 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
PlayProcesshas 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 , at 2022-09-17T10:23:04Z
| blockedby: | → 1231, 1232, 1233 |
|---|---|
| Description: | modified (diff) |
comment:2 by , 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 , at 2022-10-07T18:36:16Z
| blockedby: | 1231, 1232 → 1231, 1232, 1243 |
|---|
comment:4 by , at 2023-02-05T00:40:09Z
| Keywords: | VerticalSlicePlayback added; meta removed |
|---|---|
| Type: | todo → meta |
comment:8 by , at 2023-04-02T00:16:03Z
| blockedby: | 1231, 1232, 1233, 1243 → 1231, 1232, 1233, 1243, 1273, 1288, 1290 |
|---|---|
| Description: | modified (diff) |
follow-up: 10 comment:9 by , 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
comment:10 by , 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 , at 2023-07-14T16:37:06Z
| Description: | modified (diff) |
|---|---|
| Owner: | set to |
| Status: | new → accepted |
comment:12 by , 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
