Commit 61e7e531 authored by Max Kellermann's avatar Max Kellermann

decoder/Opus: move page reader into the decoder class

parent ceb65291
sisyphus 0.23.15-alt1 0.23.14-alt1 0.23.13-alt1 0.23.12-alt1 0.23.11-alt1 0.23.8-alt3 0.23.8-alt2 0.23.8-alt1 0.21.24-alt1.1 0.21.24-alt1 0.20.23-alt3 0.20.23-alt2 0.20.23-alt1 0.20.21-alt1 0.20.15-alt1 0.18.14-alt1 0.18.11-alt1.1 0.18.11-alt1 0.18.10-alt1 v0.18.14 v0.18.13 v0.18.12 v0.18.11 v0.18.10 v0.18.9 v0.18.8 v0.18.7 v0.18.6 v0.18.5 v0.18.4 v0.18.3 v0.18.2 mpd/0.20.6-alt1 mpd/0.19.9-alt1 mpd/0.18.14-alt2 gb-sisyphus-task339776.6100 gb-sisyphus-task337393.100 gb-sisyphus-task337176.300 gb-sisyphus-task334590.100 gb-sisyphus-task333607.100 gb-sisyphus-task331543.2500 gb-sisyphus-task328663.4700 gb-sisyphus-task325064.100 gb-sisyphus-task319111.4000 gb-sisyphus-task313704.100 gb-sisyphus-task312885.100 gb-sisyphus-task308905.3200 gb-sisyphus-task305294.500 gb-sisyphus-task304007.100 gb-sisyphus-task303674.1700 gb-sisyphus-task298681.300 gb-sisyphus-task296051.1000 gb-sisyphus-task274827.100 gb-sisyphus-task269249.2000 gb-sisyphus-task266579.400 gb-sisyphus-task258132.600 gb-sisyphus-task254601.200 gb-sisyphus-task253310.100 gb-sisyphus-task252214.300 gb-sisyphus-task251539.6100 gb-sisyphus-task247988.7000 gb-sisyphus-task238768.6000 gb-sisyphus-task229151.100 gb-sisyphus-task227574.200 gb-sisyphus-task226762.6000 gb-sisyphus-task219546.1700 gb-sisyphus-task213491.100 gb-sisyphus-task198806.100 gb-sisyphus-task181400.100 gb-sisyphus-task141957.100 gb-sisyphus-task135039.100 gb-sisyphus-task130102.100 gb-sisyphus-task129023.100 gb-sisyphus-task127959.100 gb-sisyphus-task118591.100 gb-p9-task277538.2600 gb-c9f2-task327704.1100
No related merge requests found
......@@ -84,7 +84,9 @@ public:
:decoder(_decoder), input_stream(_input_stream) {}
~MPDOpusDecoder();
enum decoder_command HandlePage(ogg_page &page);
bool ReadFirstPage(ogg_sync_state &oy);
bool ReadNextPage(ogg_sync_state &oy);
enum decoder_command HandlePackets();
enum decoder_command HandlePacket(const ogg_packet &packet);
enum decoder_command HandleBOS(const ogg_packet &packet);
......@@ -103,19 +105,33 @@ MPDOpusDecoder::~MPDOpusDecoder()
ogg_stream_clear(&os);
}
inline enum decoder_command
MPDOpusDecoder::HandlePage(ogg_page &page)
inline bool
MPDOpusDecoder::ReadFirstPage(ogg_sync_state &oy)
{
const auto page_serialno = ogg_page_serialno(&page);
if (!os_initialized) {
assert(!os_initialized);
if (!OggExpectFirstPage(oy, os, decoder, input_stream))
return false;
os_initialized = true;
ogg_stream_init(&os, page_serialno);
} else if (page_serialno != os.serialno)
return true;
}
inline bool
MPDOpusDecoder::ReadNextPage(ogg_sync_state &oy)
{
assert(os_initialized);
ogg_page page;
if (!OggExpectPage(oy, page, decoder, input_stream))
return false;
const auto page_serialno = ogg_page_serialno(&page);
if (page_serialno != os.serialno)
ogg_stream_reset_serialno(&os, page_serialno);
ogg_stream_pagein(&os, &page);
return HandlePackets();
return true;
}
inline enum decoder_command
......@@ -256,14 +272,19 @@ mpd_opus_stream_decode(struct decoder *decoder,
ogg_sync_state oy;
ogg_sync_init(&oy);
if (!d.ReadFirstPage(oy)) {
ogg_sync_clear(&oy);
return;
}
while (true) {
ogg_page page;
if (!OggExpectPage(oy, page, decoder, input_stream))
enum decoder_command cmd = d.HandlePackets();
if (cmd != DECODE_COMMAND_NONE)
break;
enum decoder_command cmd = d.HandlePage(page);
if (cmd != DECODE_COMMAND_NONE)
if (!d.ReadNextPage(oy))
break;
}
ogg_sync_clear(&oy);
......
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