"""Minimal Ogg page reader/writer.""" import struct def _crc_table(): t = [] for i in range(256): r = i << 24 for _ in range(8): r = ((r << 1) ^ 0x04C11DB7) if r & 0x80000000 else (r << 1) t.append(r & 0xFFFFFFFF) return t _T = _crc_table() def ogg_crc(b: bytes) -> int: c = 0 for x in b: c = ((c << 8) & 0xFFFFFFFF) ^ _T[((c >> 24) & 0xFF) ^ x] return c def read_packets(b: bytes): """Return list of (packet_bytes, granule_of_page_if_packet_ends_page_else_None).""" pos = 0 out = [] cur = b"" while pos + 27 <= len(b): if b[pos:pos + 4] != b"OggS": raise ValueError("lost Ogg sync at %d" % pos) htype, gran, serial, seq, crc, nseg = struct.unpack_from("= 255: segs.append(255); n -= 255 segs.append(n) body += pk hdr = struct.pack("<4sBBqIIIB", b"OggS", 0, (2 if bos else 0) | (4 if eos else 0), granule, self.serial, self.seq, 0, len(segs)) + bytes(segs) page = bytearray(hdr + body) struct.pack_into("