InputStream: add method Rewind()
This commit is contained in:
parent
fe3c5e4e8e
commit
f1027ed198
@ -40,9 +40,6 @@
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
#include <unistd.h>
|
||||
#include <stdio.h> /* for SEEK_SET */
|
||||
|
||||
static constexpr Domain decoder_thread_domain("decoder_thread");
|
||||
|
||||
/**
|
||||
@ -128,7 +125,7 @@ decoder_stream_decode(const DecoderPlugin &plugin,
|
||||
return true;
|
||||
|
||||
/* rewind the stream, so each plugin gets a fresh start */
|
||||
input_stream->Seek(0, SEEK_SET, IgnoreError());
|
||||
input_stream->Rewind(IgnoreError());
|
||||
|
||||
decoder.dc.Unlock();
|
||||
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "util/Domain.hxx"
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdio.h> /* for SEEK_SET */
|
||||
|
||||
static constexpr Domain input_domain("input");
|
||||
|
||||
@ -113,6 +114,18 @@ input_stream::LockSeek(offset_type _offset, int whence, Error &error)
|
||||
return Seek(_offset, whence, error);
|
||||
}
|
||||
|
||||
bool
|
||||
input_stream::Rewind(Error &error)
|
||||
{
|
||||
return Seek(0, SEEK_SET, error);
|
||||
}
|
||||
|
||||
bool
|
||||
input_stream::LockRewind(Error &error)
|
||||
{
|
||||
return LockSeek(0, SEEK_SET, error);
|
||||
}
|
||||
|
||||
Tag *
|
||||
input_stream::ReadTag()
|
||||
{
|
||||
|
@ -217,6 +217,13 @@ struct input_stream {
|
||||
*/
|
||||
bool LockSeek(offset_type offset, int whence, Error &error);
|
||||
|
||||
/**
|
||||
* Rewind to the beginning of the stream. This is a wrapper
|
||||
* for Seek(0, SEEK_SET, error).
|
||||
*/
|
||||
bool Rewind(Error &error);
|
||||
bool LockRewind(Error &error);
|
||||
|
||||
/**
|
||||
* Returns true if the stream has reached end-of-file.
|
||||
*
|
||||
|
@ -44,7 +44,6 @@
|
||||
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
const struct playlist_plugin *const playlist_plugins[] = {
|
||||
&extm3u_playlist_plugin,
|
||||
@ -221,7 +220,7 @@ playlist_list_open_stream_mime2(struct input_stream *is, const char *mime)
|
||||
string_array_contains(plugin->mime_types, mime)) {
|
||||
/* rewind the stream, so each plugin gets a
|
||||
fresh start */
|
||||
is->Seek(0, SEEK_SET, IgnoreError());
|
||||
is->Rewind(IgnoreError());
|
||||
|
||||
auto playlist = playlist_plugin_open_stream(plugin, is);
|
||||
if (playlist != nullptr)
|
||||
@ -261,7 +260,7 @@ playlist_list_open_stream_suffix(struct input_stream *is, const char *suffix)
|
||||
string_array_contains(plugin->suffixes, suffix)) {
|
||||
/* rewind the stream, so each plugin gets a
|
||||
fresh start */
|
||||
is->Seek(0, SEEK_SET, IgnoreError());
|
||||
is->Rewind(IgnoreError());
|
||||
|
||||
auto playlist = playlist_plugin_open_stream(plugin, is);
|
||||
if (playlist != nullptr)
|
||||
|
@ -27,7 +27,6 @@
|
||||
#include "thread/Cond.hxx"
|
||||
|
||||
#include <assert.h>
|
||||
#include <unistd.h> /* for SEEK_SET */
|
||||
|
||||
bool
|
||||
tag_file_scan(const char *path_fs,
|
||||
@ -71,7 +70,7 @@ tag_file_scan(const char *path_fs,
|
||||
*handler, handler_ctx))
|
||||
break;
|
||||
|
||||
is->LockSeek(0, SEEK_SET, IgnoreError());
|
||||
is->LockRewind(IgnoreError());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -31,15 +31,6 @@
|
||||
#include "util/Domain.hxx"
|
||||
#include "LogV.hxx"
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
|
||||
extern "C" {
|
||||
#include <libavcodec/avcodec.h>
|
||||
#include <libavformat/avformat.h>
|
||||
@ -50,6 +41,9 @@ extern "C" {
|
||||
#include <libavutil/dict.h>
|
||||
}
|
||||
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
static constexpr Domain ffmpeg_domain("ffmpeg");
|
||||
|
||||
/* suppress the ffmpeg compatibility macro */
|
||||
@ -352,7 +346,7 @@ ffmpeg_probe(Decoder *decoder, struct input_stream *is)
|
||||
|
||||
unsigned char buffer[BUFFER_SIZE];
|
||||
size_t nbytes = decoder_read(decoder, is, buffer, BUFFER_SIZE);
|
||||
if (nbytes <= PADDING || !is->LockSeek(0, SEEK_SET, error))
|
||||
if (nbytes <= PADDING || !is->LockRewind(error))
|
||||
return nullptr;
|
||||
|
||||
/* some ffmpeg parsers (e.g. ac3_parser.c) read a few bytes
|
||||
|
@ -29,10 +29,6 @@
|
||||
#include <glib.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#if !defined(FLAC_API_VERSION_CURRENT) || FLAC_API_VERSION_CURRENT <= 7
|
||||
#error libFLAC is too old
|
||||
@ -340,7 +336,7 @@ oggflac_decode(Decoder &decoder, struct input_stream *input_stream)
|
||||
|
||||
/* rewind the stream, because ogg_codec_detect() has
|
||||
moved it */
|
||||
input_stream->LockSeek(0, SEEK_SET, IgnoreError());
|
||||
input_stream->LockRewind(IgnoreError());
|
||||
|
||||
flac_decode_internal(decoder, input_stream, true);
|
||||
}
|
||||
|
@ -39,7 +39,6 @@
|
||||
|
||||
#include <glib.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
static const opus_int32 opus_sample_rate = 48000;
|
||||
@ -273,7 +272,7 @@ mpd_opus_stream_decode(Decoder &decoder,
|
||||
|
||||
/* rewind the stream, because ogg_codec_detect() has
|
||||
moved it */
|
||||
input_stream->LockSeek(0, SEEK_SET, IgnoreError());
|
||||
input_stream->LockRewind(IgnoreError());
|
||||
|
||||
MPDOpusDecoder d(decoder, input_stream);
|
||||
OggSyncState oy(*input_stream, &decoder);
|
||||
|
@ -50,7 +50,6 @@
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
|
||||
struct vorbis_input_stream {
|
||||
Decoder *decoder;
|
||||
@ -184,7 +183,7 @@ vorbis_stream_decode(Decoder &decoder,
|
||||
|
||||
/* rewind the stream, because ogg_codec_detect() has
|
||||
moved it */
|
||||
input_stream->LockSeek(0, SEEK_SET, IgnoreError());
|
||||
input_stream->LockRewind(IgnoreError());
|
||||
|
||||
struct vorbis_input_stream vis;
|
||||
OggVorbis_File vf;
|
||||
|
Loading…
Reference in New Issue
Block a user