Skip to content

Commit 632f8a5

Browse files
authored
AV1: Correctly parse 5-byte leb128 size value (webrtc-rs#617)
* Correctly parse 5-byte leb128 * reformat
1 parent be438ed commit 632f8a5

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

rtp/src/codecs/av1/av1_test.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use crate::codecs::av1::leb128::read_leb128;
12
use crate::codecs::av1::obu::{
23
OBU_HAS_EXTENSION_BIT, OBU_TYPE_FRAME, OBU_TYPE_FRAME_HEADER, OBU_TYPE_METADATA,
34
OBU_TYPE_SEQUENCE_HEADER, OBU_TYPE_TEMPORAL_DELIMITER, OBU_TYPE_TILE_GROUP, OBU_TYPE_TILE_LIST,
@@ -452,3 +453,19 @@ fn test_split_two_obus_into_two_packets() -> Result<()> {
452453
);
453454
Ok(())
454455
}
456+
457+
#[test]
458+
fn read_leb128_0() {
459+
let bytes = vec![0u8];
460+
let (payload_size, leb128_size) = read_leb128(&(bytes.into()));
461+
assert_eq!(payload_size, 0);
462+
assert_eq!(leb128_size, 1);
463+
}
464+
465+
#[test]
466+
fn read_leb128_5_byte() {
467+
let bytes = vec![0xC3, 0x80, 0x81, 0x80, 0x00];
468+
let (payload_size, leb128_size) = read_leb128(&(bytes.into()));
469+
assert_eq!(leb128_size, 5);
470+
assert_eq!(payload_size, 16451);
471+
}

rtp/src/codecs/av1/leb128.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ pub fn encode_leb128(mut val: u32) -> u32 {
1414
}
1515
}
1616

17-
pub fn decode_leb128(mut val: u32) -> u32 {
17+
pub fn decode_leb128(mut val: u64) -> u32 {
1818
let mut b = 0;
1919
loop {
2020
b |= val & 0b_0111_1111;
2121
val >>= 8;
2222
if val == 0 {
23-
return b;
23+
return b as u32;
2424
}
2525
b <<= 7;
2626
}
@@ -29,7 +29,7 @@ pub fn decode_leb128(mut val: u32) -> u32 {
2929
pub fn read_leb128(bytes: &Bytes) -> (u32, usize) {
3030
let mut encoded = 0;
3131
for i in 0..bytes.len() {
32-
encoded |= bytes[i] as u32;
32+
encoded |= bytes[i] as u64;
3333
if bytes[i] & 0b_1000_0000 == 0 {
3434
return (decode_leb128(encoded), i + 1);
3535
}

0 commit comments

Comments
 (0)