@@ -12,7 +12,7 @@ use std::fs::File;
1212use std:: io:: { Cursor , Read , Seek , SeekFrom , Write } ;
1313
1414use 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 ) ]
1818pub ( 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