audio: Make scanner handle media with not duration (Fixes: #1526)

This commit is contained in:
Thomas Adamcik 2016-07-26 21:16:31 +02:00
parent 242a771062
commit ad4225d38d
2 changed files with 16 additions and 7 deletions

View File

@ -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`)

View File

@ -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