aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/decoder/VorbisDecoderPlugin.cxx4
-rw-r--r--src/input_stream.c7
-rw-r--r--src/input_stream.h7
3 files changed, 15 insertions, 3 deletions
diff --git a/src/decoder/VorbisDecoderPlugin.cxx b/src/decoder/VorbisDecoderPlugin.cxx
index 910655361..01a558def 100644
--- a/src/decoder/VorbisDecoderPlugin.cxx
+++ b/src/decoder/VorbisDecoderPlugin.cxx
@@ -139,9 +139,7 @@ vorbis_is_open(struct vorbis_input_stream *vis, OggVorbis_File *vf,
{
vis->decoder = decoder;
vis->input_stream = input_stream;
- vis->seekable = input_stream->seekable &&
- (input_stream->uri == NULL ||
- !uri_has_scheme(input_stream->uri));
+ vis->seekable = input_stream_cheap_seeking(input_stream);
int ret = ov_open_callbacks(vis, vf, NULL, 0, vorbis_is_callbacks);
if (ret < 0) {
diff --git a/src/input_stream.c b/src/input_stream.c
index e445dca6c..c82788f39 100644
--- a/src/input_stream.c
+++ b/src/input_stream.c
@@ -22,6 +22,7 @@
#include "input_registry.h"
#include "input_plugin.h"
#include "input/rewind_input_plugin.h"
+#include "uri.h"
#include <glib.h>
#include <assert.h>
@@ -115,6 +116,12 @@ input_stream_lock_wait_ready(struct input_stream *is)
}
bool
+input_stream_cheap_seeking(const struct input_stream *is)
+{
+ return is->seekable && (is->uri == NULL || !uri_has_scheme(is->uri));
+}
+
+bool
input_stream_seek(struct input_stream *is, goffset offset, int whence,
GError **error_r)
{
diff --git a/src/input_stream.h b/src/input_stream.h
index 3a29625af..d5b1dae2e 100644
--- a/src/input_stream.h
+++ b/src/input_stream.h
@@ -168,6 +168,13 @@ void
input_stream_lock_wait_ready(struct input_stream *is);
/**
+ * Determines whether seeking is cheap. This is true for local files.
+ */
+gcc_pure gcc_nonnull(1)
+bool
+input_stream_cheap_seeking(const struct input_stream *is);
+
+/**
* Seeks to the specified position in the stream. This will most
* likely fail if the "seekable" flag is false.
*