sync looped playlist with time, when playlist start and length is set

This commit is contained in:
jb-alvarado 2022-02-06 17:26:31 +01:00
parent 4c759aaec5
commit 99271d2bdb

View File

@ -163,13 +163,13 @@ def timed_source(node, last):
delta, total_delta = get_delta(node['begin'])
node_ = None
if not playlist.loop and playlist.length:
if playlist.start and playlist.length:
messenger.debug(f'delta: {delta:f}')
messenger.debug(f'total_delta: {total_delta:f}')
check_sync(delta, node)
if (total_delta > node['out'] - node['seek'] and not last) \
or playlist.loop or not playlist.length:
or not playlist.length:
# when we are in the 24 hour range, get the clip
node_ = src_or_dummy(node)
@ -302,6 +302,10 @@ class GetSourceIter:
if self.playlist_reader.nodes and \
self.playlist_reader.nodes.get('program'):
self.clip_nodes = self.playlist_reader.nodes.get('program')
if playlist.loop and playlist.length:
self.loop_nodes()
self.node_count = len(self.clip_nodes)
if self.playlist_reader.error:
@ -310,6 +314,18 @@ class GetSourceIter:
self.playlist_reader.last_mod_time = 0.0
self.last_error = self.playlist_reader.error
def loop_nodes(self):
total_duration = 0
nodes_ = deepcopy(self.clip_nodes)
while total_duration < playlist.length:
for node in nodes_:
total_duration += node['out'] - node['in']
self.clip_nodes.append(node)
if total_duration >= playlist.length:
break
def init_time(self):
"""
get current time in second and shift it when is necessary
@ -402,7 +418,7 @@ class GetSourceIter:
if playlist.loop and self.node:
# when loop parameter is set and playlist node exists,
# jump to playlist start and play again
self.list_start = self.last_time + 1
self.list_start = get_time('full_sec')
self.node = None
messenger.info('Loop playlist')