Skip to content

Commit 54cd6ca

Browse files
committed
OGG: Increment audio packet page sequence numbers when writing
1 parent 76fca86 commit 54cd6ca

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

src/ogg/write.rs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use std::fs::File;
1212
use std::io::{Cursor, Read, Seek, SeekFrom, Write};
1313

1414
use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt};
15-
use ogg_pager::{Packets, PageHeader, CONTAINS_FIRST_PAGE_OF_BITSTREAM};
15+
use ogg_pager::{Packets, Page, PageHeader, CONTAINS_FIRST_PAGE_OF_BITSTREAM};
1616

1717
#[derive(PartialEq, Copy, Clone)]
1818
pub(crate) enum OGGFormat {
@@ -137,9 +137,20 @@ where
137137
file.rewind()?;
138138
file.set_len(0)?;
139139

140-
packets.write_to(file, stream_serial, 0, CONTAINS_FIRST_PAGE_OF_BITSTREAM)?;
140+
let pages_written =
141+
packets.write_to(file, stream_serial, 0, CONTAINS_FIRST_PAGE_OF_BITSTREAM)? as u32;
142+
143+
let mut pages_reader = Cursor::new(&remaining_file_content[..]);
144+
let mut idx = 0;
145+
while let Ok(mut page) = Page::read(&mut pages_reader, false) {
146+
let header = page.header_mut();
147+
header.sequence_number = pages_written + idx;
148+
page.gen_crc();
149+
file.write_all(&page.as_bytes())?;
150+
151+
idx += 1;
152+
}
141153

142-
file.write_all(&remaining_file_content)?;
143154
Ok(())
144155
}
145156

0 commit comments

Comments
 (0)