decoder/opus: move SeekFindEOS() to OggFind.cxx
This commit is contained in:
parent
f629eb8cb2
commit
92c85bd20d
@ -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);
|
||||
}
|
||||
|
@ -24,6 +24,7 @@
|
||||
|
||||
#include <ogg/ogg.h>
|
||||
|
||||
struct InputStream;
|
||||
class OggSyncState;
|
||||
|
||||
/**
|
||||
@ -35,4 +36,14 @@ class OggSyncState;
|
||||
bool
|
||||
OggFindEOS(OggSyncState &oy, ogg_stream_state &os, ogg_packet &packet);
|
||||
|
||||
/**
|
||||
* Try to find the end-of-stream (EOS) packet. Seek to the end of the
|
||||
* file if necessary.
|
||||
*
|
||||
* @return true if the EOS packet was found
|
||||
*/
|
||||
bool
|
||||
OggSeekFindEOS(OggSyncState &oy, ogg_stream_state &os, ogg_packet &packet,
|
||||
InputStream &is);
|
||||
|
||||
#endif
|
||||
|
@ -291,24 +291,6 @@ mpd_opus_stream_decode(Decoder &decoder,
|
||||
}
|
||||
}
|
||||
|
||||
static bool
|
||||
SeekFindEOS(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();
|
||||
|
||||
Error error;
|
||||
return is.LockSeek(-65536, SEEK_END, error) &&
|
||||
oy.ExpectPageSeekIn(os) &&
|
||||
OggFindEOS(oy, os, packet);
|
||||
}
|
||||
|
||||
static bool
|
||||
mpd_opus_scan_stream(InputStream &is,
|
||||
const struct tag_handler *handler, void *handler_ctx)
|
||||
@ -367,7 +349,7 @@ mpd_opus_scan_stream(InputStream &is,
|
||||
}
|
||||
}
|
||||
|
||||
if (packet.e_o_s || SeekFindEOS(oy, os, packet, is))
|
||||
if (packet.e_o_s || OggSeekFindEOS(oy, os, packet, is))
|
||||
tag_handler_invoke_duration(handler, handler_ctx,
|
||||
packet.granulepos / opus_sample_rate);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user