aboutsummaryrefslogtreecommitdiffstats
path: root/src/decoder/OggFind.cxx
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/decoder/OggFind.cxx19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/decoder/OggFind.cxx b/src/decoder/OggFind.cxx
index 9df4c6455..297d925e7 100644
--- a/src/decoder/OggFind.cxx
+++ b/src/decoder/OggFind.cxx
@@ -20,6 +20,8 @@
#include "config.h"
#include "OggFind.hxx"
#include "OggSyncState.hxx"
+#include "InputStream.hxx"
+#include "util/Error.hxx"
bool
OggFindEOS(OggSyncState &oy, ogg_stream_state &os, ogg_packet &packet)
@@ -35,3 +37,20 @@ OggFindEOS(OggSyncState &oy, ogg_stream_state &os, ogg_packet &packet)
return true;
}
}
+
+bool
+OggSeekFindEOS(OggSyncState &oy, ogg_stream_state &os, ogg_packet &packet,
+ InputStream &is)
+{
+ if (is.size > 0 && is.size - is.offset < 65536)
+ return OggFindEOS(oy, os, packet);
+
+ if (!is.CheapSeeking())
+ return false;
+
+ oy.Reset();
+
+ return is.LockSeek(-65536, SEEK_END, IgnoreError()) &&
+ oy.ExpectPageSeekIn(os) &&
+ OggFindEOS(oy, os, packet);
+}