diff options
author | strellydev <113683950+strellydev@users.noreply.github.com> | 2023-08-09 17:40:08 +0100 |
---|---|---|
committer | strellydev <113683950+strellydev@users.noreply.github.com> | 2023-10-13 19:54:24 +0100 |
commit | 9c9f1154f83c5ee3363ede8385170e699d36a22d (patch) | |
tree | 858f77a254013564c125e0d613b258aae9e14851 /modules/ogg | |
parent | 51f81e1c88499f04d2ebdcc0be0b34e73f5e90eb (diff) | |
download | redot-engine-9c9f1154f83c5ee3363ede8385170e699d36a22d.tar.gz |
Fix OGG audio loop offset pop.
Co-authored-by: MJacred <loesch.benny92@gmx.de>
Co-authored-by: Ellen Poe <ellen.h.poe@gmail.com>
Co-authored-by: Michael Wörner <mwoerner@semw-software.com>
Diffstat (limited to 'modules/ogg')
-rw-r--r-- | modules/ogg/ogg_packet_sequence.cpp | 18 | ||||
-rw-r--r-- | modules/ogg/ogg_packet_sequence.h | 7 |
2 files changed, 24 insertions, 1 deletions
diff --git a/modules/ogg/ogg_packet_sequence.cpp b/modules/ogg/ogg_packet_sequence.cpp index fb29493ca9..1100367f03 100644 --- a/modules/ogg/ogg_packet_sequence.cpp +++ b/modules/ogg/ogg_packet_sequence.cpp @@ -159,7 +159,9 @@ bool OggPacketSequencePlayback::next_ogg_packet(ogg_packet **p_packet) const { *p_packet = packet; - packet_cursor++; + if (!packet->e_o_s) { // Added this so it doesn't try to go to the next packet if it's the last packet of the file. + packet_cursor++; + } return true; } @@ -216,6 +218,20 @@ bool OggPacketSequencePlayback::seek_page(int64_t p_granule_pos) { return true; } +int64_t OggPacketSequencePlayback::get_page_number() const { + return page_cursor; +} + +bool OggPacketSequencePlayback::set_page_number(int64_t p_page_number) { + if (p_page_number >= 0 && p_page_number < ogg_packet_sequence->page_data.size()) { + page_cursor = p_page_number; + packet_cursor = 0; + packetno = 0; + return true; + } + return false; +} + OggPacketSequencePlayback::OggPacketSequencePlayback() { packet = new ogg_packet(); } diff --git a/modules/ogg/ogg_packet_sequence.h b/modules/ogg/ogg_packet_sequence.h index 7085504500..922a16560c 100644 --- a/modules/ogg/ogg_packet_sequence.h +++ b/modules/ogg/ogg_packet_sequence.h @@ -120,6 +120,13 @@ public: // Returns true on success, false on failure. bool seek_page(int64_t p_granule_pos); + // Gets the current page number. + int64_t get_page_number() const; + + // Moves to a specific page in the stream. + // Returns true on success, false if the page number is out of bounds. + bool set_page_number(int64_t p_page_number); + OggPacketSequencePlayback(); virtual ~OggPacketSequencePlayback(); }; |