decoder/opus: move OggSyncState into class MPDOpusDecoder
This commit is contained in:
@@ -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:
|
|||||||
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:
|
|||||||
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()
|
|||||||
}
|
}
|
||||||
|
|
||||||
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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
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,
|
|||||||
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,
|
|||||||
if (cmd != DecoderCommand::NONE)
|
if (cmd != DecoderCommand::NONE)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (!d.ReadNextPage(oy))
|
if (!d.ReadNextPage())
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user