Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add RFC: Sophisticated Multiviewer Configuration #59

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

MasterDalK
Copy link

Description

This RFC is a proposal for an overhauled UI around managing multiviewers and their configuration in an effort to modernize and streamline the flow that a user would take to create a multiview, but also allowing multiple multiviewers like one would expect from other products.

Motivation and Context

The current multiviewer configuration is relatively lacking compared to other switcher solutions in the broadcast space.

Link to RFC

@exeldro
Copy link

exeldro commented Mar 29, 2024

Why should it be part of OBS itself and not be an OBS plugin like Durchblick and Source Dock can provide you customizable multiviews?

@Warchamp7
Copy link
Member

Why should it be part of OBS itself and not be an OBS plugin like Durchblick and Source Dock can provide you customizable multiviews?

Multiview is a feature of OBS, I don't see any issues with striving to improve it.

@Warchamp7
Copy link
Member

Noting down a few thoughts I have while I'm here


There have been efforts to move non-global things out of the main Settings window. I think Multiviews make sense as their own dedicated window, which is an approach we're looking to take with both Scene Collections and Profiles in the future.

Matching multiviews to the canvas resolution as noted in the RFC makes the most sense. Mixing ratios within a multiview will overcomplicate both implementation and UI. However, one potential concern is that canvas resolution is currently associated with Profiles.

Following from the above, we'd need to determine where this data lives. The current multiview simply grabs the first n scenes that are flagged to appear in it. A proper customization system will be Scene Collection specific, which desyncs it from where video resolution lives (Profiles). There are ongoing discussions around moving video resolution to be Scene Collection data which would solve this.

While building custom layouts is nice, we should retain presets as options. Selecting a preset would automate a layout definition the same way building it manually would.

As far as placement goes, we should mimic the existing multiview system of simply using the order of entries to place them into spots left to right, top to bottom. This would allow easily switching between different layouts. If a user edits their layout or selects a preset with a lower slot total, we should retain the additional entries in case they increase the number of slots again, to avoid data loss.

I am not clear about what the merge/break boxes idea solves


As Exeldro linked above, there is a plugin called Durchblick that offers a customizable multiview utilizing a grid system. While that approach works, it is a bit restrictive in terms of possible layouts compared to some hardware switchers.

I've built a configurable multiview system as an interactable browser source, I'll leave some of my notes on suggestions/ideas here based off my experience creating that.

obs64_dSdXzVXHLF.mp4

Spec Thoughts
A multiview layout consists of a container and other properties.
A container consists of an array of slots and other containers.
Only the top-most container of a layout is allowed to nest containers
A slot contains a source to render

UI visualization is going to be difficult, as Qt does not have any systems for maintaining aspect ratio of widgets specifically. We'd probably have to just calculate widget geometry sizes so we'd want to ensure it's done in a way that can rerun on window resize (Or we restrict the Multiview management window to a fixed size)

Each slot and container stores an aspect ratio factor, with the minimum value being equal to the number of items in a row*
*Specifically whichever axis is longest, in case we want to support vertical
This factor is relative to the parent's dimensions. The top-most container of a layout would always have a factor of 1.

For example, given a multiview with dimensions of 1920x1080 a slot with a ratio factor of 1 would be 1920 x 1080 and full frame.

  • A layout with 2 items in one row would have a ratio factor of 2 for each slot, making each one 960 x 540.
  • A layout with 2 on top and 4 on bottom would have 2 slots at 960 x 540, and 4 slots at 480 x 270.

A secondary scaling factor shortFactor is calculated by adding up 1 / row total for each row. If this value is above 1, we scale each slot additionally by 1 / shortFactor

  • A layout with 2 on top, 3 below, and another 3 below, we'd exceed our short axis factor. The base sizes would be 960 x 540 and 633.6 x 356.4. Our short factor would be (1 / 2) + (1 / 3) + (1 / 3) = 1.166. We'd scale each item by 1 / 1.166 = 0.857.

@MasterDalK
Copy link
Author

Why should it be part of OBS itself and not be an OBS plugin like Durchblick and Source Dock can provide you customizable multiviews?

Multiviewers already exist, and a lot of people use it. If the feature exists already natively I'd love to see improvements to it. Especially for the "population at large" plugins like those are a bit... out of their depth to get up & running.

I think Multiviews make sense as their own dedicated window, which is an approach we're looking to take with both Scene Collections and Profiles in the future.

Moving it out into its own settings window is perfectly fine! So long as the configuration exists somewhere with more detail then it does currently.

Following from the above, we'd need to determine where this data lives. The current multiview simply grabs the first n scenes that are flagged to appear in it. A proper customization system will be Scene Collection specific, which desyncs it from where video resolution lives (Profiles). There are ongoing discussions around moving video resolution to be Scene Collection data which would solve this.

I agree with both tying the data to scene collections, as well as moving canvas resolution to the scene collection data.

While building custom layouts is nice, we should retain presets as options. Selecting a preset would automate a layout definition the same way building it manually would.

Some presets sound good, but I think by having customizable layouts you can lower the amount of presets required (i.e horizontal + vertical 2+8 and not much else preset wise off the top of my head but I will do more thinking on this). The Dyvi has no presets and is confusing to learn from the onset, so I understand that bit. However being locked to only presets like Blackmagic (or old OBS) is incredibly frustrating and from my understanding Grass Valley and Ross switchers tend to have 2-3 presets available for selection as you go into the multiviewer configuration under a "reset to defaults" option.

As far as placement goes, we should mimic the existing multiview system of simply using the order of entries to place them into spots left to right, top to bottom. This would allow easily switching between different layouts. If a user edits their layout or selects a preset with a lower slot total, we should retain the additional entries in case they increase the number of slots again, to avoid data loss.

This is along the lines of what I meant by having some level of sane defaults, no real qualms but the ability to put things "out of order" will be very important for anyone using it at a more robust level.

I am not clear about what the merge/break boxes idea solves

The intention here was to create a (potentially) more simplified method of what you had created in your browser source multiviewer, essentially operating like a spreadsheet. This is also where my add row idea comes from. The AR calculation was a bit confusing for some users at a glance, and this method actually comes also from the new Multiviewer configuration that Blackmagic has implemented for the Constellation series. In Constellations you can break up and re-merge some blocks to either add more or less slots. This would allow for vertical boxes to be created more easily, as well as being able to do weird stuff like the ones where you have 2 half-width boxes on top, 1 half-width box on the bottom left and then 4 1/4-width boxes in the bottom right quadrant. Having done a lot of pre-prod in spreadsheets for my multiviewers so I know what I need to do when I get on-site, its way faster to do it like this than the way you had it in your browser source or in pretty much anyway I've ever had to build a multiviewer in any switcher, which is why I think there's a lot to learn from that paradigm. For all the rough-edges and complaints I've had about Blackmagic products and ATEM's, building some multiviewers on Constellations last week at PAX was incredibly simple with this merge/break paradigm.

@MasterDalK
Copy link
Author

I missed this in my earlier comment but restricting the multiview configuration window to a fixed size is standard across all other hardware switchers (likely for the reasons you stated Warchamp) as far as I remember.

@mate1213
Copy link

Hi!
I've found this feature request which is connected to multiview.
Can we do this too, in the context of the reworking, and adding functionality to multiview?
https://ideas.obsproject.com/posts/1349/vu-metter-on-multiview

A lot of switchers, already supporting this kind of feature like BM Atem Studio series.

@mate1213
Copy link

mate1213 commented Jun 5, 2024

Hi!
Do we have some ETA, when can we see this feature in release?
Br

@Fenrirthviti
Copy link
Member

Hi! Do we have some ETA, when can we see this feature in release? Br

This is an RFC, which means it's still an open discussion and the design is not even finalized yet. There is no expected timeframe to these changes being accepted, if they are even accepted at all.

Please ensure comments are kept on-topic in the future, we strongly discourage comments asking "when will this be added" or anything that isn't direct discussion of the RFC itself.

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.

5 participants