Commit 9252432b authored by Max Kellermann's avatar Max Kellermann

decoder/opus: move OggSyncState into class MPDOpusDecoder

parent f057f676
...@@ -76,6 +76,7 @@ class MPDOpusDecoder { ...@@ -76,6 +76,7 @@ class MPDOpusDecoder {
Decoder &decoder; Decoder &decoder;
InputStream &input_stream; InputStream &input_stream;
OggSyncState oy;
OggStreamState os; OggStreamState os;
OpusDecoder *opus_decoder = nullptr; OpusDecoder *opus_decoder = nullptr;
...@@ -97,6 +98,7 @@ public: ...@@ -97,6 +98,7 @@ public:
MPDOpusDecoder(DecoderReader &reader) MPDOpusDecoder(DecoderReader &reader)
:decoder(reader.GetDecoder()), :decoder(reader.GetDecoder()),
input_stream(reader.GetInputStream()), input_stream(reader.GetInputStream()),
oy(reader),
os(0) {} os(0) {}
~MPDOpusDecoder(); ~MPDOpusDecoder();
...@@ -116,11 +118,11 @@ public: ...@@ -116,11 +118,11 @@ public:
return previous_channels != 0; return previous_channels != 0;
} }
bool ReadNextPage(OggSyncState &oy); bool ReadNextPage();
DecoderCommand HandlePackets(); DecoderCommand HandlePackets();
bool Seek(OggSyncState &oy, uint64_t where_frame); bool Seek(uint64_t where_frame);
private: private:
DecoderCommand HandlePacket(const ogg_packet &packet); DecoderCommand HandlePacket(const ogg_packet &packet);
...@@ -139,7 +141,7 @@ MPDOpusDecoder::~MPDOpusDecoder() ...@@ -139,7 +141,7 @@ MPDOpusDecoder::~MPDOpusDecoder()
} }
inline bool inline bool
MPDOpusDecoder::ReadNextPage(OggSyncState &oy) MPDOpusDecoder::ReadNextPage()
{ {
ogg_page page; ogg_page page;
if (!oy.ExpectPage(page)) if (!oy.ExpectPage(page))
...@@ -378,7 +380,7 @@ MPDOpusDecoder::HandleAudio(const ogg_packet &packet) ...@@ -378,7 +380,7 @@ MPDOpusDecoder::HandleAudio(const ogg_packet &packet)
} }
bool bool
MPDOpusDecoder::Seek(OggSyncState &oy, uint64_t where_frame) MPDOpusDecoder::Seek(uint64_t where_frame)
{ {
assert(eos_granulepos > 0); assert(eos_granulepos > 0);
assert(input_stream.IsSeekable()); assert(input_stream.IsSeekable());
...@@ -407,14 +409,13 @@ mpd_opus_stream_decode(Decoder &decoder, ...@@ -407,14 +409,13 @@ mpd_opus_stream_decode(Decoder &decoder,
input_stream.LockRewind(IgnoreError()); input_stream.LockRewind(IgnoreError());
DecoderReader reader(decoder, input_stream); DecoderReader reader(decoder, input_stream);
OggSyncState oy(reader);
MPDOpusDecoder d(reader); MPDOpusDecoder d(reader);
while (true) { while (true) {
auto cmd = d.HandlePackets(); auto cmd = d.HandlePackets();
if (cmd == DecoderCommand::SEEK) { if (cmd == DecoderCommand::SEEK) {
if (d.Seek(oy, decoder_seek_where_frame(decoder))) if (d.Seek(decoder_seek_where_frame(decoder)))
decoder_command_finished(decoder); decoder_command_finished(decoder);
else else
decoder_seek_error(decoder); decoder_seek_error(decoder);
...@@ -425,7 +426,7 @@ mpd_opus_stream_decode(Decoder &decoder, ...@@ -425,7 +426,7 @@ mpd_opus_stream_decode(Decoder &decoder,
if (cmd != DecoderCommand::NONE) if (cmd != DecoderCommand::NONE)
break; break;
if (!d.ReadNextPage(oy)) if (!d.ReadNextPage())
break; break;
} }
} }
......
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