From 73a2150a2f8f5162b5472dd62942992951b9cffb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Chali=C5=84ski?= Date: Thu, 18 Jan 2024 18:35:56 +0100 Subject: [PATCH 01/10] bump_current_pts crash fix --- lib/membrane_aac_fdk_plugin/encoder.ex | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/membrane_aac_fdk_plugin/encoder.ex b/lib/membrane_aac_fdk_plugin/encoder.ex index ba2d48d..9d79391 100644 --- a/lib/membrane_aac_fdk_plugin/encoder.ex +++ b/lib/membrane_aac_fdk_plugin/encoder.ex @@ -83,6 +83,14 @@ defmodule Membrane.AAC.FDK.Encoder do type: :integer, spec: pos_integer() | nil, default: nil + ], + input_stream_format: [ + spec: RawAudio.t(), + type: :stream_format, + default: nil, + description: """ + Input type - used to set input sample rate and channels. + """ ] def_output_pad :output, accepted_format: %AAC{encapsulation: :ADTS} @@ -107,6 +115,7 @@ defmodule Membrane.AAC.FDK.Encoder do @impl true def handle_stream_format(:input, format, _ctx, state) do + native = mk_native!( format.channels, @@ -131,8 +140,7 @@ defmodule Membrane.AAC.FDK.Encoder do mpeg_version: mpeg_version, encapsulation: :ADTS } - - {[stream_format: {:output, out_format}], %{state | native: native}} + {[stream_format: {:output, out_format}], %{state | native: native, input_stream_format: format}} end @impl true From 25169a6e3ab5ecb3b61c6070dd41b7e577f213c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Chali=C5=84ski?= Date: Thu, 18 Jan 2024 18:37:12 +0100 Subject: [PATCH 02/10] mix format --- lib/membrane_aac_fdk_plugin/encoder.ex | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/membrane_aac_fdk_plugin/encoder.ex b/lib/membrane_aac_fdk_plugin/encoder.ex index 9d79391..06fb85d 100644 --- a/lib/membrane_aac_fdk_plugin/encoder.ex +++ b/lib/membrane_aac_fdk_plugin/encoder.ex @@ -115,7 +115,6 @@ defmodule Membrane.AAC.FDK.Encoder do @impl true def handle_stream_format(:input, format, _ctx, state) do - native = mk_native!( format.channels, @@ -140,7 +139,9 @@ defmodule Membrane.AAC.FDK.Encoder do mpeg_version: mpeg_version, encapsulation: :ADTS } - {[stream_format: {:output, out_format}], %{state | native: native, input_stream_format: format}} + + {[stream_format: {:output, out_format}], + %{state | native: native, input_stream_format: format}} end @impl true From 941351908eeaccb06899fc300de0045f3aec4956 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Chali=C5=84ski?= Date: Thu, 18 Jan 2024 23:35:04 +0100 Subject: [PATCH 03/10] warn if pts missing --- lib/membrane_aac_fdk_plugin/encoder.ex | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/membrane_aac_fdk_plugin/encoder.ex b/lib/membrane_aac_fdk_plugin/encoder.ex index 06fb85d..461c188 100644 --- a/lib/membrane_aac_fdk_plugin/encoder.ex +++ b/lib/membrane_aac_fdk_plugin/encoder.ex @@ -166,9 +166,13 @@ defmodule Membrane.AAC.FDK.Encoder do {encoded_buffers, bytes_used, state} when bytes_used > 0 -> <<_handled::binary-size(bytes_used), rest::binary>> = to_encode - if check_pts_integrity? and length(encoded_buffers) >= 2 and - Enum.at(encoded_buffers, 1).pts > input_pts do - Membrane.Logger.warning("PTS values are overlapping") + cond do + check_pts_integrity? and length(encoded_buffers) >= 2 and Enum.at(encoded_buffers, 1).pts > input_pts -> + Membrane.Logger.warning("PTS values are overlapping") + check_pts_integrity? and length(encoded_buffers) >= 2 and Enum.at(encoded_buffers, 1).pts < input_pts -> + Membrane.Logger.warning("PTS values are not continous") + true -> + :ok end {[buffer: {:output, encoded_buffers}], %{state | queue: rest}} From 63aff012068ef330b7007bc5856c9f79e5e343f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Chali=C5=84ski?= Date: Thu, 18 Jan 2024 23:38:02 +0100 Subject: [PATCH 04/10] mix format --- lib/membrane_aac_fdk_plugin/encoder.ex | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/membrane_aac_fdk_plugin/encoder.ex b/lib/membrane_aac_fdk_plugin/encoder.ex index 461c188..eaa447c 100644 --- a/lib/membrane_aac_fdk_plugin/encoder.ex +++ b/lib/membrane_aac_fdk_plugin/encoder.ex @@ -167,10 +167,14 @@ defmodule Membrane.AAC.FDK.Encoder do <<_handled::binary-size(bytes_used), rest::binary>> = to_encode cond do - check_pts_integrity? and length(encoded_buffers) >= 2 and Enum.at(encoded_buffers, 1).pts > input_pts -> + check_pts_integrity? and length(encoded_buffers) >= 2 and + Enum.at(encoded_buffers, 1).pts > input_pts -> Membrane.Logger.warning("PTS values are overlapping") - check_pts_integrity? and length(encoded_buffers) >= 2 and Enum.at(encoded_buffers, 1).pts < input_pts -> + + check_pts_integrity? and length(encoded_buffers) >= 2 and + Enum.at(encoded_buffers, 1).pts < input_pts -> Membrane.Logger.warning("PTS values are not continous") + true -> :ok end From a4d827b051d40dd1ba91801cbf8c9571b06fc6bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Chali=C5=84ski?= Date: Fri, 19 Jan 2024 17:41:57 +0100 Subject: [PATCH 05/10] validate_pts_integrity func --- lib/membrane_aac_fdk_plugin/encoder.ex | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/lib/membrane_aac_fdk_plugin/encoder.ex b/lib/membrane_aac_fdk_plugin/encoder.ex index eaa447c..687e481 100644 --- a/lib/membrane_aac_fdk_plugin/encoder.ex +++ b/lib/membrane_aac_fdk_plugin/encoder.ex @@ -166,18 +166,7 @@ defmodule Membrane.AAC.FDK.Encoder do {encoded_buffers, bytes_used, state} when bytes_used > 0 -> <<_handled::binary-size(bytes_used), rest::binary>> = to_encode - cond do - check_pts_integrity? and length(encoded_buffers) >= 2 and - Enum.at(encoded_buffers, 1).pts > input_pts -> - Membrane.Logger.warning("PTS values are overlapping") - - check_pts_integrity? and length(encoded_buffers) >= 2 and - Enum.at(encoded_buffers, 1).pts < input_pts -> - Membrane.Logger.warning("PTS values are not continous") - - true -> - :ok - end + validate_pts_integrity(check_pts_integrity?, encoded_buffers, input_pts) {[buffer: {:output, encoded_buffers}], %{state | queue: rest}} @@ -287,4 +276,17 @@ defmodule Membrane.AAC.FDK.Encoder do defp validate_bitrate_mode!(bitrate_mode) do raise "Invalid bitrate_mode: #{inspect(bitrate_mode)}" end + + defp validate_pts_integrity(true = _check_pts_integrity?, encoded_buffers, input_pts) do + cond do + length(encoded_buffers) >= 2 and Enum.at(encoded_buffers, 1).pts > input_pts -> + Membrane.Logger.warning("PTS values are overlapping") + + length(encoded_buffers) >= 2 and Enum.at(encoded_buffers, 1).pts < input_pts -> + Membrane.Logger.warning("PTS values are not continous") + + true -> + :ok + end + end end From 0199e295be5eff5316b2364a1e097842434f33f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Chali=C5=84ski?= Date: Fri, 19 Jan 2024 17:49:36 +0100 Subject: [PATCH 06/10] pattern matching fix --- lib/membrane_aac_fdk_plugin/encoder.ex | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/membrane_aac_fdk_plugin/encoder.ex b/lib/membrane_aac_fdk_plugin/encoder.ex index 687e481..d2d6ba1 100644 --- a/lib/membrane_aac_fdk_plugin/encoder.ex +++ b/lib/membrane_aac_fdk_plugin/encoder.ex @@ -289,4 +289,8 @@ defmodule Membrane.AAC.FDK.Encoder do :ok end end + + defp validate_pts_integrity(_check_pts_integrity?, _packets, _input_pts) do + :ok + end end From 6aa01e439c2c34411004360df2d457f5cdff6f10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Chali=C5=84ski?= Date: Mon, 22 Jan 2024 14:05:05 +0100 Subject: [PATCH 07/10] validate_pts_integrity refactor --- lib/membrane_aac_fdk_plugin/encoder.ex | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/membrane_aac_fdk_plugin/encoder.ex b/lib/membrane_aac_fdk_plugin/encoder.ex index d2d6ba1..801ad32 100644 --- a/lib/membrane_aac_fdk_plugin/encoder.ex +++ b/lib/membrane_aac_fdk_plugin/encoder.ex @@ -166,7 +166,9 @@ defmodule Membrane.AAC.FDK.Encoder do {encoded_buffers, bytes_used, state} when bytes_used > 0 -> <<_handled::binary-size(bytes_used), rest::binary>> = to_encode - validate_pts_integrity(check_pts_integrity?, encoded_buffers, input_pts) + if check_pts_integrity? do + validate_pts_integrity(encoded_buffers, input_pts) + end {[buffer: {:output, encoded_buffers}], %{state | queue: rest}} @@ -277,20 +279,18 @@ defmodule Membrane.AAC.FDK.Encoder do raise "Invalid bitrate_mode: #{inspect(bitrate_mode)}" end - defp validate_pts_integrity(true = _check_pts_integrity?, encoded_buffers, input_pts) do + defp validate_pts_integrity(packets, input_pts) do cond do - length(encoded_buffers) >= 2 and Enum.at(encoded_buffers, 1).pts > input_pts -> + length(packets) < 2 or Enum.at(packets, 1).pts == input_pts -> + :ok + + Enum.at(packets, 1).pts > input_pts -> Membrane.Logger.warning("PTS values are overlapping") + :ok - length(encoded_buffers) >= 2 and Enum.at(encoded_buffers, 1).pts < input_pts -> + Enum.at(packets, 1).pts < input_pts -> Membrane.Logger.warning("PTS values are not continous") - - true -> :ok end end - - defp validate_pts_integrity(_check_pts_integrity?, _packets, _input_pts) do - :ok - end end From 420007240b0330040b91fafd0dee803886ac3ff9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Chali=C5=84ski?= Date: Mon, 22 Jan 2024 14:08:16 +0100 Subject: [PATCH 08/10] input_stream_format removed from def_options --- lib/membrane_aac_fdk_plugin/encoder.ex | 8 -------- 1 file changed, 8 deletions(-) diff --git a/lib/membrane_aac_fdk_plugin/encoder.ex b/lib/membrane_aac_fdk_plugin/encoder.ex index 801ad32..4b11291 100644 --- a/lib/membrane_aac_fdk_plugin/encoder.ex +++ b/lib/membrane_aac_fdk_plugin/encoder.ex @@ -83,14 +83,6 @@ defmodule Membrane.AAC.FDK.Encoder do type: :integer, spec: pos_integer() | nil, default: nil - ], - input_stream_format: [ - spec: RawAudio.t(), - type: :stream_format, - default: nil, - description: """ - Input type - used to set input sample rate and channels. - """ ] def_output_pad :output, accepted_format: %AAC{encapsulation: :ADTS} From 231d40009357b002798cf79af1b98741da35c91e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Chali=C5=84ski?= Date: Mon, 22 Jan 2024 14:23:10 +0100 Subject: [PATCH 09/10] badkey fix --- lib/membrane_aac_fdk_plugin/encoder.ex | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/membrane_aac_fdk_plugin/encoder.ex b/lib/membrane_aac_fdk_plugin/encoder.ex index 4b11291..f377ad1 100644 --- a/lib/membrane_aac_fdk_plugin/encoder.ex +++ b/lib/membrane_aac_fdk_plugin/encoder.ex @@ -133,7 +133,10 @@ defmodule Membrane.AAC.FDK.Encoder do } {[stream_format: {:output, out_format}], - %{state | native: native, input_stream_format: format}} + Map.merge(state, %{ + native: native, + input_stream_format: format + })} end @impl true From 67fafd3fe586639643fb36ff06303cda32e641a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Chali=C5=84ski?= Date: Mon, 22 Jan 2024 14:32:42 +0100 Subject: [PATCH 10/10] version bump --- README.md | 2 +- mix.exs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a113b4a..525cb79 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ The package can be installed by adding `membrane_aac_fdk_plugin` to your list of ```elixir def deps do [ - {:membrane_aac_fdk_plugin, "~> 0.18.4"} + {:membrane_aac_fdk_plugin, "~> 0.18.5"} ] end ``` diff --git a/mix.exs b/mix.exs index 82cc949..f60a913 100644 --- a/mix.exs +++ b/mix.exs @@ -1,7 +1,7 @@ defmodule Membrane.AAC.FDK.Plugin.MixProject do use Mix.Project - @version "0.18.4" + @version "0.18.5" @github_url "https://github.com/membraneframework/membrane_aac_fdk_plugin" def project do