@@ -38,7 +38,7 @@ defmodule ExHLS.DemuxingEngine.MPEGTS do
3838
3939 packets_map =
4040 Enum . reduce ( new_packets , demuxing_engine . packets_map , fn new_packet , packets_map ->
41- Map . update ( packets_map , new_packet . pid , [ new_packet ] , & ( & 1 ++ [ new_packet ] ) )
41+ Map . update ( packets_map , new_packet . pid , Qex . new ( [ new_packet ] ) , & Qex . push ( & 1 , new_packet ) )
4242 end )
4343
4444 % { demuxing_engine | demuxer: demuxer , packets_map: packets_map }
@@ -82,12 +82,10 @@ defmodule ExHLS.DemuxingEngine.MPEGTS do
8282 @ impl true
8383 def pop_chunk ( % __MODULE__ { } = demuxing_engine , track_id ) do
8484 with { [ packet ] , demuxing_engine } <- take_packets ( demuxing_engine , track_id ) do
85- { maybe_tden_tag , demuxing_engine } = maybe_read_tden_tag ( demuxing_engine , packet . payload . pts )
86- tden_tag = maybe_tden_tag || demuxing_engine . last_tden_tag
85+ demuxing_engine = maybe_read_tden_tag ( demuxing_engine , packet . payload . pts )
8786
8887 { demuxing_engine , packet } =
89- % { demuxing_engine | last_tden_tag: tden_tag }
90- |> handle_possible_timestamps_rollover ( track_id , packet )
88+ demuxing_engine |> handle_possible_timestamps_rollover ( track_id , packet )
9189
9290 chunk = % ExHLS.Chunk {
9391 payload: packet . payload . data ,
@@ -97,7 +95,7 @@ defmodule ExHLS.DemuxingEngine.MPEGTS do
9795 metadata: % {
9896 discontinuity: packet . payload . discontinuity ,
9997 is_aligned: packet . payload . is_aligned ,
100- tden_tag: tden_tag
98+ tden_tag: demuxing_engine . last_tden_tag
10199 }
102100 }
103101
@@ -109,13 +107,12 @@ defmodule ExHLS.DemuxingEngine.MPEGTS do
109107 end
110108
111109 defp take_packets ( demuxing_engine , track_id ) do
112- case Map . get ( demuxing_engine . packets_map , track_id ) do
113- [ packet | rest ] ->
114- demuxing_engine = put_in ( demuxing_engine . packets_map [ track_id ] , rest )
115- { [ packet ] , demuxing_engine }
116-
117- _other ->
118- { [ ] , demuxing_engine }
110+ with { :ok , packets } <- Map . fetch ( demuxing_engine . packets_map , track_id ) ,
111+ { { :value , packet } , rest } <- Qex . pop ( packets ) do
112+ demuxing_engine = put_in ( demuxing_engine . packets_map [ track_id ] , rest )
113+ { [ packet ] , demuxing_engine }
114+ else
115+ _other -> { [ ] , demuxing_engine }
119116 end
120117 end
121118
@@ -128,11 +125,12 @@ defmodule ExHLS.DemuxingEngine.MPEGTS do
128125 end ) ,
129126 no_id3_data: { [ id3 ] , demuxing_engine } <- take_packets ( demuxing_engine , id3_track_id ) ,
130127 id3_not_in_timerange: true <- id3 . payload . pts <= packet_pts do
131- { parse_tden_tag ( id3 . payload . data ) , demuxing_engine }
128+ tden_tag = parse_tden_tag ( id3 . payload . data ) || demuxing_engine . last_tden_tag
129+ % { demuxing_engine | last_tden_tag: tden_tag }
132130 else
133- no_id3_stream: nil -> { nil , demuxing_engine }
134- no_id3_data: { [ ] , updated_demuxing_engine } -> { nil , updated_demuxing_engine }
135- id3_not_in_timerange: false -> { nil , demuxing_engine }
131+ no_id3_stream: nil -> demuxing_engine
132+ no_id3_data: { [ ] , updated_demuxing_engine } -> updated_demuxing_engine
133+ id3_not_in_timerange: false -> demuxing_engine
136134 end
137135 end
138136
0 commit comments