Commit f1027ed1 authored by Max Kellermann's avatar Max Kellermann

InputStream: add method Rewind()

parent fe3c5e4e
......@@ -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()
{
......
......@@ -218,6 +218,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.
*
* The caller must lock the mutex.
......
......@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment