summaryrefslogtreecommitdiffstats
path: root/modules/ogg
diff options
context:
space:
mode:
authorstrellydev <113683950+strellydev@users.noreply.github.com>2023-08-09 17:40:08 +0100
committerstrellydev <113683950+strellydev@users.noreply.github.com>2023-10-13 19:54:24 +0100
commit9c9f1154f83c5ee3363ede8385170e699d36a22d (patch)
tree858f77a254013564c125e0d613b258aae9e14851 /modules/ogg
parent51f81e1c88499f04d2ebdcc0be0b34e73f5e90eb (diff)
downloadredot-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.cpp18
-rw-r--r--modules/ogg/ogg_packet_sequence.h7
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();
};