Releases: membraneframework/membrane_core
v1.1.2
New features
- Add new callback
handle_child_terminated
by @FelonEkonom in #894
Bugfixes
Docs updgrade
- add newlines so tables are rendered correctly, update packages list by @mat-hek in #853
- Fix table rendering for raw audio and video by @harrisi in #852
Rest of changes
- Warn on demand on pad with EoS by @FelonEkonom in #851
- [Passed] Auto update packages list by @membraneframeworkadmin in #860
New Contributors
Full Changelog: v1.1.1...v1.1.2
v1.1.1
Bugfixes
- Fix 'table identifier does not refer to an existing ETS table' error when inserting metrics into the observability ETS by @mat-hek in #835
- DistributedAtomic.Worker implements sub_get as a call by @philipgiuliani in #837
Other pull requests
- Fix typo in readme by @thbar in #819
- [Passed] Auto update packages list by @membraneframeworkadmin in #800
- Bump credo by @FelonEkonom in #844
- Bump version to v1.1.1 by @FelonEkonom in #845
New Contributors
- @thbar made their first contribution in #819
- @philipgiuliani made their first contribution in #837
Full Changelog: v1.1.0...v1.1.1
v1.1.0
Biggest changes
- Introduction of new callbacks in Bins and Pipelines:
handle_child_setup_completed/3
andhandle_child_playing/3
- Improvements of
:auto
flow control mechanism, including queueing items, when processing them is not demanded in the specific moment
All changes
- Improve docs for Events and Stream Formats by @bradhanks in #750
- Improve Pipeline docs by @bradhanks in #744
- Queue buffers when auto demand is low enough by @FelonEkonom in #693
- Fix bug in handling actions returned from handle_tick. Deprecate handle_spec_started. by @FelonEkonom in #708
- Comment out action that fails due to bug in gh actions by @bartkrak in #764
- Update demand type to allow for the default demand size syntax by @Noarkhh in #768
- Improve resource guard test by @mat-hek in #777
- Fix resource guard test by @mat-hek in #778
- Ensure handle_demand busy wait infinite loop doesn't occur & deprecate message_child by @FelonEkonom in #779
- Bump Ratio to 4.0.1 by @FelonEkonom in #780
- Refactor demand mechanism by @FelonEkonom in #783
- [Passed] Auto update packages list by @membraneframeworkadmin in #795
- Test if GitHub Action add_pr_to_smackore_board works again by @bartkrak in #806
- Fix doc for
handle_start_of_stream
by @takumihara in #809 - Reshape put_in/update_in calls in crashgroups by @FelonEkonom in #811
- Implement handle_spec_setup_completed and handle_spec_playing. Release v1.1.0-rc1. by @FelonEkonom in #801
- Modify 5s linking timeout constraint by @FelonEkonom in #810
- Add CI workflow publishing Hex release on tag by @FelonEkonom in #817
- Ensure error logs are always printed by @FelonEkonom in #822
New Contributors
- @Noarkhh made their first contribution in #768
- @takumihara made their first contribution in #809
Full Changelog: v1.0.1...v1.1.0
v1.1.0-rc1
What's Changed
- Implement handle_spec_setup_completed and handle_spec_playing. Release v1.1.0-rc1. by @FelonEkonom in #801
- Modify 5s linking timeout constraint by @FelonEkonom in #810
- [Passed] Auto update packages list by @membraneframeworkadmin in #795
- Test if GitHub Action add_pr_to_smackore_board works again by @bartkrak in #806
- Fix doc for
handle_start_of_stream
by @takumihara in #809 - Reshape put_in/update_in calls in crashgroups by @FelonEkonom in #811
New Contributors
- @takumihara made their first contribution in #809
Full Changelog: v1.1.0-rc0...v1.1.0-rc1
v1.1.0-rc0
This release contains:
- Upgrade in flow control mechanism - queuing buffers, when demand is low in
flow_control: :auto
. - Few bug fixes.
- Deprecation of
handle_spec_started/3
callback andMembrane.Testing.Pipeline.message_child/3
in favor ofMembrane.Testing.Pipeline.notify_child/3
. - Bump dependency to
Ratio
to~> 3.0 or ~> 4.0
. - Docs upgrade.
All changes
- Improve docs for Events and Stream Formats by @bradhanks in #750
- Improve Pipeline docs by @bradhanks in #744
- Queue buffers when auto demand is low enough by @FelonEkonom in #693
- Fix bug in handling actions returned from handle_tick. Deprecate handle_spec_started. by @FelonEkonom in #708
- commented out action that fails due to gh actions bug by @bartkrak in #764
- Update demand type to allow for the default demand size syntax by @Noarkhh in #768
- improve resource guard test by @mat-hek in #777
- fix resource guard test by @mat-hek in #778
- Ensure handle_demand busy wait infinite loop doesn't occur & deprecate message_child by @FelonEkonom in #779
- Bump Ratio to
~> 3.0 or ~> 4.0
by @FelonEkonom in #780 - Refactor demand mechanism by @FelonEkonom in #783
New Contributors
Full Changelog: v1.0.1...v1.1.0-rc0
v1.0.1
This release contains some bug fixes and small improvements. The most important are:
- Fix for a bug in the timer that made it tick two times too slow sometimes (non-deterministically). Fixed in #685.
- There's a new field
crash_reason
in Pipeline's and Bin's callback context that can be used in the handle_crash_group_down callback, added in #720. - Unrecognized messages now trigger a warning if a component doesn't have the
handle_info
callback implemented, just like in GenServer. See #680.
All changes
- Sort component state fields in the error logs in the order from the most to the least important by @FelonEkonom in #641
- Fix clock selection by @mat-hek in #626
- Fix a typo by @ream88 in #663
- Add info about change in default flow control value by @FelonEkonom in #673
- Log messages in the default handle_info implementation by @mickel8 in #680
- fix typespecs in UtilitySupervisor by @mat-hek in #681
- Fix timer running late by @varsill in #685
- Improve callbacks return types by @varsill in #702
- Remove portaudio and mad installation instructions from readme by @mat-hek in #748
- lib/membrane/utility_supervisor.ex doc edits by @bradhanks in #746
- Add crash reason handle crash group by @DominikWolek in #720
- Bump version to v1.0.1 by @FelonEkonom in #755
New Contributors
- @ream88 made their first contribution in #663
- @bartkrak made their first contribution in #723
- @bradhanks made their first contribution in #746
Full Changelog: v1.0.0...v1.0.1
v1.0.0
Finally, we have released v1.0.0 of Membrane Core! 🎉🎉🎉 Comparing to v0.12.9, this releases contains many changes in API and framework private modules. We wrote a migration guide helping you adjust your code to Membrane Core v1.0.0. Let's take a look, at what changes are introduced with this release:
Improvements and optimizations in the demands mechanism
Release v1.0.0 contains a lot of changes in Membrane private modules responsible for managing the backpressure mechanism. The two biggest changes are:
- Implementation of
:push
effective flow control in elements containing pads withflow_control: :auto
- it allows avoiding work related to the calculation of the value of auto-demand in input pads withflow_contro: :auto
, when a pipeline topology allows us to skip it without damage of backpressure mechanism. This change also fixes the problem withtoilet overflow
error occurring far from the element, which works too slowly. - Passing the value of
demand
using:atomics
, instead of message passing - this change is a big performance and memory optimisation and allowed us to make auto-demands more precise in the amount of demanded data.
Support for kino_membrane
This release brings compatibility with kino_membrane, the tool for visualization and introspection of Membrane pipelines in Livebook.
Sending end of stream
, even if there was no start of stream
before
Since now, we can send end of stream
on pads, even if we haven't sent start of stream
there yet. Moreover, before unlinking an input pad, every element will always execute handle_end_of_stream
for this pad, no matter, if it received start of stream
earlier, or not. This will happen before calling handle_pad_removed/3
in the case of dynamic pads and on entering terminating
state, in the case of static pads.
Removing handle_process_list/4
and handle_write_list/4
callbacks
Since v1.0.0
, you have to handle every single buffer separately in handle_buffer/4
callback, instead of handling whole list of buffers in this in handle_process_list/4
or handle_write_list/4
.
API improvements
handle_process
andhandle_write
are replaced withhandle_buffer
for better consistency:mode
and:demand_mode
options in pad definition are replaced with:flow_control
, which may be:push
,:auto
or:manual
and defaults to:auto
whenever available.- Callback contexts are now maps instead of structs and they're documented in a single module per component, so it's more straightforward to figure out what they contain
All changes
Breaking changes
- Rename handle_write and handle_process to handle_buffer by @FelonEkonom in #506
- Unify mode and demand_mode options of pads by @varsill in #508
- Demand units conversion by @varsill in #498
- Rename
Membrane.RemoteControlled.Pipeline
toMembrane.RCPipeline
by @mat-hek in #505 - Update Membrane.Time API by @FelonEkonom in #494
- remove _t suffix from types by @mat-hek in #509
- Update Membrane.Pipeline.terminate/2 behavior by @FelonEkonom in #519
- Remove assert_pipeline_play by @FelonEkonom in #528
- Update supervisor exit reason by @FelonEkonom in #567
- Send end of stream, even if there was no start of stream before by @FelonEkonom in #577
- Remove default implementation of start, start_link and terminate functions from Membrane.Pipeline by @FelonEkonom in #598
- Delete handle_buffers_batch callback by @FelonEkonom in #601
Non-breaking changes
- Children groups and anonymous children by @varsill in #461
- Implement
:remove_link
action by @FelonEkonom in #487 - Add
Membrane.ResourceGuard.cleanup/1
by @FelonEkonom in #477 - Add
Membrane.Testing.Pipeline.get_child_pid/2
@FelonEkonom in #497 - Bump Ratio to 3.0 by @varsill in #438
- Validate Testing.Pipeline options by @FelonEkonom in #593
- New readme by @mat-hek in #597
Bug fixes
- Spawn Membrane.Clock via subprocess supervisor in components by @FelonEkonom in #594
- Fix flaky tests on Elixir 1.15 by @FelonEkonom in #595
- Fix empty pad options bug by @FelonEkonom in #599
Full Changelog: v0.12.9...v1.0.0
v1.0.0-rc1
Here comes the second release candidate for Membrane Core 1.0.0! Compared to v1.0.0-rc0, this release does not contain a lot of changes in API, but it introduces many bug fixes, improvements and optimizations in the Membrane private modules. We wrote a migration guide, helping you in adjusting your code to this version of membrane_core
. But now, let's take a look at the summary, of what changes we have just introduced:
Improvements and optimizations in the demands mechanism
Release v1.0.0-rc1 contains a lot of changes in Membrane private modules responsible for managing the backpressure mechanism. The two biggest changes are:
- Implementation of
:push
effective flow control in elements containing pads withflow_control: :auto
- it allows avoiding work related to the calculation of the value of auto-demand in input pads withflow_contro: :auto
, when a pipeline topology allows us to skip it without damage of backpressure mechanism. This change also fixes the problem withtoilet overflow
error occurring far from the element, which works too slowly. - Passing the value of
demand
using:atomics
, instead of message passing - this change is a big performance and memory optimisation and allowed us to make auto-demands more precise in the amount of demanded data.
Support for kino_membrane
This release brings compatibility with kino_membrane, the tool for visualization and introspection of Membrane pipelines in Livebook.
Sending end of stream
, even if there was no start of stream
before
Since now, we can send end of stream
on pads, even if we haven't sent start of stream
there yet. Moreover, before unlinking an input pad, every element will always execute handle_end_of_stream
for this pad, no matter, if it received start of stream
earlier, or not. This will happen before calling handle_pad_removed/3
in the case of dynamic pads and on entering terminating
state, in the case of static pads.
Removing c:Membrane.Element.WithInputPads.handle_buffers_batch/4
This release reverts support for this callback, so if you have used it, you have to rewrite your element to use c:Membrane.Element.WithInputPads.handle_buffer/4
instead.
Crash groups in bins
Until now, it was possible, to create a crash group only from the level of pipelines. v1.0.0-rc1
introduces support for doing it also from bins!
All changes
Breaking changes
- Update Membrane.Pipeline.terminate/2 behavior by @FelonEkonom in #519
- Remove assert_pipeline_play by @FelonEkonom in #528
- Update supervisor exit reason by @FelonEkonom in #567
- Send end of stream, even if there was no start of stream before by @FelonEkonom in #577
- Remove default implementation of start, start_link and terminate functions from Membrane.Pipeline by @FelonEkonom in #598
- Delete handle_buffers_batch callback by @FelonEkonom in #601
Non-breaking changes
- Crash groups in bins by @FelonEkonom in #521
- Allow passing a list of buffers to the testing source by @varsill in #539
- Implement Debug.Filter and Debug.Sink by @FelonEkonom in #552
- Establish links in the order from the spec by @FelonEkonom in #558
- Raise on attempting to remove a not existing child by @FelonEkonom in #553
- Implement
:pause_auto_demand
and:resume_auto_demand
actions by @FelonEkonom in #586 - Dashboard by @mat-hek in #571
- Autodemands in sinks and endpoints by @FelonEkonom in #512
- Add performance test by @varsill in #515
- Improve performance test by @varsill in #540
- Filter out the branches from forks from the performance test by @varsill in #548
- Do not launch performance test after merge to master by @varsill in #550
- Move parts of @moduledoc from Membrane.Element.Base to Membrane.Element by @djanda97 in #547
- Remove redundant check if static pads are linked by @FelonEkonom in #557
- Auto push full impl by @FelonEkonom in #537
- Add docs about default callback implementation by @Rados13 in #572
- Add typedocs for @type t types by @varsill in #551
- make most tests run async by @mat-hek in #576
- Improve
in_progress_memory
metric in performance benchmark by @varsill in #579 - Update actions docs by @FelonEkonom in #580
- Refactor child pad removed default error message by @FelonEkonom in #581
- Fix tests failing on Elixir 1.14 by @FelonEkonom in #516
- Bugfix pipeline call by @varsill in #527
- Update processed specs, when children or link is down by @FelonEkonom in #517
- Validate Testing.Pipeline options by @FelonEkonom in #593
- New readme by @mat-hek in #597
Bug fixes
- Fix pipeline's call function spec by @Qizot in #532
- Enable :unmatched_returns in dialyzer by @bblaszkow06 in #534
- Update link to coding style guide by @djanda97 in #546
- Fix the bug with pipeline persisting in Zombie mode after self-terminating with
terminate: :normal
action by @varsill in #538 - Benchmark tags display bugfix by @varsill in #544
- Fix bug when bin removes its pad by @FelonEkonom in #554
- Fix bug in Supervisors when pipeline is distributed by @FelonEkonom in #556
- Stop calling handle_demand after end of stream by @FelonEkonom in #568
- fix compatibility with elixir 1.15 by @mat-hek in #570
- Fix compilation error occurring on Elixir 1.15 by @FelonEkonom in #573
- Fix process.info in metrics by @mat-hek in #582
- Add pid_string to stalker config by @FelonEkonom in #584
- Fix specs for default pipeline functions by @FelonEkonom in #585
- Fix stream format error message, fix race condition in handling child pad removed by @FelonEkonom in #591
- Fix test failing on elixir 1.15 by @FelonEkonom in #592
- Spawn Membrane.Clock via subprocess supervisor in components by @FelonEkonom in #594
- Fix flaky tests on Elixir 1.15 by @FelonEkonom in #595
- Fix empty pad options bug by @FelonEkonom in #599
New Contributors
Full Changelog: v1.0.0-rc0...v1.0.0-rc1
v0.12.9
What's Changed
- Add
:pause_auto_demand
and:resume_auto_demand
actions. #586 - Fix process leak in starting clocks. #594
- Add child exit reason to the supervisor exit reason. #595
Full Changelog: v0.12.8...v0.12.9
v0.12.8
What's Changed
- Move metrics ets creation to stalker by @mat-hek in #589
- Refactor code related to crash groups and linking mechanism by @FelonEkonom in #574
- Fix specs for default pipeline functions by @FelonEkonom in #585
- Fix stream format error message, fix race condition in handling child pad removed by @FelonEkonom in #591
Full Changelog: v0.12.7...v0.12.8