@@ -116,13 +116,13 @@ impl Attachment {
116116 attached_msg : attached,
117117
118118 video_packet_ring : PacketRing :: new ( ) ,
119- video_stream_seq : 0 ,
120- prev_video_stream_seq : 0 ,
119+ video_stream_seq : None ,
120+ prev_video_stream_seq : None ,
121121 video_stream_seq_offset,
122122
123123 audio_packet_ring : PacketRing :: new ( ) ,
124- audio_stream_seq : 0 ,
125- prev_audio_stream_seq : 0 ,
124+ audio_stream_seq : None ,
125+ prev_audio_stream_seq : None ,
126126 audio_stream_seq_offset : 0 ,
127127
128128 notify_detached : Some ( detached_tx) ,
@@ -342,13 +342,13 @@ pub(crate) struct AttachmentState {
342342 reattach_required : bool ,
343343
344344 video_packet_ring : PacketRing ,
345- video_stream_seq : u64 ,
346- prev_video_stream_seq : u64 ,
345+ video_stream_seq : Option < u64 > ,
346+ prev_video_stream_seq : Option < u64 > ,
347347 video_stream_seq_offset : u64 ,
348348
349349 audio_packet_ring : PacketRing ,
350- audio_stream_seq : u64 ,
351- prev_audio_stream_seq : u64 ,
350+ audio_stream_seq : Option < u64 > ,
351+ prev_audio_stream_seq : Option < u64 > ,
352352 audio_stream_seq_offset : u64 ,
353353
354354 // A future representing the end of the attachment.
@@ -367,15 +367,15 @@ impl AttachmentState {
367367 protocol:: MessageType :: VideoChunk ( chunk) => {
368368 // We always send packets for two streams - the current one and
369369 // (if there is one) the previous one.
370- if chunk . stream_seq > self . video_stream_seq {
370+ if self . video_stream_seq . is_none_or ( |s| s < chunk . stream_seq ) {
371371 // A new stream started.
372372 self . prev_video_stream_seq = self . video_stream_seq ;
373- self . video_stream_seq = chunk. stream_seq ;
373+ self . video_stream_seq = Some ( chunk. stream_seq ) ;
374374
375375 let res = self . attached_msg . streaming_resolution . unwrap_or_default ( ) ;
376376
377377 self . delegate . video_stream_start (
378- self . video_stream_seq + self . video_stream_seq_offset ,
378+ chunk . stream_seq + self . video_stream_seq_offset ,
379379 VideoStreamParams {
380380 width : res. width ,
381381 height : res. height ,
@@ -385,26 +385,26 @@ impl AttachmentState {
385385 ) ;
386386
387387 // Discard any older packets.
388- self . video_packet_ring
389- . discard ( self . prev_video_stream_seq . saturating_sub ( 1 ) ) ;
388+ if let Some ( prev) = self . prev_video_stream_seq {
389+ self . video_packet_ring . discard ( prev. saturating_sub ( 1 ) ) ;
390+ }
390391 }
391392
392393 if let Err ( err) = self . video_packet_ring . recv_chunk ( chunk) {
393394 error ! ( "error in packet ring: {:#}" , err) ;
394395 }
395396
396- for mut packet in self
397- . video_packet_ring
398- . drain_completed ( self . prev_video_stream_seq )
399- {
400- packet. stream_seq += self . video_stream_seq_offset ;
401- self . delegate . video_packet ( Arc :: new ( packet) ) ;
397+ if let Some ( prev) = self . prev_video_stream_seq {
398+ for mut packet in self . video_packet_ring . drain_completed ( prev) {
399+ packet. stream_seq += self . video_stream_seq_offset ;
400+ self . delegate . video_packet ( Arc :: new ( packet) ) ;
401+ }
402402 }
403403
404404 if self . video_stream_seq != self . prev_video_stream_seq {
405405 for mut packet in self
406406 . video_packet_ring
407- . drain_completed ( self . video_stream_seq )
407+ . drain_completed ( self . video_stream_seq . unwrap ( ) )
408408 {
409409 packet. stream_seq += self . video_stream_seq_offset ;
410410 self . delegate . video_packet ( Arc :: new ( packet) ) ;
@@ -414,10 +414,10 @@ impl AttachmentState {
414414 protocol:: MessageType :: AudioChunk ( chunk) => {
415415 // We always send packets for two streams - the current one and
416416 // (if there is one) the previous one.
417- if chunk . stream_seq > self . audio_stream_seq {
417+ if self . audio_stream_seq . is_none_or ( |s| s < chunk . stream_seq ) {
418418 // A new stream started.
419419 self . prev_audio_stream_seq = self . audio_stream_seq ;
420- self . audio_stream_seq = chunk. stream_seq ;
420+ self . audio_stream_seq = Some ( chunk. stream_seq ) ;
421421
422422 let channels = self
423423 . attached_msg
@@ -427,7 +427,7 @@ impl AttachmentState {
427427 . unwrap_or_default ( ) ;
428428
429429 self . delegate . audio_stream_start (
430- self . audio_stream_seq + self . audio_stream_seq_offset ,
430+ chunk . stream_seq + self . audio_stream_seq_offset ,
431431 AudioStreamParams {
432432 codec : self . attached_msg . audio_codec ( ) ,
433433 sample_rate : self . attached_msg . sample_rate_hz ,
@@ -436,26 +436,26 @@ impl AttachmentState {
436436 ) ;
437437
438438 // Discard any older packets.
439- self . audio_packet_ring
440- . discard ( self . prev_audio_stream_seq . saturating_sub ( 1 ) ) ;
439+ if let Some ( prev) = self . prev_audio_stream_seq {
440+ self . audio_packet_ring . discard ( prev. saturating_sub ( 1 ) ) ;
441+ }
441442 }
442443
443444 if let Err ( err) = self . audio_packet_ring . recv_chunk ( chunk) {
444445 error ! ( "error in packet ring: {:#}" , err) ;
445446 }
446447
447- for mut packet in self
448- . audio_packet_ring
449- . drain_completed ( self . prev_audio_stream_seq )
450- {
451- packet. stream_seq += self . audio_stream_seq_offset ;
452- self . delegate . audio_packet ( Arc :: new ( packet) ) ;
448+ if let Some ( prev) = self . prev_audio_stream_seq {
449+ for mut packet in self . audio_packet_ring . drain_completed ( prev) {
450+ packet. stream_seq += self . audio_stream_seq_offset ;
451+ self . delegate . audio_packet ( Arc :: new ( packet) ) ;
452+ }
453453 }
454454
455455 if self . audio_stream_seq != self . prev_audio_stream_seq {
456456 for mut packet in self
457457 . audio_packet_ring
458- . drain_completed ( self . audio_stream_seq )
458+ . drain_completed ( self . audio_stream_seq . unwrap ( ) )
459459 {
460460 packet. stream_seq += self . audio_stream_seq_offset ;
461461 self . delegate . audio_packet ( Arc :: new ( packet) ) ;
0 commit comments