From 66e163f1770b04bef7dfe14e99bacbe1b421c44c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Kita?= Date: Mon, 20 Jan 2025 16:30:37 +0100 Subject: [PATCH] CMAF demuxer (#118) * Add CMAF demuxer --------- Co-authored-by: Mateusz Front --- lib/membrane_mp4/container/parse_helper.ex | 14 +- lib/membrane_mp4/container/schema.ex | 77 +-- lib/membrane_mp4/demuxer/cmaf.ex | 458 ++++++++++++++++++ lib/membrane_mp4/demuxer/cmaf/samples_info.ex | 93 ++++ lib/membrane_mp4/segment_index_box.ex | 20 +- test/fixtures/cmaf/ref_audio.aac | Bin 0 -> 96303 bytes test/fixtures/cmaf/ref_video.h264 | Bin 0 -> 32839 bytes .../demuxer/cmaf/demuxer_test.exs | 177 +++++++ test/support/demuxer/multi_file_source.ex | 39 ++ 9 files changed, 835 insertions(+), 43 deletions(-) create mode 100644 lib/membrane_mp4/demuxer/cmaf.ex create mode 100644 lib/membrane_mp4/demuxer/cmaf/samples_info.ex create mode 100644 test/fixtures/cmaf/ref_audio.aac create mode 100644 test/fixtures/cmaf/ref_video.h264 create mode 100644 test/membrane_mp4/demuxer/cmaf/demuxer_test.exs create mode 100644 test/support/demuxer/multi_file_source.ex diff --git a/lib/membrane_mp4/container/parse_helper.ex b/lib/membrane_mp4/container/parse_helper.ex index e3a235e8..02fb9e28 100644 --- a/lib/membrane_mp4/container/parse_helper.ex +++ b/lib/membrane_mp4/container/parse_helper.ex @@ -110,15 +110,21 @@ defmodule Membrane.MP4.Container.ParseHelper do defp parse_field(data, {name, {:int, size}}, context) do case data do - <> -> {:ok, {int, rest}, context} - _unknown_format -> parse_field_error(data, name) + <> -> + {:ok, {int, rest}, context} + + _unknown_format -> + parse_field_error(data, name) end end defp parse_field(data, {name, {:uint, size}}, context) do case data do - <> -> {:ok, {uint, rest}, context} - _unknown_format -> parse_field_error(data, name) + <> -> + {:ok, {uint, rest}, context} + + _unknown_format -> + parse_field_error(data, name) end end diff --git a/lib/membrane_mp4/container/schema.ex b/lib/membrane_mp4/container/schema.ex index caad4224..28e0fec8 100644 --- a/lib/membrane_mp4/container/schema.ex +++ b/lib/membrane_mp4/container/schema.ex @@ -377,35 +377,28 @@ defmodule Membrane.MP4.Container.Schema do ] ], sidx: [ - version: 1, + version: 0, fields: @full_box ++ [ reference_id: :uint32, timescale: :uint32, - earliest_presentation_time: :uint64, - first_offset: :uint64, + earliest_presentation_time: {:uint32, when: {:version, value: 0}}, + earliest_presentation_time: {:uint64, when: {:version, value: 1}}, + first_offset: {:uint32, when: {:version, value: 0}}, + first_offset: {:uint64, when: {:version, value: 1}}, reserved: <<0::16-integer>>, reference_count: :uint16, - # TODO: make a list once list length is supported - # reference_list: [ - # [ - # reference_type: :bin1, - # referenced_size: :uint31, - # subsegment_duration: :uint32, - # starts_with_sap: :bin1, - # sap_type: :uint3, - # sap_delta_time: :uint28 - # ], - # length: :reference_count - # ] - reference_type: :bin1, - # from the beginning of moof to the end - referenced_size: :uint31, - subsegment_duration: :uint32, - starts_with_sap: :bin1, - sap_type: :uint3, - sap_delta_time: :uint28 + reference_list: + {:list, + [ + reference_type: :bin1, + referenced_size: :uint31, + subsegment_duration: :uint32, + starts_with_sap: :bin1, + sap_type: :uint3, + sap_delta_time: :uint28 + ]} ] ], moof: [ @@ -424,9 +417,10 @@ defmodule Membrane.MP4.Container.Schema do @full_box ++ [ track_id: :uint32, - default_sample_duration: :uint32, - default_sample_size: :uint32, - default_sample_flags: :uint32 + base_data_offset: {:uint64, when: {:fo_flags, mask: 0x00001}}, + default_sample_duration: {:uint32, when: {:fo_flags, mask: 0x000008}}, + default_sample_size: {:uint32, when: {:fo_flags, mask: 0x000010}}, + default_sample_flags: {:uint32, when: {:fo_flags, mask: 0x000020}} ] ], tfdt: [ @@ -434,7 +428,8 @@ defmodule Membrane.MP4.Container.Schema do fields: @full_box ++ [ - base_media_decode_time: :uint64 + base_media_decode_time: {:uint32, when: {:version, value: 0}}, + base_media_decode_time: {:uint64, when: {:version, value: 1}} ] ], trun: [ @@ -443,15 +438,35 @@ defmodule Membrane.MP4.Container.Schema do @full_box ++ [ sample_count: :uint32, - data_offset: :int32, + data_offset: {:int32, when: {:fo_flags, mask: 0x000001}}, + first_sample_flags: {:bin32, when: {:fo_flags, mask: 0x000004}}, + samples: + {:list, + [ + sample_duration: {:uint32, when: {:fo_flags, mask: 0x000100}}, + sample_size: {:uint32, when: {:fo_flags, mask: 0x000200}}, + sample_flags: {:bin32, when: {:fo_flags, mask: 0x000400}}, + sample_composition_offset: + {:uint32, when: {:fo_flags, mask: 0x000800}} + ]} + ] + ], + trun: [ + version: 1, + fields: + @full_box ++ + [ + sample_count: :uint32, + data_offset: {:int32, when: {:fo_flags, mask: 0x000001}}, + first_sample_flags: {:bin32, when: {:fo_flags, mask: 0x000004}}, samples: {:list, [ - sample_duration: :uint32, - sample_size: :uint32, - sample_flags: :bin32, + sample_duration: {:uint32, when: {:fo_flags, mask: 0x000100}}, + sample_size: {:uint32, when: {:fo_flags, mask: 0x000200}}, + sample_flags: {:bin32, when: {:fo_flags, mask: 0x000400}}, sample_composition_offset: - {:uint32, when: {:fo_flags, mask: 0x800}} + {:int32, when: {:fo_flags, mask: 0x000800}} ]} ] ] diff --git a/lib/membrane_mp4/demuxer/cmaf.ex b/lib/membrane_mp4/demuxer/cmaf.ex new file mode 100644 index 00000000..87c92fe3 --- /dev/null +++ b/lib/membrane_mp4/demuxer/cmaf.ex @@ -0,0 +1,458 @@ +defmodule Membrane.MP4.Demuxer.CMAF do + @moduledoc """ + A demuxer capable of demuxing streams packed in CMAF container. + """ + use Membrane.Filter + + alias Membrane.{MP4, RemoteStream} + alias Membrane.MP4.Container + alias Membrane.MP4.Demuxer.CMAF.SamplesInfo, as: SamplesInfo + + def_input_pad :input, + accepted_format: + %RemoteStream{type: :bytestream, content_format: content_format} + when content_format in [nil, MP4], + flow_control: :auto + + def_output_pad :output, + accepted_format: + any_of( + %Membrane.AAC{config: {:esds, _esds}}, + %Membrane.H264{ + stream_structure: {_avc, _dcr}, + alignment: :au + }, + %Membrane.H265{ + stream_structure: {_hevc, _dcr}, + alignment: :au + }, + %Membrane.Opus{self_delimiting?: false} + ), + availability: :on_request, + options: [ + kind: [ + spec: :video | :audio | nil, + default: nil, + description: """ + Specifies, what kind of data can be handled by a pad. + """ + ] + ] + + @typedoc """ + Notification sent when the tracks are identified in the MP4. + + Upon receiving the notification, `Pad.ref(:output, track_id)` pads should be linked + for all the `track_id` in the list. + The `content` field contains the stream format which is contained in the track. + """ + @type new_tracks_t() :: + {:new_tracks, [{track_id :: integer(), content :: struct()}]} + + @impl true + def handle_init(_ctx, _options) do + state = %{ + unprocessed_boxes: [], + unprocessed_binary: <<>>, + samples_info: nil, + track_to_pad_map: nil, + all_pads_connected?: false, + buffered_actions: [], + fsm_state: :reading_cmaf_header, + track_notifications_sent?: false, + last_timescales: %{}, + how_many_segment_bytes_read: 0, + tracks_info: nil, + tracks_notification_sent?: false + } + + {[], state} + end + + @impl true + def handle_stream_format(:input, _stream_format, _ctx, state) do + {[], state} + end + + @impl true + def handle_buffer(:input, buffer, ctx, state) do + {new_boxes, rest} = Container.parse!(state.unprocessed_binary <> buffer.payload) + + state = %{ + state + | unprocessed_boxes: state.unprocessed_boxes ++ new_boxes, + unprocessed_binary: rest + } + + handle_boxes(ctx, state) + end + + defp handle_boxes(_ctx, %{unprocessed_boxes: []} = state) do + {[], state} + end + + defp handle_boxes(ctx, state) do + [{first_box_name, first_box} | rest_of_boxes] = state.unprocessed_boxes + {this_box_actions, state} = do_handle_box(ctx, first_box_name, first_box, state) + {actions, state} = handle_boxes(ctx, %{state | unprocessed_boxes: rest_of_boxes}) + {this_box_actions ++ actions, state} + end + + defp do_handle_box(ctx, box_name, box, %{fsm_state: :reading_cmaf_header} = state) do + case box_name do + :ftyp -> + {[], state} + + :free -> + {[], state} + + :moov -> + tracks_info = SamplesInfo.read_moov(box) |> reject_unsupported_tracks_info() + track_to_pad_map = match_tracks_with_pads(ctx, tracks_info) + + state = %{ + state + | track_to_pad_map: track_to_pad_map, + fsm_state: :reading_fragment_header, + tracks_info: tracks_info + } + + state = %{state | all_pads_connected?: all_pads_connected?(ctx, state)} + + stream_format_actions = get_stream_format(state) + + if state.all_pads_connected? do + {stream_format_actions, state} + else + {[pause_auto_demand: :input] ++ get_track_notifications(state), + %{ + state + | buffered_actions: state.buffered_actions ++ stream_format_actions, + track_notifications_sent?: true + }} + end + + _other -> + raise """ + Demuxer entered unexpected state. + Demuxer's finite state machine's state: #{inspect(state.fsm_state)} + Encountered box type: #{inspect(box_name)} + """ + end + end + + defp do_handle_box(_ctx, box_name, box, %{fsm_state: :reading_fragment_header} = state) do + case box_name do + :sidx -> + last_timescales = + Map.put(state.last_timescales, box.fields.reference_id, box.fields.timescale) + + {[], %{state | last_timescales: last_timescales}} + + :styp -> + {[], state} + + :moof -> + samples_info = SamplesInfo.get_samples_info(box) + + {[], + %{ + state + | samples_info: samples_info, + fsm_state: :reading_fragment_data, + how_many_segment_bytes_read: box.size + box.header_size + }} + + _other -> + raise """ + Demuxer entered unexpected state. + Demuxer's finite state machine's state: #{inspect(state.fsm_state)} + Encountered box type: #{inspect(box_name)} + """ + end + end + + defp do_handle_box(_ctx, box_name, box, %{fsm_state: :reading_fragment_data} = state) do + case box_name do + :mdat -> + state = Map.update!(state, :how_many_segment_bytes_read, &(&1 + box.header_size)) + {actions, state} = read_mdat(box, state) + + new_fsm_state = + if state.samples_info == [], do: :reading_fragment_header, else: :reading_fragment_data + + {actions, %{state | fsm_state: new_fsm_state}} + + _other -> + raise """ + Demuxer entered unexpected state. + Demuxer's finite state machine's state: #{inspect(state.fsm_state)} + Encountered box type: #{inspect(box_name)} + """ + end + end + + defp read_mdat(mdat_box, state) do + {this_mdat_samples, rest_of_samples_info} = + Enum.split_while( + state.samples_info, + &(&1.offset - state.how_many_segment_bytes_read < byte_size(mdat_box.content)) + ) + + actions = + Enum.map(this_mdat_samples, fn sample -> + payload = + mdat_box.content + |> :erlang.binary_part(sample.offset - state.how_many_segment_bytes_read, sample.size) + + dts = + Ratio.new(sample.ts, state.last_timescales[sample.track_id]) |> Membrane.Time.seconds() + + pts = + Ratio.new(sample.ts + sample.composition_offset, state.last_timescales[sample.track_id]) + |> Membrane.Time.seconds() + + {:buffer, + {Pad.ref(:output, state.track_to_pad_map[sample.track_id]), + %Membrane.Buffer{payload: payload, pts: pts, dts: dts}}} + end) + + state = %{state | samples_info: rest_of_samples_info} + + if state.all_pads_connected? do + {actions, state} + else + {[], %{state | buffered_actions: state.buffered_actions ++ actions}} + end + end + + defp match_tracks_with_pads(ctx, tracks_info) do + output_pads_data = + ctx.pads + |> Map.values() + |> Enum.filter(&(&1.direction == :output)) + + if length(output_pads_data) not in [0, map_size(tracks_info)] do + raise_pads_not_matching_codecs_error!(ctx, tracks_info) + end + + track_to_pad_map = + case output_pads_data do + [] -> + tracks_info + |> Map.new(fn {track_id, _table} -> {track_id, track_id} end) + + [pad_data] -> + {track_id, track_format} = Enum.at(tracks_info, 0) + + if pad_data.options.kind not in [ + nil, + track_format_to_kind(track_format) + ] do + raise_pads_not_matching_codecs_error!(ctx, tracks_info) + end + + %{track_id => pad_data_to_pad_id(pad_data)} + + _many -> + kind_to_pads_data = output_pads_data |> Enum.group_by(& &1.options.kind) + + kind_to_tracks = + tracks_info + |> Enum.group_by( + fn {_track_id, track_format} -> track_format_to_kind(track_format) end, + fn {track_id, _track_format} -> track_id end + ) + + raise? = + Enum.any?(kind_to_pads_data, fn {kind, pads} -> + length(pads) != length(kind_to_tracks[kind]) + end) + + if raise?, do: raise_pads_not_matching_codecs_error!(ctx, tracks_info) + + kind_to_tracks + |> Enum.flat_map(fn {kind, tracks} -> + pad_refs = kind_to_pads_data[kind] |> Enum.map(&pad_data_to_pad_id/1) + Enum.zip(tracks, pad_refs) + end) + |> Map.new() + end + + track_to_pad_map + end + + defp pad_data_to_pad_id(%{ref: Pad.ref(_name, id)}), do: id + + @spec raise_pads_not_matching_codecs_error!(map(), map()) :: no_return() + defp raise_pads_not_matching_codecs_error!(ctx, tracks_info) do + pads_kinds = + ctx.pads + |> Enum.flat_map(fn + {:input, _pad_data} -> [] + {_pad_ref, %{options: %{kind: kind}}} -> [kind] + end) + + tracks_codecs = + tracks_info + |> Enum.map(fn {_track, track_format} -> track_format.__struct__ end) + + raise """ + Pads kinds don't match with tracks codecs. Pads kinds are #{inspect(pads_kinds)}. \ + Tracks codecs are #{inspect(tracks_codecs)} + """ + end + + defp track_format_to_kind(%Membrane.H264{}), do: :video + defp track_format_to_kind(%Membrane.H265{}), do: :video + defp track_format_to_kind(%Membrane.AAC{}), do: :audio + defp track_format_to_kind(%Membrane.Opus{}), do: :audio + + defp get_track_notifications(state) do + new_tracks = + state.tracks_info + |> Enum.map(fn {track_id, track_format} -> + pad_id = state.track_to_pad_map[track_id] + {pad_id, track_format} + end) + + [{:notify_parent, {:new_tracks, new_tracks}}] + end + + defp get_stream_format(state) do + state.tracks_info + |> Enum.map(fn {track_id, track_format} -> + pad_id = state.track_to_pad_map[track_id] + {:stream_format, {Pad.ref(:output, pad_id), track_format}} + end) + end + + @impl true + def handle_pad_added(:input, _ctx, state) do + {[], state} + end + + def handle_pad_added(_pad, _ctx, %{all_pads_connected?: true}) do + raise "All tracks have corresponding pad already connected" + end + + def handle_pad_added(Pad.ref(:output, _track_id) = pad_ref, ctx, state) do + state = + case ctx.playback do + :stopped -> + state + + :playing when state.track_notifications_sent? -> + state + + :playing -> + raise """ + Pads can be linked either before #{inspect(__MODULE__)} enters :playing playback or after it \ + sends {:new_tracks, ...} notification + """ + end + + :ok = validate_pad_kind!(pad_ref, ctx.pad_options.kind, ctx, state) + all_pads_connected? = all_pads_connected?(ctx, state) + + {actions, state} = + if all_pads_connected? do + {actions, state} = flush_samples(state) + {actions ++ [resume_auto_demand: :input], state} + else + {[], state} + end + + state = %{state | all_pads_connected?: all_pads_connected?} + {actions, state} + end + + defp validate_pad_kind!(pad_ref, pad_kind, ctx, state) do + allowed_kinds = [nil, :audio, :video] + + if pad_kind not in allowed_kinds do + raise """ + Pad #{inspect(pad_ref)} has :kind option set to #{inspect(pad_kind)}, while it has te be one of \ + #{[:audio, :video] |> inspect()} or be unspecified. + """ + end + + if not state.track_notifications_sent? and + Enum.count(ctx.pads, &match?({Pad.ref(:output, _id), %{options: %{kind: nil}}}, &1)) > 1 do + raise """ + If pads are linked before :new_tracks notifications and there are more then one of them, pad option \ + :kind has to be specyfied. + """ + end + + if state.track_notifications_sent? do + Pad.ref(:output, pad_id) = pad_ref + + related_track = + state.track_to_pad_map + |> Map.keys() + |> Enum.find(&(state.track_to_pad_map[&1] == pad_id)) + + if related_track == nil do + raise """ + Pad #{inspect(pad_ref)} doesn't have a related track. If you link pads after #{inspect(__MODULE__)} \ + sent the track notification, you have to restrict yourself to the pad occuring in this notification. \ + Tracks, that occured in this notification are: #{Map.keys(state.track_to_pad_map) |> inspect()} + """ + end + + track_kind = + state.tracks_info[related_track] + |> track_format_to_kind() + + if pad_kind != nil and pad_kind != track_kind do + raise """ + Pad option :kind must match with the kind of the related track or be equal nil, but pad #{inspect(pad_ref)} \ + kind is #{inspect(pad_kind)}, while the related track kind is #{inspect(track_kind)} + """ + end + end + + :ok + end + + @impl true + def handle_end_of_stream(:input, _ctx, %{all_pads_connected?: false} = state) do + {[], %{state | buffered_actions: state.buffered_actions ++ get_end_of_stream_actions(state)}} + end + + def handle_end_of_stream(:input, _ctx, %{all_pads_connected?: true} = state) do + {get_end_of_stream_actions(state), state} + end + + defp all_pads_connected?(_ctx, %{tracks_info: nil}), do: false + + defp all_pads_connected?(ctx, state) do + count_of_supported_tracks = + state.tracks_info + |> Enum.count() + + pads = + ctx.pads + |> Enum.flat_map(fn + {Pad.ref(:output, pad_id), _data} -> [pad_id] + _pad -> [] + end) + + count_of_supported_tracks == length(pads) + end + + defp flush_samples(state) do + {state.buffered_actions, %{state | buffered_actions: []}} + end + + defp get_end_of_stream_actions(state) do + Enum.map(state.tracks_info, fn {track_id, _track_format} -> + {:end_of_stream, Pad.ref(:output, state.track_to_pad_map[track_id])} + end) + end + + defp reject_unsupported_tracks_info(tracks_info) do + Map.reject(tracks_info, fn {_track_id, track_format} -> track_format == nil end) + end +end diff --git a/lib/membrane_mp4/demuxer/cmaf/samples_info.ex b/lib/membrane_mp4/demuxer/cmaf/samples_info.ex new file mode 100644 index 00000000..d372ab1f --- /dev/null +++ b/lib/membrane_mp4/demuxer/cmaf/samples_info.ex @@ -0,0 +1,93 @@ +defmodule Membrane.MP4.Demuxer.CMAF.SamplesInfo do + @moduledoc false + + alias Membrane.MP4.MovieBox.SampleTableBox + + @type sample_description :: %{ + duration: non_neg_integer(), + ts: non_neg_integer(), + size: non_neg_integer(), + composition_offset: non_neg_integer(), + offset: non_neg_integer(), + track_id: non_neg_integer() + } + + @spec read_moov(moov_box :: map()) :: %{non_neg_integer() => struct()} + def read_moov(%{children: boxes}) do + tracks = + boxes + |> Enum.filter(fn {type, _content} -> type == :trak end) + |> Enum.into(%{}, fn {:trak, %{children: boxes}} -> + {boxes[:tkhd].fields.track_id, boxes} + end) + + Map.new(tracks, fn {track_id, boxes} -> + sample_table = + SampleTableBox.unpack( + boxes[:mdia].children[:minf].children[:stbl], + boxes[:mdia].children[:mdhd].fields.timescale + ) + + {track_id, sample_table.sample_description} + end) + end + + @spec get_samples_info(moof_box :: map()) :: [sample_description()] + def get_samples_info(%{children: boxes}) do + boxes + |> Enum.filter(fn {type, _content} -> type == :traf end) + |> Enum.map(fn {:traf, box} -> box end) + |> Enum.flat_map(&handle_traf/1) + |> Enum.sort_by(& &1.offset) + end + + defp handle_traf(traf_box) do + track_description = %{ + track_id: traf_box.children[:tfhd].fields.track_id, + base_data_offset: traf_box.children[:tfhd].fields[:base_data_offset] || 0, + default_sample_duration: traf_box.children[:tfhd].fields[:default_sample_duration] || 0, + default_sample_size: traf_box.children[:tfhd].fields[:default_sample_size], + base_media_decode_time: traf_box.children[:tfdt].fields.base_media_decode_time || 0 + } + + {samples, _ts_acc} = + Enum.filter(traf_box.children, fn {box_name, _box} -> box_name == :trun end) + |> Enum.flat_map_reduce(track_description.base_media_decode_time, fn {:trun, trun_box}, + ts_acc -> + {samples, {_size_acc, new_ts_acc}} = + handle_trun( + trun_box, + ts_acc, + track_description + ) + + {samples, new_ts_acc} + end) + + samples + end + + defp handle_trun( + trun_box, + ts_acc, + track_description + ) do + Enum.map_reduce( + trun_box.fields.samples, + {track_description.base_data_offset + trun_box.fields.data_offset, ts_acc}, + fn sample, {size_acc, ts_acc} -> + size = sample[:sample_size] || track_description.default_sample_size + duration = sample[:sample_duration] || track_description.default_sample_duration + + {%{ + duration: duration, + ts: ts_acc, + size: size, + composition_offset: sample[:composition_offset] || 0, + offset: size_acc, + track_id: track_description.track_id + }, {size_acc + size, ts_acc + duration}} + end + ) + end +end diff --git a/lib/membrane_mp4/segment_index_box.ex b/lib/membrane_mp4/segment_index_box.ex index 75e29d2c..df53974a 100644 --- a/lib/membrane_mp4/segment_index_box.ex +++ b/lib/membrane_mp4/segment_index_box.ex @@ -22,18 +22,22 @@ defmodule Membrane.MP4.SegmentIndexBox do sidx: %{ children: [], fields: %{ + reference_id: config.id, + timescale: config.timescale, earliest_presentation_time: config.base_timestamp, first_offset: 0, flags: 0, reference_count: 1, - reference_id: config.id, - reference_type: <<0::size(1)>>, - referenced_size: config.referenced_size, - sap_delta_time: 0, - sap_type: 0, - starts_with_sap: <<1::size(1)>>, - subsegment_duration: config.duration, - timescale: config.timescale, + reference_list: [ + %{ + reference_type: <<0::size(1)>>, + referenced_size: config.referenced_size, + subsegment_duration: config.duration, + starts_with_sap: <<1::size(1)>>, + sap_type: 0, + sap_delta_time: 0 + } + ], version: 1 } } diff --git a/test/fixtures/cmaf/ref_audio.aac b/test/fixtures/cmaf/ref_audio.aac new file mode 100644 index 0000000000000000000000000000000000000000..a69cdde8de1331e274c3a8ba3b69aa0dcee560a8 GIT binary patch literal 96303 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 z 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/cmaf/ref_video.h264 b/test/fixtures/cmaf/ref_video.h264 new file mode 100644 index 0000000000000000000000000000000000000000..3dd47e521ae417edeba400ce9740b43bfce82752 GIT binary patch literal 32839 zcmZs?V|ZR&*R~xrw$(IfY&TY8+d5<0c9XPGgNBW5+g4-Sc4K|H?leu`?fL#B>s%O< zYtFHcV=N#bAYdbXAn3wbVVF|0{*Y*xthY`5r54dlM^5J9d0MfG$9fiyq(Bz>td(U*AC2+)B@ki=Lg1 zoem#h2{3oDGvK0gW@M*xrl)7bw=m!`HgLwbbI^T0`h;(7=komM^IvUSeJ*+$y61j^r1OWXgIp=V+Nu>Y?fCYJUFw&sB6o1V|> znmgD6T(tG9EUW?c&%gDayU5-aU}E`f;`v5fz<>7`+5#*L{wq&c+uG&%*hHU;;rSS# z53v5P6}sBGCIGwt3Nf)Y_+Pu63`~rS?RB58Sy>xcY8zQuKVN-0Y5n}DnSsl*Z7v38 zx<7~77ABU@Kk@DK3@i=w9PGK6=>DswE#SW{wKcFaetz6mPy26k|GRFh$E9a$h;O0$ z+^_#N>-h&410xL`zRiD);i98qc|NrM&+z~L1Dv^7*q%?=*&A4MG2xq7KM&ILgm@mq zXIlW9=kfnre?t#>@e6jWg`X%x4^Hzm2{L1ZjKUKBqOFwTJr_oCrL|KvAUlJ9@ z9 z+=?a6Y4LD%Aqd78;asbvt?Et^iF4}9+4#qEUjQ17X7I5sUulN<3K+f?rb;# z%RORdL7yN>7PN9JKNxDsPw=+JtYGM2r448L3Y{OoRoIygu@k^4uAhRaV=0Q@N3`Q= zU)=3)m*9}0&odSabMmR)ROadf;yOi}Q|kNpA%~7#1fDNp)b6ZdIf0Ri_HqteV?^~{ z0$ygQF(phBMMFB96PxlqwK^vkudR1?Tjo@5GV|F!i{&4uM*4 zr28EV@r779TI@+Rl*Xe!C8}qLrqTRu*!w}@-p)=C&*#UF;4kNN)uJ%B64qE0A8L|zkzu+snGY%6Z{7CI8ZCTA z*LQWJN6dpJZ{@;Q!2S5>KwZ2Yjjyfk$}=@Nt>$=A=?K zG_G?)h8olA&0x1`q>XS>)4caazwtAhrSFRvVmVFhOZ^v2cDa)jftZQ3ZFI(lE?{#$ zr=?0mSMy@mi4Ni-Gcb0k{CICSk9e^f=HEbBV?YS^V{dFOUiX)QVUwzqTTEBHfT=b$ zmnXir0D_AvV*MED-FbDrlcAyeFJ7GM*v1C&L5-4%^B^E?#a&-N1wG58gGT~wAbK1C z8;(ELbwwR#{Ze?MKF_dhJs7w2@l)BZNoC|HWsI7;$4G%*D=cD13|xFAD6v{28KR!T za#jaf#z`B>g!gTT;KGQWr`h-^nyadyD;U9sqF^)9V-EVSI~}+>yKWuGP(>gu&lOYa zG^b7~RzuN@Q1={ht3-Ed4JAubksCMSpxN6Bioq($7APU!z@0-U3?YIFDAEGTn7Krg zuL4e8y=Af zx3|Y_W(R9adW)jnTZohM-bYuk(-{co=3&hbOGqE-a?6g7ccB!> z+K{H9N8d_K@}Y=j=dEziW&Rlm_C-i;Idy2V#K&Ef#u5Fi)QWo?EtI7+iN*l!Lx?U` zf?th&T@gmZakc~AQHb<{U~FEL9Y^nA`e8-i_fV8!KGO*AAFaA?;Y3%oNCAy z93CTJhH*o!@TKPSE1fVRgk#d<8Z(W&mFWNp&F?YW`}ZIGP^`o^q!=@yMJShzH9G`T zVt{>Vwh}yNIPZ@h#p!}_bk+_n>nHj#I_*SJ7bN3Xj`}G^p_=ko73g&{-Y+8nUlyo3 zSxcQ>T%iUDCxPc3qGZ>Io=0HU?F3ouxbgC=t;(|EH9E3YQb<2V9--xi}9ql=z=3p z5Bg=MQ5%lH$#~Bx*3TGE85h|=M<#xnTn1&OGfo`S==@2!;h;dP9LUIA!!JhBlC*Ls z%MBXybMnePXaFs+o7d;-Sc9xfUTmx6a3h_j^*A+2$cQ8cjcCFoL4HVyAEI7gWKejU zcqj^w&al^sWn%_iu;0hRZbyBiOBBL(&qKCR`%>wFjl|_!r-FlH4VFdpnriML&cqrA z7_=MTqvaM8c?LdBUC|Vb!1j9)1nU-GWoBe zt00X;oFVCxl^v@)jhC|dISHc3zdQk<<`F*9?#YVa^Vf^WCzYyj@fH+Zn&MWY%k+41 zc{L@0f&#!NL(}Yu9+XVBAVog3KpPebCH4TgFqYR8ThO?16gLrLJk%0d?IpZGg)9`QR?>!}`cW4Jk5|8k#Afec97O?dr>;C0giI0qV*B^CWoAEHeXg8KEt|9Ddq#O zWq%nb!^f1vxI*bdb1gtG&JVUux5c0F&}9)wT_ft?u^1enx;-R7MzfBSHZMlEUyUMA z!7ge*uojz)v_AOkBUr>BlNoCo@a5;VTUT5I8$>#Kfx(clxIMyoLyj$nqEA011f}9d z;wRLxTr^=iNzk1h=D+kpBIKLN=U!-FfrLk@7}3tC3$Z$O{nSo+Z3B2hmpDy* zKD)uA1kqXrm1MC_hTxf+h+azm-J_sC8VX)>;$FF$6t0CV;eMFE^1sR^lD}D2M7W}M z*y*i+`Y4EHRW#evkMD0PiA6q8ILK&vgT)-+7E7qq9miAGtJkfVNl@8SoVdCjxrnc9 zmXIWu+%~jA=|;{oJ>T#BVp#0WFtsLgPha;1;+F8o-$Dix(@c?u3o4+6=nqdYm3Uyo z`(r(AKl!O)&5t1JK?)rbC(=QSohO9ed3e$LWuc&tLLo*-MF~he5GB(>DPnxy41a<( zNSM>N5y~9msLFXM&Frl-Gj4Yt(@M?oA5UXrv$9-?2%;tI=md}YJIk2$9JM@YkG#A# zey|xGUc+Wr;T=oT)?JT&DTRUHPp?xs@!Oj*#dl}(yJ@GUv~Bf4V5}B&>On`JeP;0` zRto_W8y70RbD71j+6mG`pNz0D&OWNC6x zSI>LQ!bZuIGjB|G!t!X|#qkubVibGh%u;@X?`7>gf(JrF#W8((wG)5688zdc+PSWh z#Uh*8GqY$@%TJN4|iHf~!VTcr``r1#Jog;g+Jwt}qH3rQ1t zXRs>>ehmM}Ep94`(BfLCXrbuyQs?8p=4nYCIF=cYsy{0% z{hN73OyBvIKx^s%*an{HW0JkbcZilE@w;d9h?E;Abe?iDYc>Z9odyeQOc!%17>WF9 z7?2rC*6Y1w0#5{=O#>(0f$UjEzTT2bqdQivyi{K9%{nz;>v`cD-X8yPG%q=sYyqon z-S0<6?X8*HjiaJ*Tu(I89zi##kEWmjF(z?s2YQReSGP^oCC^CtwBeL)gov;C+9P&v zMinuuWA22ogvNMdLe)tGufLD(p2zvG&7J3}axD#8$K}yH0R5~}*GE`*s364|iw)qj zw3byngk}2()qCgn&XS=yqphrwV=^mp|>n#Us1~6Il%3W#ULSZengGqCd44s}r|S zez9EjW?2!lYA>j$z3yk!8u5p7EiThSQ_qoWyI;B-C32?Y$JdMt2 zSExK?u|R7ca!r_WN_C9$78NeJ>%-Kvvtl|f&0+72#I(uM!#+x$mCDMY<8afUxNbY9 zBca1SyiSm-zh6<=tK@=31hO ztlR6m&-T}taav*I1BwkI+;Rsb>B=YlC3DKw!wN5=bS4&O^?QIqsrep*)BbczO^pn! zkUoF_PSsHsZe!eWx1Bw>sUZQMd;*f8X7*lO$j-$*#{i_ppch&SacZvkrP6AD%VD|Y z<5*~)#4zCoqOPw@0pZqLjwYL|u-H0r@OE~5N3NVG{AF|C_Bt5K-`?Eg`qHy|sK655 zhQdWSR{2nI=``VWVkf%&wMhkgC7a}2=Wa0$4X;cVSdAiNQ2x^}4M>7+TY_l1Ea765 zdA}N%-tY&cO%A2{E=%%I*W9;`_r7N|=39ZwPniXBW_Jqi?k#~FwIQL~AOvVvAlv3b zJW{2L^TI9OFD*!VE6q&8-A@FV3I~%PbP&u|!9JWK8QSgqLR0g?dGUr@p`Y&2N{z6> zc98&*V8Sb9S!cJf(Jw|&GauZ@Fxo!k&oH(*_Typ-)u!fD)Jj?g{fNHDuMyDAJH*h!1lyATvMP=NP0_9UyNnOTCh4HIBSE2WeI}_QGZtC_84;`mpi0)HozT|;XTDkn@=Q~-+t8Axg z^zmR;$|E>R0&Ng9@9Z1)P3=ree(X^Nhd+nd88r8Mc`1>VWYs?MKKV*Dum1gD!VJ#w zC3C(TRF*UTTquEMDNZjLxa&$F!3<@nm$(yO;?rxj(HkjJHPwqWBA(twtJkC$o>pZ8YLl*-d|G5<6>ZEO_h6z}|j&~*WL zm+|8shhhH97McL`Y8@fhuA&z@SpxFx)MS21=A!c2LJa%9b6BA;63;H#Y0I8Wl0C3a z+Ttk?hjx`R3`r+dXiaw`5JW#DQ>YX)*oD?{MO)Br;9j7{=68Ca)2siLK=4`sJaZD! zR!x|{2BA~;ECkJMWX9sP@M5;5vi%Ik_9}yQWgx1)G*dL<*o4>wTx?RgE0f07Mt$LE zykgO)nfS}JOW=RC_Us^D3wrfc+u$dF`l{YMX|9>8-86n&Kuwv#5JoS)EWDb;6VjC& zw*Kn3v^gPQSsglF7Tpsh7@U&?;AL+eElFAeIh<`u&QM9dX`0FLadf03cId?;w*O*DbBMs$B)R4>AS| zP;`FBT8juEvR%;k<(l7Aq}Jg%PzE;j%x4*-IdX3W+642PSg&D2@UQpc+`7=m&}H0K;J8VOO9CSXY<;k#Bo}fc7bb!$Mi(hG6681_@iV20k{HOoD&j{&oPm}V zmh~CVfa@NctEFllxcLU5(@z9Vs+NxIn7+5}eUF-4#P(9>HyEHbfr>&ZUs6c8EP^9N zu|kc#+4>!~S=<&Q5h7x!Um0WR-~lhGckWzLfF?2DE(nPM=7W zg4&L4UEm-xVvw<7VDpHg)?n`o&)XZ=`nn_s@UUeT3c#}4M?TB_a?Kf(8DFYtr7^h) z((x_*csB=;IZwnjm)1V)bZq)(@A!uf%!Cn9GX{hjcXu;bx;@=h_o5)TEgbbkkk=@( ziC}b-yn0ijAstV8cn5?}tU^%h6W<=Ev{(s_C&qmXZ6QbZ#rfgLp5hE-X6+)Ar2fSFJOKoCd`m7_~O zzEaFTD4_W6*!KLQmNw&~t(OU|q@cyGW?*{9yTW>~M(gBx@*^Z~P-B(jg0Ej_gf|^v z37z1nmo=Ka3}ipoC{Q_nB+atK#6W{w*{yCWJeu;Z@^7lrd>Pg^FnI2gcs zGmkOu4{kG`TAxA!+^n=v^l*iQL+McOKY-EOg!Q;F4ct$u08C@3vwkQK!Q$k{E#xJX zv>eaoKBC4_|7pzs3kLPIwSJR}+-;fhuDSVj*tBi8??>rJNv1TKJ}LRH#(!v3WnMHe zoD#I{weAs`>==_o&}q{TR_hUyIw{af4<6cc$-bw#Kl-rc(||sP4g5Ol32%77!ns<@ zH9a)hg5YqyDwYnP<3rgrPRyBA{ZoFhUXK)DC87!cvsAh`7y!d-g8SaoI;fSNArbzI zI#7&(7M0b60cW=rxp!$`34@}t6;(~UYec@B6A_uT@zEcbD&Y+lXiZSjy-zsHO$%Lq zUz17B58gF;jh8#M5{PhweQf{i5x27k6ackeV#ftTQCLqTk}{r9qrRhl7tFzX!G{2ODAf>0 z1&bl3s&e+(A^FvFenSZs&MBV5wu?{WXG-@CFsn zD{O3Yb#TzJSIW8T_WETz+n82J=|cYy74Uacfm4g@k6Q0BhS06`SQ)eXsNpX~&XPx9 zZA2NYk%tizyf}sdpB)~qPj`Q%enjSXHl55GL0Bc>`|AU|!3A?`Z)x(zF$+$56{t#x ze#$1c{E7y`+z=bEJYtV%h_G1Now77ZONV(U(EpOM0yABs7*)_ z9m1oq{5v0{-Y140z6;l*`IW7QDwY4ep$V_F0h|<9=n*k0vj>YRdC9pnwF{1&)EW%mdCxO^5N{~ zy=JXOu?X2%c0B?=w_t+BYar_{n_x9hC_E+-j7;oXA^P;`{W=~;L0hIEvjbO-4x&0Z zEQpO(b%w$XdV=e=`!e{^mM*N>nA^<_uB>tbJP7|>ZphqM+HNqo2)SK_WwL;W#k?7y zR)K0r^TmiONf&Y4A^*>k{l+N&O^%W{f;Q`}4^AbtVNfw@i!ncwj*v`BQH*rpS)jAs zo>UOF`rsUK)Qw?9ojeNjR6)&YCL4;T#LZoS@mgU*Fggp8Nf-*Ab;>0J8rMgdZ9nnwsZC>v$ES=P`x7ww zOD#g@PT4lD&BJLu)d%y)Ni{*6KfDf4XeW1O_t-qHpuo&F>*S0D8>Ga0NA**Rn?HHN z!qr6iu09fdD;QojoW)0(35BdEdRoUKxN(2qzk=xS^}!NU16RH>4;a32y{jy%KC|wo zaF7dxOhReIB2F4rj7cq(GMs7{G`KWGCnrb!aA>%V00bS1P_!|4#&hcXRUzSKZ5|qf z-%QU8H?u%+I9B|3fM4AHkAB!n;>+gD>YWZA!gm=c-J9Rygd=(YV3Qk$75=iJYSGOJ zuQTK?Lm{x7m}Y4Dn|E-U#FK^nhA<}b>q)8ld=D{Rqml;F8?QcD4?$}jE}j^*AyKrI zHbZnn4W=rproc7`g9%lTT1s>G>f$B-g(d_R&hM@$;9|vihz>#s%K7hv;Fn#t1X_HW z9<;iUMo`Mr7wm}JDbxoJV)JY?2e@0BiwY|m)|JPNxvny^H(d{YnM*1sP_4Xf4sTq8 z@ZX{k!$ax)E~8G5hA)M^v7-pzmJvt>guSr@-^ z_;f3Xm)HnQuF7w%{8DDGys2%qeJ&S`27%SI)aCQQVlP)l z>z*%j{@Jm(1G9UT2o)QJF+|MRAGY6+ir!cCIw~n%@MFiot|Y~_5t~ulMbo|Jt5fzl%-RWxiWB6LAlf+_M^-n?jl>C|tn1 z8CAtvsC&>Xi?$oDb5kNtJglNV@1t&O*azlgjff}TA2GCqIU4dyv%0#8k`ik86VrI3 zm;Xl4$#SsJjqqFsjSpr(m0OFKsg7S(hKRf}Qap|4+xjSjgFu^gD5#AGp+kRM9jGEh zKe0T~ero^Sx0dYE5XVW$A3`SuuOX>7Y+>209^Vp0H!$B@s5#*U*gWoCcrlO6HyJ}w?u?Ij4E@DHDuV0uru-k^gqvB=Up z)8t!%wv_rRw#6s=Or6%QQ`Z@l9Qry#mvi+5e%+-k9ZST+QXjUAS<#)7fk@idDdMS1 zxnpHp4G4ckL4%(wdg(%d)-? zkb>TFOR`!+LD`FKtd|p$4!5)p<7VVdjU{j-$<+z8adWKv166+k1|dDBwPgR4v+pO2h6;&lubm$#OxJUAo}U*BN_79bVqWw)7Zw-L#5=)BKW3Hu-ppp zRzGNvg@UaHE$Zb%ZQ?!1k3-107H%+?AYmCm!taWS zqA=4kcFd!$HIU-l#Mj~1$HqJRD8FiOHMBAK0B&{ZIH~he*EjTFc^YP9?(3%@axc&Q zCbOy~Ck0$K;fIiX6S}0X-jQ*#ojkGLYHBryjOZaj$e{Wt&$iXD2NroPiGW(gNH9Nb zzIsw7aM-!QIm7kgyGwn;=c=Sv5h(EuJy>o9CA}Z^)dUwOpm_`8Sbe&`J*glfT%|;@TzSEmFHu$n(ZAUoFj8g{dlSUzYJm? zx~+o1tr{W$e1`4fmF}3yt&r{6sl|NE*=Z;zXlw(79*%&;{v;9k6&_$a7Q(Pk!GEts z70CM7>N%Uh3^y(djMpGP{dX<{a*%oUgDXPjkFWoS@CFkD~C;GzIo@v0Ed_Za3r&9@?kf@vd#H#Hs>QK z^07_DW59m?sZ}PrlX2e%^2X>U(VfoTJ5G&rxBZ4t-$@F+OGvgM|Y6a6mo?F&V^(^G5;thcKwjBp3lr$Gee)VPnEF=F(o* zj@Fd88mtTPjQd>55a0td`B&;*pYx3Dih&%*kE|M0OJQKuzQ)OLnrU7gzDlug6hUPs z^#rG|#)N31hJA{$GrE=7v3#!|^6! zSuV#{h&qVVckkGr_zmh8&|)V2zaCHchZ_{J%Z6uv5lw~d)z##wbv3|O=6q(t^b+L& zo*tNHgkws;hF#iRz#oneD@0W>bGL#pg~<{xAs(;CeLKpG>vIwk&ctk7O*@H|N-=>Y4iy%SY`oa4b zrryBdIr`XDre{dx9+tPxv5H&(hxc%U4S*e0&V**_Jo7wK0oES0mT8F^iG$=LZnK;k zbL5+Sl=q^u{;HdLUObOQxCe~F)jHv$=&ri;iiEE?@SjL8;CUH{e*u~QjRU&8FICU2 z70Nm?$;UGV82fHNNfsnHm#^RNbmov46S>`k50gxhgB}#e-&Z$PwEQwXUb=7g2wCRq z;V}K&ykgtS8}z0-% z`_)QBr;VCOs?32i6oE-!Iz=E2B5D=bDGE9l}6B=8v&k_no^kdvH2J zde0|OHbEwbWq{P>*P#OMl+K&Oe%gPHnf&$e(Onnkw@`Q%clj#wDx_qwXHl+5S9EvH zCdoreY3&5kxmIbau|;DGlJ6cG^o_A!-o2fWN?!>Fi!8%#jX(gd#NZo>n6^&v5_Fhz_TyQ=zu~q4p=b z@(Ke${{^DENrsA11KhK23B(|1j>rL#y!V#5ez&ikjtCWMAsCFv_hm1i?7v#}elP5zVuLYK7pDyO~$7=6cWzK^ldpf^2>As@#KmNB-ziEa|U!+#1t;{Ai z!zkWGrct(VZuh~YUEx<-&%~-EdBZ|1nMYq&py_Z7$=nuQI4pfwH-xh(;k0?o#k!%X zp+BL8e?0H!$z`3RLQYJY{ktnmL>1I{)_aG<6R#FWF!LwSj4v_Gx1q3BS6`)p^XYU( zKn8u1Ufuving>wxiedsFk41GkU8q*k5F*3%xHMw@20lGH_3m|Le)GerV1Ls2{{C^t z7}~>8@;imYQO1I$Spc%U49OJT5FUrcOjBC8g#m~!y_LV&#Cc2Y4={w@Rp6U1!Q;JDo<^euN5-l@)1R$k2zE{VP4c z`Q%gzGe~$xsNV4!1&!Y-+F%!oywuCsO78d~O4T&peJfVgO1|w6-$Mxk&JMX9IgnTq z{l2`SF8e5RmZtk@1CLl=nxzJJExsd-+uby&GC$}NR?(UegVjmD;_zi-_^U2FOBz3A zPUJz?WSc!DGVYYpD|@+5;P!&0XI#`KWsN_JCyU?!+#)_Xf(Vj^5u^8{m zXPVH7@VSsX3<4=|n)Gl-Ul#aKrW~a9SWuUa?QHb8-!57H5IG)LNVd~| z8=x2*NcsNaQNuy3-P{mHE#ar2j#?LMBR{OQHCC~YGSBYp94eV+E2vXbJ^^i3Zco%* zH920R)HWvUB-lYpnhXidC8F?nMX=N>CH!^g5uS4;26IoT)`%ai4@#tmP^{%XuVkG1 zZLD8fWg)N4W)#TzrWx{Ov$;YZz+B9UAv_B41@YRg^iysLe_Qh2o#G1EB%L5?Hp4sd z^MCl0c<`_G0K32%CxXmb9npc%CLd)Y3Klk@%1krl156^#tyQuzwRZks$h;_ld5@#O z(uGc?;CjOcl65ywpcUZG6Lfe5`9R(VmMkBK z_LiXigUX}=d2;*9ePPLmCZVWbS?^;Jclxg1z zKH0B@Bg43pU!>UcbgMyIt6bvM>lIVsaoY&MRzA}HJKE(gZa!{uM;q`P&h{n7boqbf znl~<>f;|Jtg(-g*kTTEvX^?Z7!4F04X{e>|LdCkBUG3`e)A@&qh{?U7?gV2?GuPXKGbV> zWVJ4V8P!R{6-Z|>i2vapxTO4o>$x&LwR>TCvaA@glEUo|n%B(#; zS*Raf!W*XHECp=zo3ne^>sl`gwdy4~4qP_h&_X(;}!8p<-JvK2nsNEi@ppM~K0dSR%Z?GNj2R2l@>k2WK?&xlVPV7J2CI z^5Ed)Qqcr$ns;RnVr7k1@8r;W*;P>MrULS)-M6=X=cm>2Pb8Bv!t}+sNUBi1F{Ds{ zD9V_IK{H4*dS2`QUY37!iD$){m(kBW^;^Qe-FaffFD(9puo`*k&5+ZW-wW*NrG4a< z&0R5LWSh40XrNkWV6*Fb%oDd4u!Uas$k1Hhse^5{`h>{HV%Hhk>O{^1yn_-*4`1b+ zH@cuTzFUiV2e%Uk$HaLgkNpWB!Tfh#&?2E0Ew0bmA^GPectV5u232yC zjYwO3G4mtwLM^wusYdA!(i5}qzcw9EGt}Sx6<7WRjH`_zwg~j2Fbj zQ@0%I8WCqSo3SlE!Z+c(@wA0JbKa2Dp-(*Qao;Fm2e}tVHiNaUMsWOmum{}g8!^7_ zKTiJ1A^VpvBxJvtidAgjJoL8Xa0@I5YukQpZr^f`A7`~~^RE}xCDkV74378z>4DF4 z-C?_nwaeQjqe=^8!IamO&!VwhTaR+CrZ!N7hUjB`RetD_Eb!xyjuP*D(jn+^>Luv> zZ=#cz1S_u`L9A>l!uX(?B#;R=H(F)ZmoO=h8D7j$MqU|4|4yxN1QCsR{jP#~%Imvl zZ5wPDXfkn6h03t(>@x;iyaKTVi(`MMqu?yx>FL~vA@xZV?Q3}KANqj31A{vt5O2d1 z-^*C{V&B_Ux@__0piyPoA(-cCVBp^I3*alx@lC%wgjb#wpaIG_GTpX9TyiJJ-OyV+ zU|+5WUiwr0H-SM2bvxWDT-)djumX;5O52Jz_=G?N^v>uifiBV5%oznoB3+4hmjZ!G zOMiG~n5CmWd@o}9@P-cIwpUTZLhjo{PRT@6hj<>2+2=>&c8tv-M<>?9yCCcZ;s=lw z&zxS%nXUd-xfnVaDLR=RzQeG<0fh>%5S#CI12i;GD0mBS+#->P{#KiXw8F)1T{1$K zDEyC9qHAVZve}nGK_WpJl)^}2pzo@Y6%_$5+r}HyJnyf&yR#lbsZPS~Ux&Tr&qhL5 zRFkz(4895(SWJR9AZBOzLFLTLXIl1L5ra!eY7?p{-(l6iKe;&#mb=ybBljf!$f$F`lZXA7$oBoqeMN2YH<69aUaoO@6PWY~0DmaHZwyUaK zIMHlTmEaCE*J*Bp>o#Z5|LiO6rAnq)`|nz;He&yR69>)N5>;8%CrHSiVJ_@l@96I9 z!(A|bvhP#X$wjO$o$^K{RIp=EmH7at2H|2e09>VHqB-#mCC^|N|EA%VRaWT-zu?Oc zy|c@g~mw_pNx zXrFSB2qv2Aks%5q>s+6zD^R4E<&4Qo1KtDz=GG+1dJ(Hi8oGX$t0flIN&nwvEXyCl z+_y77$|$|hzpl`;o_ooJ(Q{OMHLHM4m zp|IK^6b*pDugk-oG@{#2$z?N*;QccqiB5eej1&HZd9h{vWj2KuuR)(TRC$(;F*X|| zQ2NA$A*yKDi-S)(`sRw(tS%sf;;%#_98gSHfGR^AiwIK>(xQx$pc#*Vs2qCvluND| zV<8g4yxJ}K2>i#p_c0AY7dKS$Ap({WrIZyP&#DXl54=!xOHvZr!Cyc_(rL9&rV|jh zY0fA`C8%Un&pALV)CI||HTKnJvrukU}_nubm^&^M3 zj3_hiMwqXmzaBD1R3{=B&lW94$#Q$AYCze;kl-fp!mZ3KkSZ@ku80RIcGz$=3VK6R zw|K-;l9D$uAor?!rMyW#JJ=B*cbmXe(8fe%BF&>Q-C=LAyb9lMoI>j*ln?I&y40|1 z6@XKG)AoK-p&xG?trV(RW8Wula(^4SX?@Co^>E^2;rp@H5ylMK$<@GK_#!rG$3G+a z&nFMhFPGoEyN+cjLvepv-_@^nhkG$l+o9jMCg1~Y+vVb22`$yEI#{)KIGNecg9~kIPFAz-?6Px{e=?B%0TI}15aQ=#i|rml zXA$Iw!KWo!Z2{j8liUUAkve8~U2$6SW|I^~ZG{n&3Q$Ux!iUiJA)Ibg+@dbU-^<`u zulAbQ|GK)V!H76x2@v)50(bkrsxOQ$S=hg-$nPk^$Mr>B{H zjh}C`bgiugxGhXfW#59 zgelfet-*#Za!Y{>4%Wh?^<}ks;|f}mF)@|-#7$ys?3EU-!Kax|I}yS)XTb%nXewqL zT-OMB#efZ+ebKq%Mfrbbylln%(f+t)EvJbBtQeC0>vtW zkL`rgh&>SqFp3%jALA+E3Qr||N!0Fx*45rof`wY;JvJ3^IsQpL{09$cO(4Ss{Jq$d z>#w&IF_PMS6*=Bft5%}-P}_0TpSJ7J4>eA33L`tE$}*1SR485F90R3bdnvOHZ6}hG z4B8Do5(+HSUypdWVL3XrHhk`WMV^1snVz*swEZ<+v*U^Mz6H-2$4iDY&ok9upE!iv zM=7y=G}Z>?Sb075jnB)x2%uIfm7A|sSiTg12zYfI;n{n<>XC1>@VwYTXW~wB4WbWh zFCGrt@GL^xn9VDKTztM-_Yx+v4msZ5K`Tjtj{isp)oWBo%XmuD99mSrHgNW^S7$x} z$~?3J6EYZY?K#pziKtEIv)$7!CL5m**L09Uu`qR`t~Ve1DqX*c4=hi=>^t|_B^BmE zqY&0tg@(uRDJ$HJvCyGTSH5#-khPk(e@goXp%*fKsS_42FMiqI?uan9rpsc6mgf;U zjCGom0Q;&L{i8fQPn1~cY=9(tbu-5=bniZN5*m$IR+6nqZnyyDKx2WHu}|sDKd5?+ghP&18-vyOYzhn`pMg zctXaWse0WQboFdCJe(|4crp=T?4S9InA{yaJz*8#X}5B8BWyk4a)Bu&RG>|~Z~pt8 z++PtwFzjflho`5N25^HW_-P?|(a>nyYh^L;!}^b!PD3w#x?YTICv7s}Q~3FFiHF`q zWnBp+mXQh%Phs_`dizqBaYy20HV~5jN!KCTXbkZ zi7jS?louSz8>$+Cl3c+hYFV4|Qk;+&jQlOFViG~Q@<0>lRKCNC*0#=Z>b@p+|HY4I zaoTn%@um{EVw*Vymu6s(REMT)9#sk-X%fE>jTVhEu@Xh-sO&E8L=&IrS6t}Rr=X_q z>uaJ(ri>7g5nBG+r!eu8+V~oMt&tNDP4+EnE)U zgy7bVi)YEpb~CRho!HQCMiaO07V2wIeWij3S{JJ=okVlw5%~HE$6qjbP7$YgbRPqt zc8niCg*U}k@K$AmAzYVG1~~AG({4ivAjG{B89+uNMqH}?0{t$a=rF|_wqw3+2Wvm% zM>}XDlyan_%Wux4hz<*-mo@k=B0Mi+03w`6g9|ZE^F1f1B2q(xSYFq(H@V_D$Je3e z5TJ;A==9@pO**hMoJ+kJ@*71o?{Z{u7?yKjfsRa#dkQ%3FId}_9cLcT{OuX*2-ZV5 zx3(eCxf1V}ioS6G%hULvBDtguw`?{!#tgn(R9*r{Gc|pF(Oj>imVQ?S*L^a?1e>hjuJxwd$gZ5D$Do9at z)5P?6pzeYJeFOBWJ)y(g-3l_DLMRD$x0+NeybuTmIS9hvKIZS-P|z890UJFTxa6;? z!EYWv%k3xkJK{y;cD6*;&bf%6B7XWP>keabj21?vU*IccxqfdpIeQATpF?%BwNk^v zw&KbIt=9`WC_gcIIG(i;74+Xc@(##-wY#hRWH_*IkPAbBkx~SUXjW>p+t_yKS6%R@ zcm8qw&G4+(8f|vS;fy-5DF!T=F&N=cTE^vKyhLh|iW&((SZR@pYqW0$(IU#oBU&Dh`#O)CL!*9o_z1WdImKK9qtsypbuA ze`)kT-#R>JhHyS{$*1`o7E2}~q29|lhj1Gocupru9cox@H$(Q(I64upsLqyK@G*C` zkW}HX-jS32JQIYnqeR*7JsSZ+_Zt6U?72~mt)qhb8ZvtG=bvFJeE}O>Vw#`uJ#_Vy z4DcczRSWSim3@$e^vD<_!twRN{+j+6+JRw=?s%r0x|9XtU@`;_M~%i3F1GpBm75V&g$=Jg{TuWn$%n{Ur@Vm{7n zTfetewi;03m}IAv#U4iH2qp5Qk}E$QrZKxE=l+ES`?R2*T#uvfE6EB7g{sa>EXc{y ze#UtE?d#`7|9JKPrL8ni9)N)^>uj!xG`M8P0M=RGV>)Rh@~XIg?YGoFXeAwX1lkGo zc9;K_4jCv>6md#ISK3V@jF#`h>BvkIfGNv--8LoScYSSmwXOLcoL$QBZ${o*!q9Ux z+?Zl{A<>3}zjq!SSa%VyIM64XDKrxL8~O*#iRpO1A2?=|my|vyo(J2<-26{9K8VW& zw?#a(L1~T|;qkwds!GECuQ&gkS&}#9)yi{HLRw>6ZZiu4qmWu*tN|nEbK;X|Bhn=V zJ!C$U>ZKI$p_xYxa42YljUpQ*@e6tMUYq9Eb>^LafJv3ZL2ufQC+Q4~K^dCpwfxfesbgQZH1{`&}TUoy8WWm9>%7sK^q96pWQTM6e=DaIlm*Qmd2GTn8wm)?VVXmU4`Wf_;X6O1h z8oU$mg>*01FBYHvwMn4;C9d>SpxQh$6u1}g9!bxMll`du8OH0T@#eU*oS1}vDMM*d zQW|L-UB(QvSTg?s2gdX9e84#^zdLP+RtB~LSXSyAX{K^$C|z>C#N_ARc*lOYG;W97 zZMuQt5{o}EhQv2-{W%xGRD}R|csG^$tFz~m*^^{so?V5bwX{o(KSoTGP-SbOuhrCL zRwo4b|5w&kum$lwT|l~}yStI@?v{}5PDv?gke2T5kdjX6?(XjHl6dil2><8(0<*Js z_uf5o&Y4-J6hz^7FrGSd3PC-rkmd|%Elb@~6%oVkNDu(I~F={Ry)cr2u0ryFM|O86sZ}pcMhdgYQ8> z+4HC9)f+@b?E*F>LF|>sB}x}M&#HNeER(|@Gc+B;z2*G=%CV_FGe@5weI~O6fC3`! zkk*)>t`6iKCyBsJxJ>SFJZ_fpqNTiF;n-4nKr`?b>c6e`#u7wrY^6RH=1=SO8L1-H z4q;qD8$#xUQPm>WD`lr>K`W#G<_Lb96&ja!p9yMWD%R7nHW1cR9hd*nK%6H8o_;*| zbT1^U?2F0yf2seE9Y_eAzM?Et`_R2-No;43xQT-`Uv<5ullmdQ)o->XGy#&^$rD&( zl*WZ*H$^(ww#q|KdOryL&P&h{^B@g1L*4{K93#}c%EA|`4sT;fao@J`!WmHGZQt;r&R-g%Nm z_;XuROY@ytLmR_pJ8$8(D*PoPRUoD)4sB;Q$BS*}A29!G?x-E{X^^p;QjL)MWA2a} zm;RzkWD+6o&4Om?C3dR1-hVhSMf8A0;iTcL|G@N3R5UKO6h#%^nkCE0@i0vl;)1)y zTfldv{zOOFC-az z_U|YBO|QX|4gxT-gy;GwUz#(2n}edkqpG*8GHV5g@o#Ge$&FbWi^J4A zGQ`L(I1DS_?ZvdRVVxluXcuQCDXk#UCn1> zz>2U;{rjM4d^a{aA`{jX)$fRMTgO5eM#usoC#A3>4}kwz>VMezX#q4CbI$yclH5th zXSA`~--ByP;sRMCb`r8%Kwz>1>TVDtNW9D11u!1&0WjShugvGci~O2>3fT=r=jNHu7X#X$+&#G9t*{4e^)bW-~P2( zkeS1_h7Je*vWTv{`z56x$uy+9qXpA4`VUhVVLSR&pcr4cvt4U(rUYM0v`1~hb z)1w5z#&g7PlO9gpJCgk0%4~Lumf#TUgit&9oBbqlMm7LY6gK7F?Z#0ga#5i1++MlD zCg@~dtNYuTm8KDQ6QHb<;v#&hL|d!idM=vZ*n9rGc|(DC%rxNu!aMBY@Pt^6rwnv@ z^MbTykc&U1wt_xz0yN0cXb7R?CR@3vSquWtG}x3;&j~ts($~{b6sUCs@cwj3|LnEy z>iZ&>zd_GWqi@KJ8BZo1G-sk5dzVJ6M8Cx-vPvgNFD8sc#QWR?%Ief3^MQ*cN-+ME zDVN98iv)n~eegXjnOBb{yqco-RRQ>6%wrS0j}>_f|!x7M6E z4`slY?gyM%)p})p`%eBi<@;Pm46I#=+p<2FlZgQg1y{zcPJ95juU6nUo!i0W?e8F4 z(?@J4{e4q>7T#ru?ym_h5NZu7mI8xmfqO#mzZd>OjL zu&R%{tg9Gm_)0VRL@U6+R>lS!-5z7x?BybFn0Dje!%*)CRg|GZ$ENgkp(2*GJHjpv z;>mnVOC_z2cvPzUovg!AhQ z;`$#LUM-r)Ddninn;YqS$jEN7xIpEvQQe2nId)TUoI_bzi8%JVnGR;iq#J}GW)L=y zmN27O7glk&dvawGbY4IDrM35sa|in50ALJkFXL(tAULr4%i>mSp zH2qQeOX8db>ZYE-Lev~MOqRUs5suM&a><*Fg7oE)2)+(X?JpjN1G{qDhO7#ia=u5ncZGtiH_#ShW%!j*~6M9{-YEf z{S}F(=I&``n{2<8K4&ZM(%lRD`i4?}0=JH1;TNd-=XdiuAr}4tV2`dJxi)|fHvD`! z4@eBo~lYj9dza1|`ZEO$tx#41F+bW4zi}L;W4?l|tlx@XdWGL^#0waLbwHPa0Dc~@x zZtwC-m%qudj%aiIwI;s7;VvoS7%B!#d7fn#j z44+PznucJGfY7M>Z9Stn!j4O4M326&e#IBMy6^RhSNFi~L7cL9u?7F*&7VBS(s#QP zK1<6B=`z5q9Uxp4GSLo8jSpDhvK?RrY#$C4Lq6voWQ0F}Ntl0Vuv1q`512i}AqR2$ z69izMmj(=t`W@RgO%-?C zFgg8RY+lO6xtN4<+VH(aD&&GuF+B7BfHTms6SKyPub#=dfPM~Au7c4up)sHvyO{2h_j%J}|sXHgIN7lJ%X7y06q6U}%~a%+yv( z*M^RnQLgJ3+6R;2l|vPxTa_-tR&J}&wG8D=|I85TqK!ql6zi)Eid*&+G)laXGa`L=uXWhY`(%4abB-!Ul!PFIkj>irkP5 zprfuenV-CBMT5u-mwsLH1&UP!gMX?=SxR$OD73}WveJrz2Y~tY!j`>h2Y4#732~2Q z<)u`)JAtm{#~+RnG>Q2JMJ7>K`>wd<2k<)y1vL0<)+)fh=@xze28#pOk=DzsZyP29 zaF5a7(a+Am;lrhD{b^w^^xyaYm6Ol&biMT`7$U7ccsTx8AG#dTf4{|{u4iP@+l!g{ zpv^Rzi3fp3bNGRks%?o0nCbiaj=*Ww3Jl=b$B&{d+&_FGq&Egsz`rtn)u9u+wzl|3 zqP+q2PeVT7CliRN<~pnj+C3&Fra&tpNDm~8oAiYI#W5Fdm^D?WMUDmKy$_YyVFHr| z!TY}zUzQfyE7~x$I9o+ws)VdzjW^WYZ-pBohR95 zEB9>Ikwsx~Plo$i(agPT0U*j6DGk4fJ0epj2}rgmmx!ByQ9lFrF-&&<5{o*u3oq-# z(LF!dTy+?w^VKdZ$gy4566|ls#~YfQN)eeEbRA!q70^E-D+N;1Z#z!$faLC-s%S$l z(%_nGlAHA8Vz*NrNpx(rFn7in7iE@slOLP~G=BbOXC(Kr`y~jq|4~dBf5XE@#380R znAVb2)x`6Nuf+eU06@Ie@w8A?Z%Q%8V3v=L)=APYeTaW>E1QUkkNg}rPMjnc5X_&; zG?<^c4`>o$jXqG2c>F}@OJZ=#ifc`(dRv{`^|6 zN6U+Z??Nv7iqXn5=#>t+Vc7>bX}Lop<-phb}u3dX*2;!;d@awpkKn8%cCYck&v_c zkecJ&UR54bRmhOtp9X)N0O3)B+-z`TU~|7PSg&;etveT14lWg3tiGbO&|cl@VIU4; z=xC%=vylXQD@p`f9|F(jx{O+R6!cy#ccZS7m;uLty*EU952PjYgO>H+IbHBsk<#5VK89i z>)cY9LaXPjSh{-dtTJ$-9&VYvM>(It1f_-m6VG9;G#9Zu4uH*ZP~~ zsDtaNfP6lJX&{=>dLixKFzC<=mZ~V5PCGmFr)?ZGF`jBr=OT)x{_|K&L2@z|+Do04 zoRbwk)AU(Ppp+3?qWt6BXD8p?Pi2>pQ4`e5U=V}RgFhK8rg+TFy~uQL4K!#Ot_+c7 z2DDgKfMlIII(sF6NykpSQF9>S5=(VoZ&I2~e?i1X)v1cd@Ko*IUR)d<#uPZp8oWd6 znQdSU4&KCLh;C^`6sII=iDG(bhk4`qf7(i(ni=&OZLu;YdmXmv$qx=c+ctunlQ_dy z*xY0qbU_(IaVVmG@*xa}9pvwSOeW3pzc_QPcGzQRC=7_S~WK+d@=AEK`&&+o3g+JBK84n=~S-5!HXlO zNP^LW>hcVnx6AG^<`c~EZno;=q{^u9;g6xF_sS+4IIO}5NG6&U9iz8XkO~}K=jl`B zXh|(jWym%AtaYxtS}2w<{gdu5mw7D_{&byN!7pfI37stXstWOEt5Bc^$*sdeJF1g- z>w^zGEIRv7tT%tV!-kpvyW8-gnEl&!{8}GSQ5*ln%M1D4(vrN_25suiw^`EZ zxzD8$W?F<)Yqdq=w~ms_${(yB&^iwF#nRNUY_py(sAhPtiw*&zsu{S_AD=$#aDV56 zRRRGPcx}_=1yS51@s90x9~0rP4)gi^F1&$I^5>JNIe`i-^)GW@UTcV_UiA~>VsVc> zWQ>ZMAdQ@^#ef_};!R%Y8Y?e(P`|10d>XdzqF43UJwn*?SXy*D3(gt!W)}Ff{v_8dDM8Cdxh9M+i>sAvf zc>0GQs2EDj=|1``gcX(@U?3%P{XE`$oX_)2Hi(xr69?K%gYtJ4pK zAJ^rEEZm~8zkEsGQu|Nuf#z?NdPZTbv@~oO;GJpIcQpk=HaC9cMy775F0j-K_K;a! zdd5V?U1(se6gw@KDinD^n%!jhm!Ropg5G!+-#QzG2@zNF9|mjVpXsPqx}T}JcR-bg zq~P>3$A_A7*R7}azl0%P3ES`iaQ9D&5H0M}Ew;GmTIcR(@5^}sr6NR^h-M!Km5T`E z=V#hfI`S*Qob5iagOM{f$gM?Caw>wWFgElKn7mX6uk1gq3Gk6Q-lyRhNRb8?{ZNv2 ztp(37x>Ne6>?%k(tF9%px^Zr2sbArxO9U>Ki_=FqzTP~{-vF(;9>U}$$(xJV&=Lf; zogwYYUAMlEa1o+O`}l9MUgdzN=`N?1OtwsA5)$F6X`SgOb3DF0Z1tqegkP5Pi`>j8 z0-*D!6>R2eax=*pL4upW@|+cd_$E#&_R`KF(M(0h)Haio)9H_vj5!Ny#^UrMQINY4 zB^U^(E|;thUexM0RSC6|IF#^Cnp#z9|2{PvKLma_$k$fcDuL-3~dMX3~1Mn(aD2_D4VuriOE=4a;oB#UJw7E=h0&bgvNtR)*TPv@H6qa6$U`5+M3(g z0ws~%piOnd+ec}H?vvO|k>TfUt2S%VZ(jn?2S()qT11#$yrr+D&!0t#_`TQZFXQP5 z6@#HZrkxEj9M)MzcYsv2TvNkDTb|Gy!dsHxd$ot)&?FID9c` zAMKT&297wCbFaSmT98}%o-Sr>9ocPa7|m}L49oa&n*z%buIpXA_R?z4P~nTy<4uu5 zWyT5cfdYaJqJJ9^U+^4qwgl6;I?sN?i+$a69o?-#Rth||AYU8V>|Pexl)o(?uVwm^ zqi&?_@K}uuF|T3DthBqwbLRhqi9d5c+!q#%#UuL(2;9g`=%{+j2amLl&9G-fNi48C zJ~xJuM>)bhK-DY#7^{CYmEo0#E|bXZDunTlCJR*451oZOkHWbz&b-)D_J0R&Abx#`X)1q{tq7`&151y zaReUWnL6Vx`_^7QZ?DD3le26zQix%WJ4*8$r0+8-7h)2i57? zjLTiWfdUbn)WZH^2wgDQA!>OLb9)(yx`%^;=I8tWUyVWSDhbV6IK+J={DAYr+#YRC zUPf8T@6@8p1xTU9`1m@w8|BSLW&XwBfpFs>0(wt(fnk+i{eTvnk=Irr%XSthxUz(;`8n^4>U0Z7<9(j4lC&)Di;40rR%17gizH@ z!ZHrwE1~HF5h){X(psaN+1{vkmma!T_+%J;r>7miq#Ia6(MOtXaa^! zb#Pp_4Eeo91#NmXG~@Ai=I2H#OchQ z%v`IsfLtos>nXKIy$?gjgLR}Ztm5iOcA5vN=IeBpNP-C?%gIOprr%hq<*4ZtP)O*P zNte4I*2P|kYlfx(oW;Za5=9()_03YLNM;1@Q!z9Ac>AP=@`zvb-Px3O`KIhScFWzV zHFx9}r=LwtSI6OOskvmZ&{iub7;=eqk$kILTjCa!83HFUK#n(&(+a(XyqCESQD4TH zbK*^hZGUw5jmrGGvPA;tT!BXp@7<6Fm#5!MLxR}8&7@uv=-wG&pk17_gt>W#iQj_R z2;T{}H-FU)zL>2xv||A6k#FhTq5zb3#?fUCy}ioYAm*Od0tufqdJTxvzQf^~X`aGHkRGa|aDREVa*|-O>nQ$`*16SK z8Z1QUXVbT+j=#*ioL5kR{+K( z*Jzb?ee@tjt)ZG~DGNp1ivopU7Zw`)ZGY8gv0(ip;VTKf2@~)LQz&inR#+M8a9xUy z)@AZ>y7;4WJe7c`Y-TH(FX7=ui_gGz2Syr-u{`Z3Ld8pe+KHJhsbLuX{#$OQs5TJ2 z>V-vY7kd4t|F)bqQR=}3ZFL8Si)FQyhiT(vZ6`a&P%y+WTu&Nh;S+1Fn=oAcykQ|? zzn^_SMQL4g`hKB!?1-K1$|zeeaTG+=H$2oxrvGyufhRwqh(E=fdy z!BHI5WmZL$3Vjzwx$@Higkp@h{dXg9S{7MamT$CA#uedxq0?Y4oUV3^qTWEnRJlF}fqR z7sa|i4Lps>uAm+f)w!3atQ2F6>JywPYtFv#Gsv)w6oig7J1M>G2GLhV6IB3q_6_1a z95AleV1d>TKZ(U?DWFCzWK`BKGjq$Vo4UA-CWs82Z}IzVkL^9-uyMm%U?Zj%Ef}{7 zq$5qT=_7uX_S@U3B-a+-%fvjlZ!_4r-cDj-Xb7d(&obu>saCSjU)K&bFz1ARE1%Zo zmMI5)$y!_iCPmIPz-Ao)uRb7fOWz`F{5t%SE5nYrYk5v{ z@OcZ?LtI#Lj~}0`nlFaA+uk0Xz$oYZR7uS4@BM5@mO1EoMcHD*q1D{-3utMa={dsn z--#Y-1!Eu(LAx+!tOuB0GGfX&58qdr7%sgrj$BoM4Pgds1wp7U?bn12C3n)23Jo2b4+R#S@pcAwC<|DJFZZPi0TTDd7iinthvt!i|8lW zaNo|Y)m-bqOFO$sB>ued6^)M?xhwK@v2M!%E4KCs9tM*P!ozuO zh+MTimq!T@yZxB2j|pg+V~e7HOljCpaabWiFZfG_M@N)h7Jpg$%H}*B@gw^j3xSz{ z6eZGk_t%qB_S2Q$k5<=IZ8RN!=G2>zSm*JaFj3zz39dLNtc^^Tl%WF1ZLqgl%YK0o zJhIz17Q3vf7;j_=v4Wc28C{5+s{aOgpT6>l6dD)v^f6er|V`Nh&wfQYZZN#JNQ-8iEuDU4n;6KT9KTNPQRZtyCnigEWs*7HTta)Yp-df5d6u6R85Em*KITubD3bOwkfP+kK`iv)YzTX~$8R>MM ztksw#Zs-@0?-m)jTC@=LxtU<18F?ztPpEE|!pC`&x?%-$Os%?;f&g#zNCt{sz<2oz=Eel^FQG>~R!2!?|Xad)?*Z;+Ane4ARHcXnWez zS+X|24Ipay(^mT(^`eSTYmN;U)T~SZxc?ZlSMukN%b=rBoL&UUsu|)8O8e86uf~!t z)J+EmtvX(zbJ8S94ZWd{oFa9a1hy9%qj59IC?}K*h#Bx2*aXuIV1S_l*Lm>NwtZ@b z;E@WLN2|5W;)@yTE%jrr>P;j*pr;_@{xdMox3k(tjQjXZ15uR5C9hpc(^6b~amHb};2XBFGoE#shsgCOwy+ zgPjxlA!C-GK20RfS%!xWcv&qV}acee1`38ga!xYvy1x{K0^T zED}&4;o|E@+UEEbfWzT4|Dh&tp3d!zY}YV|&&wq%XhJPUiwfNB181&>$xMD0e_{KZ zZYt)TiaurQoV01*E#CFy8YNsQS%j7iHkI!AibGlbvCZ=sz6j_?n)xNs^fSQp`7uLI zx!@xYi29F-k8ZPJwjWt~ge+dXcCUmD^DXyv_R;_pF0T`O6MUK}LBzgkvl2*J8clt4 zQl+eVNGjpU#5-?VxMhPUvSmX}t{E5+X-ipNY1?Hp+>;Ok(LH{_sI)Qk z%%$)?2XN(p!mrodGmClHFxn;=RMX~;2)|JaD`o!MIBx}AGfB^An7JzCK-0p7_mQYk zEF^1uV%P{_51x|tCEqBEIm;oo;S1;=6o{d*!YUxKe-#a-kzj#dM_p^)Ykt*hfJ6e1 zcZ|_ta3(sAdYSkAO0%%ecyuq+hr{oy_3MzH*XQO8~=?)XGZ37$uqw^2tb%kPO8NVRpZuzNA|%~*%I-1q{D7R7ApK8KZ!ob8g+@UvCt8Rin&%aG zW>Nk`NujN!ETtHT?Ts5fpt(i?v#cS{GfxS%|+z3M01m%QJoaiyX=5gX9P zQ*$e##stqk)p>sj8o?nf`ZcxZIIL$0i=br!e;+eOpb9)cA zXEH7g7;2wD`1kjwlMxNe*?V$2+QUMxS# zdWeg|Osp7>!ZUeSv*+bUcgKelcmOmMj_y6|Wbxv8f2KA5t_C=?5tFl~JeonPP!e89 zygVCjo@+-s$^bP_=hZAuCbmYG+8*Y~x1Gnm_Vj2Fxvz0OY$r=1GF5HO&!_UUyYf%4 z!faV5U0yCy$Sh&Wd;<5O{bnl-0&1$tMDe`sc&5|)gHhas`*dFc_PJCBg3OlwLp%ru z6G4uKwRO{i0uk(+!;J=1jAi8>OIk2Z_*n)Sw`}j0e@E>zq49JX5*NJR!q->MESevr z4x-F%9eQgYs=RS9LZV^rb4i$pkED>%LM1z7z47~h-XN$N@1&Ey6PC~q)-a(-%mqT7=-J9^Ku`a0=z5`1o>`Cop2beR#KjGZ z5{)nv*|bKr7R-Qm2VFC-Ao%z}Kg)Li1v%$Z_0{OD>rN!eWv9k)&p=3yk2k5|x~NXb z-cgut_MFc0^UitZI{wRZ^rv0!d9>MfOjL+bh!$S=?xrIOQ@9;#;=pnhFHlZPAZJV^_wL1VzKYqscF14&~QOcuK%97+c;X=OQk(tC_mGW6pea_VqR=34d$Ycl*kQ+-QyO7_5SO`?l7Eb$+$^roo$81_g zX;p>~>^9v3S!qIAh!7N+J~;Td>F%$L`X|93v}95!Twn_od$Y*>QYG3*{cO|m{YpJ< z4)t!adGNY3HefydkeQPo^k`MYQ$CeBANpSqxf8b&EFU&QKX@f1h~fJT>G z)*{`V4kdsW=L25U_i7(&nZ!$tc}=o@Ti6s;V1<6BO}6y~(W^W=2zLG{p?pBJJjUxW zqH?);_olS)`2p>!nbdf$*ta*;&2*Cr2jLBA+RqjC5>njwAr| zYFI4ic%Ocbn8Q`jH;FZy)kb&T?YiFC#afBV!e-~9IBU5 zs|6(af%{Lc?Met$6(j}eHZFYWbrnMAK)m}$FF(tn&#P|Xt__dJcI;Fk zP1fFIgyS!*j_D105AY!{17hsEJ2|S?B5JYF%uXTW%@SusdIxtl0p}4&G(+x-dixA` zfvf;N;!c(j@TxX!p%N$*rtfMoL(N^x0nQDMTrabfCf<33(K_hy;4Wm#5?G4#3w<9; z|JZO4gYK#X;}WyPOf=Itkf``~ocuGq{S%VXKldk>+D&Wkns;V@m||N2WhkpXlalKGM^tU}M6%GAf$D#8?SJ9SOMn})x^a7~ z=YgTUa;zW02tU!1+|*>$75dXNwky>ZG{k8U6*9sk4eAX?!z3fd_Cn{nY)IWQq$3kr_d`3dT-3kc!OsY}vg36y!?Vr$rD=AA=%$mVUDJNBKX*;Mm z6Z{2gY7Ao6h6$n@o_M9a5Fgl?dP&tSE4_S&#KKOeR!mEt(|cAH|4R>V)5;l1Mh3NB zNJ`;YpbIxfkiaww#@C3(sb_BvMT?;`kQr13RZz21LQ;&j?K_CD6w#`DgD{Ktn6WD|QOM-NoBcQP{VxV(cm%YNy6>70 zvFC^{AJHH-WC&gOk)O%T+fmII-=;`evc5(w*!-kxF5 z4+Rxtf8Y4Oo%%o=k3hu8cRaH62%rqzc3r2Fd9c+wW;fRT6lXU!foqsM2<~53ok%mu zCQZ1sl^p4wkGsEE6aEoMH$gKr*`5rgLHK=+ot2xUGx6Vn8h>FV(j!Q-<7WH^^jveN W)qC`ixwT>IjcZdeCA{OU=Klj;Uj0J= literal 0 HcmV?d00001 diff --git a/test/membrane_mp4/demuxer/cmaf/demuxer_test.exs b/test/membrane_mp4/demuxer/cmaf/demuxer_test.exs new file mode 100644 index 00000000..41b06824 --- /dev/null +++ b/test/membrane_mp4/demuxer/cmaf/demuxer_test.exs @@ -0,0 +1,177 @@ +defmodule Membrane.MP4.Demuxer.CMAF.DemuxerTest do + use ExUnit.Case, async: true + + import Membrane.ChildrenSpec + import Membrane.Testing.Assertions + + require Membrane.RCPipeline, as: RCPipeline + require Membrane.Pad, as: Pad + + alias Membrane.MP4.Demuxer.MultiFileSource + alias Membrane.RCMessage + alias Membrane.Testing.Pipeline + + # Fixtures used in demuxer tests below were generated with `chunk_duration` option set to `Membrane.Time.seconds(1)`. + describe "CMAF demuxer" do + @tag :tmp_dir + test "demuxes fragmented MP4 with just audio track", %{tmp_dir: dir} do + input_paths = get_files("test/fixtures/cmaf/", ["ref_audio_header.mp4", "ref_audio_*.m4s"]) + audio_output_path = Path.join(dir, "out.aac") + + pipeline = + start_testing_pipeline!( + input_paths: input_paths, + audio_output_file: audio_output_path, + audio_pad_ref: Pad.ref(:output, 1) + ) + + assert_end_of_stream(pipeline, :audio_sink) + assert :ok == Pipeline.terminate(pipeline) + + assert_files_equal(audio_output_path, "test/fixtures/cmaf/ref_audio.aac") + end + + @tag :sometag + @tag :tmp_dir + test "demuxes fragmented MP4 with just video track", %{tmp_dir: dir} do + video_output_path = Path.join(dir, "out.h264") + + pipeline = + start_testing_pipeline!( + input_paths: + get_files("test/fixtures/cmaf", ["ref_video_header.mp4", "ref_video_segment*.m4s"]), + video_output_file: video_output_path, + video_pad_ref: Pad.ref(:output, 1) + ) + + assert_end_of_stream(pipeline, :video_sink) + assert :ok == Pipeline.terminate(pipeline) + + assert_files_equal(video_output_path, "test/fixtures/cmaf/ref_video.h264") + end + + @tag :tmp_dir + test "demuxes fragmented MP4 with interleaved audio and video samples", %{tmp_dir: dir} do + input_paths = + get_files("test/fixtures/cmaf/muxed_audio_video/", ["header.mp4", "segment_*.m4s"]) + + video_output_path = Path.join(dir, "out.h264") + audio_output_path = Path.join(dir, "out.aac") + + pipeline = + start_testing_pipeline!( + input_paths: input_paths, + video_output_file: video_output_path, + audio_output_file: audio_output_path, + video_pad_ref: Pad.ref(:output, 1), + audio_pad_ref: Pad.ref(:output, 2) + ) + + assert_end_of_stream(pipeline, :video_sink) + assert_end_of_stream(pipeline, :audio_sink) + assert :ok == Pipeline.terminate(pipeline) + + assert_files_equal(video_output_path, "test/fixtures/in_video.h264") + assert_files_equal(audio_output_path, "test/fixtures/in_audio.aac") + end + + @tag :tmp_dir + test "resolves tracks from fragmented MP4 and allows to link output pads when tracks are resolved", + %{tmp_dir: dir} do + input_paths = + get_files("test/fixtures/cmaf/muxed_audio_video/", ["header.mp4", "segment_*.m4s"]) + + spec = + child(:file, %MultiFileSource{ + paths: input_paths + }) + |> child(:demuxer, Membrane.MP4.Demuxer.CMAF) + + pipeline = RCPipeline.start_link!() + RCPipeline.exec_actions(pipeline, spec: spec) + RCPipeline.subscribe(pipeline, %RCMessage.Notification{}) + RCPipeline.subscribe(pipeline, %RCMessage.EndOfStream{}) + + assert_receive %RCMessage.Notification{ + element: :demuxer, + data: {:new_tracks, [{1, _payload}, {2, _payload2}]}, + from: _ + }, + 2000 + + video_output_path = Path.join(dir, "out.h264") + audio_output_path = Path.join(dir, "out.aac") + + structure = [ + get_child(:demuxer) + |> via_out(Pad.ref(:output, 1)) + |> child(Membrane.AAC.Parser) + |> child(:audio_sink, %Membrane.File.Sink{location: audio_output_path}), + get_child(:demuxer) + |> via_out(Pad.ref(:output, 2)) + |> child(%Membrane.H264.Parser{output_stream_structure: :annexb}) + |> child(:video_sink, %Membrane.File.Sink{location: video_output_path}) + ] + + RCPipeline.exec_actions(pipeline, spec: structure) + assert_receive %RCMessage.EndOfStream{element: :demuxer, pad: :input}, 2000 + assert_receive %RCMessage.EndOfStream{element: :audio_sink, pad: :input}, 2000 + assert_receive %RCMessage.EndOfStream{element: :video_sink, pad: :input}, 2000 + RCPipeline.terminate(pipeline) + + assert_files_equal(video_output_path, "test/fixtures/in_video.h264") + assert_files_equal(audio_output_path, "test/fixtures/in_audio.aac") + end + end + + defp start_testing_pipeline!(opts) do + input_spec = [ + child(:file, %MultiFileSource{paths: opts[:input_paths]}) + |> child(:demuxer, Membrane.MP4.Demuxer.CMAF) + ] + + video_spec = + if opts[:video_output_file] do + [ + get_child(:demuxer) + |> via_out(opts[:video_pad_ref], options: [kind: :video]) + |> child(%Membrane.H264.Parser{output_stream_structure: :annexb}) + |> child(:video_sink, %Membrane.File.Sink{location: opts[:video_output_file]}) + ] + else + [] + end + + audio_spec = + if opts[:audio_output_file] do + [ + get_child(:demuxer) + |> via_out(opts[:audio_pad_ref], options: [kind: :audio]) + |> child(:parser, Membrane.AAC.Parser) + |> child(:audio_sink, %Membrane.File.Sink{location: opts[:audio_output_file]}) + ] + else + [] + end + + spec = input_spec ++ video_spec ++ audio_spec + Pipeline.start_link_supervised!(spec: spec) + end + + defp assert_files_equal(file_a, file_b) do + assert {:ok, a} = File.read(file_a) + assert {:ok, b} = File.read(file_b) + assert a == b + end + + defp get_files(directory_path, regexes) do + directory_path + |> Path.expand() + |> (fn path -> + Enum.map(regexes, &Path.join([path, "/", &1])) + end).() + |> Enum.map(&Path.wildcard/1) + |> List.flatten() + |> Enum.filter(&File.regular?(&1)) + end +end diff --git a/test/support/demuxer/multi_file_source.ex b/test/support/demuxer/multi_file_source.ex new file mode 100644 index 00000000..78aa3308 --- /dev/null +++ b/test/support/demuxer/multi_file_source.ex @@ -0,0 +1,39 @@ +defmodule Membrane.MP4.Demuxer.MultiFileSource do + @moduledoc false + use Membrane.Source + + def_output_pad :output, accepted_format: _any, flow_control: :manual, demand_unit: :bytes + + def_options paths: [spec: [Path.t()]] + + @impl true + def handle_init(_ctx, opts) do + {[], %{paths: opts.paths, binary: nil}} + end + + @impl true + def handle_setup(_ctx, state) do + binary = Enum.map_join(state.paths, &File.read!/1) + {[], %{state | binary: binary}} + end + + @impl true + def handle_playing(_ctx, state) do + {[stream_format: {:output, %Membrane.RemoteStream{type: :bytestream}}], state} + end + + @impl true + def handle_demand(:output, demand_size, :bytes, ctx, state) do + case state.binary do + <> -> + {[buffer: {:output, %Membrane.Buffer{payload: first}}], %{state | binary: rest}} + + other -> + final_buffers = + if other == <<>>, do: [], else: [buffer: {:output, %Membrane.Buffer{payload: other}}] + + maybe_eos = if ctx.pads.output.end_of_stream?, do: [], else: [end_of_stream: :output] + {final_buffers ++ maybe_eos, %{state | binary: <<>>}} + end + end +end