Current section

Files

Jump to
membrane_hls_plugin lib membrane hls filler text_filler.ex
Raw

lib/membrane/hls/filler/text_filler.ex

defmodule Membrane.HLS.TextFiller do
use Membrane.Filter
def_input_pad(:input,
accepted_format: Membrane.Text
)
def_output_pad(:output,
accepted_format: Membrane.Text
)
def_options(
from: [
spec: Membrane.Time.t()
]
)
def handle_init(_ctx, opts) do
{[], %{from: opts.from, filled: false}}
end
def handle_buffer(:input, buffer, _ctx, state) do
if state.filled do
{[forward: buffer], state}
else
duration = buffer.pts - state.from - Membrane.Time.millisecond()
if duration > 0 do
Membrane.Logger.warning(
"Generated empty text buffer with a duration of #{buffer.pts - state.from - Membrane.Time.millisecond()}"
)
silence_buffer = %Membrane.Buffer{
payload: "",
pts: state.from,
metadata: %{to: buffer.pts - Membrane.Time.millisecond()}
}
{[buffer: {:output, [silence_buffer, buffer]}], %{state | filled: true}}
else
{[forward: buffer], state}
end
end
end
end