Skip to content

Commit d99304b

Browse files
committed
Recognize ISO 13818-7 MPEG-2 object types for AAC.
Object types sourced from https://mp4ra.org/#/object_types.
1 parent 5326af6 commit d99304b

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

mp4parse/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4068,7 +4068,7 @@ fn read_dc_descriptor(data: &[u8], esds: &mut ES_Descriptor) -> Result<()> {
40684068
}
40694069

40704070
esds.audio_codec = match object_profile {
4071-
0x40 | 0x41 => CodecType::AAC,
4071+
0x40 | 0x41 | 0x66 | 0x67 => CodecType::AAC,
40724072
0x69 | 0x6B => CodecType::MP3,
40734073
_ => CodecType::Unknown,
40744074
};

mp4parse/src/tests.rs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1060,6 +1060,35 @@ fn read_esds_aac_type5() {
10601060
assert_eq!(es.decoder_specific_data, aac_dc_descriptor);
10611061
}
10621062

1063+
#[test]
1064+
fn read_esds_mpeg2_aac_lc() {
1065+
// Recognize MPEG-2 AAC LC (ISO 13818-7) object type as AAC.
1066+
// Extracted from BMO #1722497 sdasdasdasd_001.mp4 using Bento4.
1067+
// "mp4extract --payload-only moov/trak[1]/mdia/minf/stbl/stsd/mp4a/esds sdasdasdasd_001.mp4 /dev/stdout | xxd -i -c 15"
1068+
let aac_esds = vec![
1069+
0x03, 0x19, 0x00, 0x00, 0x00, 0x04, 0x11, 0x67, 0x15, 0x00, 0x02, 0x38, 0x00, 0x01, 0x0f,
1070+
0xd0, 0x00, 0x00, 0xf5, 0x48, 0x05, 0x02, 0x13, 0x90, 0x06, 0x01, 0x02,
1071+
];
1072+
let aac_dc_descriptor = &aac_esds[22..24];
1073+
1074+
let mut stream = make_box(BoxSize::Auto, b"esds", |s| {
1075+
s.B32(0) // reserved
1076+
.append_bytes(aac_esds.as_slice())
1077+
});
1078+
let mut iter = super::BoxIter::new(&mut stream);
1079+
let mut stream = iter.next_box().unwrap().unwrap();
1080+
1081+
let es = super::read_esds(&mut stream).unwrap();
1082+
1083+
assert_eq!(es.audio_codec, super::CodecType::AAC);
1084+
assert_eq!(es.audio_object_type, Some(2));
1085+
assert_eq!(es.extended_audio_object_type, None);
1086+
assert_eq!(es.audio_sample_rate, Some(22050));
1087+
assert_eq!(es.audio_channel_count, Some(2));
1088+
assert_eq!(es.codec_esds, aac_esds);
1089+
assert_eq!(es.decoder_specific_data, aac_dc_descriptor);
1090+
}
1091+
10631092
#[test]
10641093
fn read_stsd_mp4v() {
10651094
let mp4v = vec![

0 commit comments

Comments
 (0)