Skip to content

Commit fcfcd17

Browse files
committed
wip
1 parent 79f60f2 commit fcfcd17

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

lib/membrane/timestamp_queue.ex

+10-5
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ defmodule Membrane.TimestampQueue do
2222
dts_offset: integer(),
2323
qex: Qex.t(),
2424
buffers_size: non_neg_integer(),
25+
buffers_number: non_neg_integer(),
2526
paused_demand?: boolean(),
2627
end_of_stream?: boolean()
2728
}
@@ -97,11 +98,14 @@ defmodule Membrane.TimestampQueue do
9798
|> push_item(pad_ref, {:buffer, buffer})
9899
|> get_and_update_in([:pad_queues, pad_ref], fn pad_queue ->
99100
pad_queue
100-
|> Map.update!(:buffers_size, &(&1 + buffer_size))
101101
|> Map.update!(:dts_offset, fn
102102
nil -> timestamp_queue.current_queue_time - buffer.dts
103103
valid_offset -> valid_offset
104104
end)
105+
|> Map.merge(%{
106+
buffers_size: pad_queue.buffers_size + buffer_size,
107+
buffers_number: pad_queue.buffers_number + 1
108+
})
105109
|> actions_after_pushing_buffer(timestamp_queue.pause_demand_boundary)
106110
end)
107111
end
@@ -173,6 +177,7 @@ defmodule Membrane.TimestampQueue do
173177
dts_offset: nil,
174178
qex: Qex.new(),
175179
buffers_size: 0,
180+
buffers_number: 0,
176181
paused_demand?: false,
177182
end_of_stream?: false
178183
}
@@ -231,6 +236,7 @@ defmodule Membrane.TimestampQueue do
231236
end
232237
end
233238

239+
# todo 1: consider updating heap just after popping a buffer
234240
defp do_pop(timestamp_queue, pad_ref, pad_priority) do
235241
pad_queue = Map.get(timestamp_queue.pad_queues, pad_ref)
236242

@@ -240,14 +246,12 @@ defmodule Membrane.TimestampQueue do
240246
buffer_size = timestamp_queue.metric.buffers_size([buffer])
241247

242248
cond do
243-
# todo 1: consider updating heap just after popping a buffer
244-
# todo 2: holding buffers counter in pad_queue would help with a problem with buffer with payload: <<>> and metric: Bytes
245249
pad_priority != -buffer_time ->
246250
timestamp_queue
247251
|> Map.update!(:pads_heap, &(&1 |> Heap.pop() |> Heap.push({-buffer_time, pad_ref})))
248252
|> do_pop()
249253

250-
buffer_size == pad_queue.buffers_size and not pad_queue.end_of_stream? ->
254+
pad_queue.buffers_number == 1 and not pad_queue.end_of_stream? ->
251255
# last buffer on pad queue without end of stream
252256
{:none, timestamp_queue}
253257

@@ -257,7 +261,8 @@ defmodule Membrane.TimestampQueue do
257261
pad_queue = %{
258262
pad_queue
259263
| qex: qex,
260-
buffers_size: pad_queue.buffers_size - buffer_size
264+
buffers_size: pad_queue.buffers_size - buffer_size,
265+
buffers_number: pad_queue.buffers_number - 1
261266
}
262267

263268
timestamp_queue =

0 commit comments

Comments
 (0)