From 92c85bd20dc4f55b53cc18887d4a6b9b165447ca Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 24 Oct 2013 20:33:12 +0200 Subject: decoder/opus: move SeekFindEOS() to OggFind.cxx --- src/decoder/OggFind.cxx | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/decoder/OggFind.cxx') 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); +} -- cgit v1.2.3