input_stream: add method _cheap_seeking()
Move code from the Vorbis decoder plugin.
This commit is contained in:
parent
acb45caa42
commit
960b9a9664
@ -1063,6 +1063,7 @@ test_run_input_SOURCES = test/run_input.c \
|
|||||||
src/io_thread.c src/io_thread.h \
|
src/io_thread.c src/io_thread.h \
|
||||||
src/conf.c src/tokenizer.c src/utils.c src/string_util.c\
|
src/conf.c src/tokenizer.c src/utils.c src/string_util.c\
|
||||||
src/Tag.cxx src/TagNames.c src/TagPool.cxx src/TagSave.cxx \
|
src/Tag.cxx src/TagNames.c src/TagPool.cxx src/TagSave.cxx \
|
||||||
|
src/uri.c \
|
||||||
src/fd_util.c
|
src/fd_util.c
|
||||||
|
|
||||||
test_dump_text_file_LDADD = \
|
test_dump_text_file_LDADD = \
|
||||||
@ -1075,6 +1076,7 @@ test_dump_text_file_SOURCES = test/dump_text_file.c \
|
|||||||
src/conf.c src/tokenizer.c src/utils.c src/string_util.c\
|
src/conf.c src/tokenizer.c src/utils.c src/string_util.c\
|
||||||
src/Tag.cxx src/TagNames.c src/TagPool.cxx \
|
src/Tag.cxx src/TagNames.c src/TagPool.cxx \
|
||||||
src/text_input_stream.c src/fifo_buffer.c \
|
src/text_input_stream.c src/fifo_buffer.c \
|
||||||
|
src/uri.c \
|
||||||
src/fd_util.c
|
src/fd_util.c
|
||||||
|
|
||||||
test_dump_playlist_LDADD = \
|
test_dump_playlist_LDADD = \
|
||||||
|
@ -139,9 +139,7 @@ vorbis_is_open(struct vorbis_input_stream *vis, OggVorbis_File *vf,
|
|||||||
{
|
{
|
||||||
vis->decoder = decoder;
|
vis->decoder = decoder;
|
||||||
vis->input_stream = input_stream;
|
vis->input_stream = input_stream;
|
||||||
vis->seekable = input_stream->seekable &&
|
vis->seekable = input_stream_cheap_seeking(input_stream);
|
||||||
(input_stream->uri == NULL ||
|
|
||||||
!uri_has_scheme(input_stream->uri));
|
|
||||||
|
|
||||||
int ret = ov_open_callbacks(vis, vf, NULL, 0, vorbis_is_callbacks);
|
int ret = ov_open_callbacks(vis, vf, NULL, 0, vorbis_is_callbacks);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include "input_registry.h"
|
#include "input_registry.h"
|
||||||
#include "input_plugin.h"
|
#include "input_plugin.h"
|
||||||
#include "input/rewind_input_plugin.h"
|
#include "input/rewind_input_plugin.h"
|
||||||
|
#include "uri.h"
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
@ -114,6 +115,12 @@ input_stream_lock_wait_ready(struct input_stream *is)
|
|||||||
g_mutex_unlock(is->mutex);
|
g_mutex_unlock(is->mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
input_stream_cheap_seeking(const struct input_stream *is)
|
||||||
|
{
|
||||||
|
return is->seekable && (is->uri == NULL || !uri_has_scheme(is->uri));
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
input_stream_seek(struct input_stream *is, goffset offset, int whence,
|
input_stream_seek(struct input_stream *is, goffset offset, int whence,
|
||||||
GError **error_r)
|
GError **error_r)
|
||||||
|
@ -167,6 +167,13 @@ gcc_nonnull(1)
|
|||||||
void
|
void
|
||||||
input_stream_lock_wait_ready(struct input_stream *is);
|
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
|
* Seeks to the specified position in the stream. This will most
|
||||||
* likely fail if the "seekable" flag is false.
|
* likely fail if the "seekable" flag is false.
|
||||||
|
Loading…
Reference in New Issue
Block a user