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

Ms 390 fix removing pads should pop ready frames #87

Merged
merged 7 commits into from
Feb 16, 2023

Conversation

jerzywilczek
Copy link
Contributor

The bug was that the compositor used to not render any frames when sending an end of stream message to a video. This meant that in cases where all videos but one had frames for composing and then the one video received end of stream, frames would never be rendered.

It also fixes a related issue caused by the fact that not all videos receive end of stream (those, which did not receive start of stream do not).

While fixing this problem, several serious bugs were discovered in the 'realtime mode' feature. We decided to remove it altogether since no one uses it anyway.

Closes #85

The bug was that the compositor used to not render any frames when
sending an end of stream message to a video. This meant that in cases
where all videos but one had frames for composing and then the one video
received end of stream, frames would never be rendered.

While fixing this problem, several serious bugs were discovered in the
'realtime mode' feature. We decided to remove it altogether since noone
uses it anyway.
A video that was added to the compositor, but did not receive start of
stream would also not receive end of strem when it's removed. This could
cause the compositor to wait for the missing frames forever.
lib/membrane/video_compositor/compositor_element.ex Outdated Show resolved Hide resolved
lib/membrane/video_compositor/compositor_element.ex Outdated Show resolved Hide resolved
Comment on lines 235 to 238
defp is_pad_waiting_for_caps?(pad, state) do
pad_id = Map.get(state.pads_to_ids, pad)

Map.has_key?(state.initial_video_transformations, pad_id)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. Relying here on the logic that once the Video Compositor receives stream format from the input pad its initial_video_transformations are removed from the map kept in state by calling Map.pop(initial_video_transformations, id) is error-prone. This might break and produce hard-to-trace errors once we change logic related to video transformations.
  2. caps -> stream_format

lib/membrane/video_compositor/compositor_element.ex Outdated Show resolved Hide resolved
lib/membrane/video_compositor/compositor_element.ex Outdated Show resolved Hide resolved
The renames were done in both the `WgpuAdapter` and `Native` modules.
Most private functions are also spec'ed.
Also merge `initial_video_transformations` and `initial_placements` into
a singular map with a more apt name -- `videos_waiting_for_stream_format`
Copy link
Member

@WojciechBarczynski WojciechBarczynski left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@jerzywilczek jerzywilczek merged commit 6fc1c7b into master Feb 16, 2023
@jerzywilczek jerzywilczek deleted the MS-390-fix-removing-pads-should-pop-ready-frames branch February 16, 2023 13:13
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.

Handling pad removing
2 participants