Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 35 additions & 6 deletions lib/transcoder.ex
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,15 @@ defmodule Membrane.Transcoder do
"""
@type stream_format_resolver :: (stream_format() -> stream_format() | stream_format_module())

@typedoc """
Describes bitrate option for video transcoding.
Can be either a ConstantBitrate or VariableBitrate struct.
"""
@type bitrate_option ::
Membrane.Transcoder.Video.ConstantBitrate.t()
| Membrane.Transcoder.Video.VariableBitrate.t()
| nil

def_input_pad :input,
accepted_format:
format
Expand Down Expand Up @@ -126,6 +135,13 @@ defmodule Membrane.Transcoder do
description: """
Per-output native acceleration setting. Inherits from bin's `native_acceleration` option if nil.
"""
],
bitrate: [
spec: bitrate_option(),
default: nil,
description: """
Per-output bitrate setting for video streams. Inherits from bin's `bitrate` option if nil.
"""
]
]

Expand Down Expand Up @@ -202,6 +218,18 @@ defmodule Membrane.Transcoder do
* `:never` - Always use software-based transcoding (default)
* `:if_available` - Use Vulkan acceleration when available on the system
"""
],
bitrate: [
spec: bitrate_option(),
default: nil,
description: """
Per-output bitrate setting for video streams.

Can be either:
* a `Membrane.Transcoder.Video.ConstantBitrate` struct for constant bitrate encoding
* a `Membrane.Transcoder.Video.VariableBitrate` struct for variable bitrate encoding
* nil (default) - use encoder defaults
"""
]

@impl true
Expand Down Expand Up @@ -260,6 +288,7 @@ defmodule Membrane.Transcoder do
output_stream_format: pad_opts.output_stream_format || state.output_stream_format,
transcoding_policy: pad_opts.transcoding_policy || state.transcoding_policy,
native_acceleration: pad_opts.native_acceleration || state.native_acceleration,
bitrate: pad_opts.bitrate || state.bitrate,
funnel_name: funnel_name,
suffix: suffix,
pad_id: pad_id
Expand Down Expand Up @@ -298,7 +327,7 @@ defmodule Membrane.Transcoder do
resolved_format,
transcoding_policy,
use_hw?,
output_spec.suffix
output_spec
)
|> get_child(output_spec.funnel_name)
]
Expand All @@ -324,7 +353,7 @@ defmodule Membrane.Transcoder do
resolved_format,
transcoding_policy,
use_hw?,
output_spec.suffix
output_spec
)
|> get_child(output_spec.funnel_name)
end)
Expand Down Expand Up @@ -383,11 +412,11 @@ defmodule Membrane.Transcoder do
output_format,
transcoding_policy,
_use_hardware_acceleration?,
suffix
output_spec
)
when Audio.is_audio_format(input_format) do
builder
|> Audio.plug_audio_transcoding(input_format, output_format, transcoding_policy, suffix)
|> Audio.plug_audio_transcoding(input_format, output_format, transcoding_policy, output_spec)
end

defp plug_transcoding(
Expand All @@ -396,7 +425,7 @@ defmodule Membrane.Transcoder do
output_format,
transcoding_policy,
use_hardware_acceleration?,
suffix
output_spec
)
when Video.is_video_format(input_format) do
builder
Expand All @@ -405,7 +434,7 @@ defmodule Membrane.Transcoder do
output_format,
transcoding_policy,
use_hardware_acceleration?,
suffix
output_spec
)
end
end
12 changes: 9 additions & 3 deletions lib/transcoder/audio.ex
Original file line number Diff line number Diff line change
Expand Up @@ -65,17 +65,23 @@ defmodule Membrane.Transcoder.Audio do
audio_stream_format() | RemoteStream.t(),
audio_stream_format(),
:always | :if_needed | :never,
String.t() | nil
map()
) :: ChildrenSpec.builder()
def plug_audio_transcoding(
builder,
input_format,
output_format,
transcoding_policy,
suffix \\ nil
output_spec
)
when is_audio_format(input_format) and is_audio_format(output_format) do
do_plug_audio_transcoding(builder, input_format, output_format, transcoding_policy, suffix)
do_plug_audio_transcoding(
builder,
input_format,
output_format,
transcoding_policy,
output_spec.suffix
)
end

defp do_plug_audio_transcoding(
Expand Down
Loading
Loading