audio: Make scanner handle media with not duration (Fixes: #1526)
This commit is contained in:
parent
242a771062
commit
ad4225d38d
@ -30,6 +30,9 @@ Bug fix release.
|
||||
who fixed this in parallel. (Fixes: :issue:`1506`, PR: :issue:`1525`,
|
||||
:issue:`1517`)
|
||||
|
||||
- Audio: Make sure scanner handles streams without a duration.
|
||||
(Fixes: :issue:`1526`)
|
||||
|
||||
- Core: Avoid endless loop if all tracks in the tracklist are unplayable and
|
||||
consume mode is off. (Fixes: :issue:`1221`, :issue:`1454`, PR: :issue:`1455`)
|
||||
|
||||
|
||||
@ -135,6 +135,17 @@ def _start_pipeline(pipeline):
|
||||
pipeline.set_state(Gst.State.PLAYING)
|
||||
|
||||
|
||||
def _query_duration(pipeline):
|
||||
success, duration = pipeline.query_duration(Gst.Format.TIME)
|
||||
if not success:
|
||||
duration = None # Make sure error case preserves None.
|
||||
elif duration < 0:
|
||||
duration = None # Stream without duration.
|
||||
else:
|
||||
duration = duration // Gst.MSECOND
|
||||
return success, duration
|
||||
|
||||
|
||||
def _query_seekable(pipeline):
|
||||
query = Gst.Query.new_seeking(Gst.Format.TIME)
|
||||
pipeline.query(query)
|
||||
@ -187,13 +198,8 @@ def _process(pipeline, timeout_ms):
|
||||
elif message.type == Gst.MessageType.EOS:
|
||||
return tags, mime, have_audio, duration
|
||||
elif message.type == Gst.MessageType.ASYNC_DONE:
|
||||
success, duration = pipeline.query_duration(Gst.Format.TIME)
|
||||
if success:
|
||||
duration = duration // Gst.MSECOND
|
||||
else:
|
||||
duration = None
|
||||
|
||||
if tags and duration is not None:
|
||||
success, duration = _query_duration(pipeline)
|
||||
if tags and success:
|
||||
return tags, mime, have_audio, duration
|
||||
|
||||
# Workaround for upstream bug which causes tags/duration to arrive
|
||||
|
||||
Loading…
Reference in New Issue
Block a user