@@ -5,6 +5,10 @@ import {
55 COMMON_HEADER_LENGTH ,
66} from './RtcpPacket' ;
77import { Serializable , type SerializableDump } from '../Serializable' ;
8+ import {
9+ readSigned3BytesInDataView ,
10+ writeSigned3BytesInDataView ,
11+ } from '../../utils/byteOps' ;
812
913// Common RTCP header length + 4 (SSRC of packet sender).
1014const FIXED_HEADER_LENGTH = COMMON_HEADER_LENGTH + 4 ;
@@ -422,40 +426,21 @@ export class ReceptionReport extends Serializable {
422426 * Get total lost.
423427 */
424428 getTotalLost ( ) : number {
425- let value = this . view . getUint32 ( 4 ) & 0x0fff ;
426-
427- // Possitive value.
428- if ( ( ( value >> 23 ) & 1 ) == 0 ) {
429- return value ;
430- }
431-
432- // Negative value.
433- if ( value != 0x0800000 ) {
434- value &= ~ ( 1 << 23 ) ;
435- }
436-
437- return - value ;
429+ return readSigned3BytesInDataView ( {
430+ view : this . view ,
431+ pos : 5 ,
432+ } ) ;
438433 }
439434
440435 /**
441436 * Set total lost.
442437 */
443438 setTotalLost ( totalLost : number ) : void {
444- // Get the limit value for possitive and negative total lost.
445- const clamp =
446- totalLost >= 0
447- ? totalLost > 0x07fffff
448- ? 0x07fffff
449- : totalLost
450- : - totalLost > 0x0800000
451- ? 0x0800000
452- : - totalLost ;
453-
454- const value = totalLost >= 0 ? clamp & 0x07fffff : clamp | 0x0800000 ;
455- const fractionLost = this . view . getUint8 ( 4 ) ;
456-
457- this . view . setUint32 ( 4 , value ) ;
458- this . view . setUint8 ( 4 , fractionLost ) ;
439+ writeSigned3BytesInDataView ( {
440+ view : this . view ,
441+ pos : 5 ,
442+ value : totalLost ,
443+ } ) ;
459444
460445 this . setSerializationNeeded ( true ) ;
461446 }
0 commit comments