diff --git a/Cargo.toml b/Cargo.toml index 7128a8c..e96c736 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,6 +26,7 @@ serde = { version = "1", features = ["derive"], optional = true } tokio = ["dep:tokio"] bytes = ["dep:bytes"] serde = ["dep:serde", "bytes/serde"] +strict = [] [dev-dependencies] anyhow = "1" diff --git a/justfile b/justfile index 2284785..8637cc6 100644 --- a/justfile +++ b/justfile @@ -4,6 +4,7 @@ export RUST_BACKTRACE := "1" export RUST_LOG := "info" +export MP4ATOM_STRICT := "1" # List all of the available commands. default: diff --git a/src/any.rs b/src/any.rs index 65d8f19..ae8464f 100644 --- a/src/any.rs +++ b/src/any.rs @@ -329,6 +329,7 @@ any! { Tfhd, Tfdt, Trun, + Senc, Mdat, Free, ], diff --git a/src/error.rs b/src/error.rs index 59292fb..50150e9 100644 --- a/src/error.rs +++ b/src/error.rs @@ -71,8 +71,11 @@ pub type Result = std::result::Result; /// Either logs or returns an error depending on the environment/flag. pub(crate) fn decode_unknown(atom: &Any, parent: FourCC) -> Result<()> { - // TODO return an error when the `strict` feature flag is enabled. - // TODO return an error when run as a unit test, after fixing them. - tracing::warn!(kind = %atom.kind(), parent = %parent, "unexpected box"); + if std::env::var("MP4ATOM_STRICT").is_ok() || cfg!(feature = "strict") { + tracing::error!(kind = %atom.kind(), parent = %parent, "unexpected box"); + return Err(Error::UnexpectedBox(atom.kind())); + } else { + tracing::warn!(kind = %atom.kind(), parent = %parent, "unexpected box"); + } Ok(()) } diff --git a/src/moof/traf/mod.rs b/src/moof/traf/mod.rs index 8c520b8..40034dd 100644 --- a/src/moof/traf/mod.rs +++ b/src/moof/traf/mod.rs @@ -20,6 +20,7 @@ pub struct Traf { pub saiz: Vec, pub saio: Vec, pub meta: Option, + pub senc: Option, pub udta: Option, } @@ -28,7 +29,7 @@ impl Atom for Traf { nested! { required: [ Tfhd ], - optional: [ Tfdt, Meta, Udta ], + optional: [ Tfdt, Meta, Senc, Udta ], multiple: [ Trun, Sbgp, Sgpd, Subs, Saiz, Saio ], } } diff --git a/src/moov/mod.rs b/src/moov/mod.rs index 218e650..3d7137c 100644 --- a/src/moov/mod.rs +++ b/src/moov/mod.rs @@ -228,6 +228,7 @@ mod test { } } }, + senc: None, udta: None }], udta: None, diff --git a/src/moov/trak/mod.rs b/src/moov/trak/mod.rs index 2772f63..a304541 100644 --- a/src/moov/trak/mod.rs +++ b/src/moov/trak/mod.rs @@ -1,9 +1,11 @@ mod edts; mod mdia; +mod senc; mod tkhd; pub use edts::*; pub use mdia::*; +pub use senc::*; pub use tkhd::*; use crate::*; @@ -15,6 +17,7 @@ pub struct Trak { pub edts: Option, pub meta: Option, // TODO is this suppose to be here? pub mdia: Mdia, + pub senc: Option, pub udta: Option, } @@ -23,7 +26,7 @@ impl Atom for Trak { nested! { required: [ Tkhd, Mdia ], - optional: [ Edts, Meta, Udta ], + optional: [ Edts, Meta, Senc, Udta ], multiple: [], } } diff --git a/src/moov/trak/senc.rs b/src/moov/trak/senc.rs new file mode 100644 index 0000000..9e68099 --- /dev/null +++ b/src/moov/trak/senc.rs @@ -0,0 +1,154 @@ +use crate::{ext, AtomExt, Buf, BufMut, Encode, Error, Ext, FourCC, Result}; + +// SampleEncryptionBox (`senc`). +// From ISO/IEC 23007-7:2023 (Common Encryption), Section 7.2.1 + +// This can't really be parsed here, because it requires Per_sample_IV_Size, +// so unfortunately you just get a vector to work out yourself. + +ext! { + name: Senc, + versions: [0, 1, 2], + flags: {senc_use_subsamples = 1,} +} + +#[derive(Debug, Clone, PartialEq, Eq, Default)] +#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))] +pub struct Senc { + pub data: Vec, +} + +impl AtomExt for Senc { + const KIND_EXT: FourCC = FourCC::new(b"senc"); + + type Ext = SencExt; + + fn decode_body_ext(buf: &mut B, _ext: SencExt) -> Result { + let bytes_remaining = buf.remaining(); + let bytes = buf.slice(bytes_remaining).to_vec(); + buf.advance(bytes_remaining); + Ok(Senc { data: bytes }) + } + + fn encode_body_ext(&self, buf: &mut B) -> Result { + self.data.encode(buf)?; + Ok(SencExt { + version: SencVersion::V0, + senc_use_subsamples: false, + }) + } +} + +#[cfg(test)] +mod tests { + + use super::*; + use crate::Decode; + + // From the audio_cbcs.mp4 sample in MPEG's file format conformance set + const ENCODED_SENC: &[u8] = &[ + 0x00, 0x00, 0x05, 0x80, 0x73, 0x65, 0x6e, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x57, 0x0a, 0x61, 0x06, 0x76, 0xcb, 0x88, 0xf3, 0x02, 0xd1, 0x0a, 0xc8, 0xbc, 0x66, 0xe0, + 0x39, 0xed, 0xf9, 0xe3, 0x83, 0xca, 0x83, 0xd4, 0xa5, 0xe1, 0xe2, 0x74, 0xc5, 0x38, 0x9e, + 0xd9, 0xa1, 0x0a, 0xf4, 0x79, 0xbc, 0xb4, 0x97, 0xe5, 0xa6, 0xeb, 0x06, 0xf8, 0x85, 0xa3, + 0xe8, 0xf5, 0xa6, 0x2c, 0xe7, 0xd8, 0xdd, 0x62, 0x75, 0x6a, 0x71, 0x89, 0xb8, 0x82, 0xe6, + 0xd6, 0x23, 0x3d, 0x40, 0x95, 0x1a, 0x50, 0x2b, 0x5f, 0xa4, 0xb1, 0x15, 0x6d, 0xa2, 0x48, + 0xbe, 0x3f, 0x8b, 0xfb, 0x71, 0x8a, 0x85, 0xe6, 0xd6, 0x27, 0x02, 0xca, 0xee, 0xd0, 0x23, + 0x6f, 0x72, 0x30, 0x62, 0x42, 0xdd, 0x9c, 0xb0, 0x03, 0xb0, 0x0f, 0xf6, 0x9c, 0x99, 0x6b, + 0x56, 0x53, 0xf4, 0x02, 0xad, 0x89, 0x50, 0x61, 0xd0, 0xac, 0x12, 0x52, 0xa6, 0xc3, 0x88, + 0xd9, 0xc2, 0x3a, 0x5b, 0x4b, 0x2d, 0xa5, 0x32, 0xa0, 0x31, 0x20, 0x03, 0x00, 0x9c, 0x6b, + 0xf3, 0xa4, 0x6e, 0xee, 0x81, 0x18, 0xfe, 0x78, 0xce, 0xf0, 0x9e, 0x96, 0xde, 0x07, 0x90, + 0xa6, 0x6c, 0xac, 0x84, 0x34, 0x26, 0x62, 0x0d, 0xa2, 0xc1, 0xdd, 0xdd, 0xf0, 0x01, 0x72, + 0x68, 0x6b, 0x29, 0x4f, 0xc3, 0xaa, 0xc0, 0xaa, 0x08, 0xf5, 0x3b, 0x83, 0x04, 0xa5, 0x4d, + 0x1d, 0x15, 0xa2, 0x64, 0x5e, 0xfa, 0xe0, 0xbc, 0x17, 0x31, 0x31, 0x8e, 0xa0, 0x9f, 0xc2, + 0xcb, 0x15, 0x66, 0x30, 0xea, 0xa1, 0x31, 0x2d, 0xac, 0xbe, 0x5f, 0x3f, 0xcf, 0xa4, 0x8c, + 0x7b, 0x21, 0x1a, 0xe4, 0xb4, 0x11, 0xf7, 0xeb, 0x25, 0xdf, 0xf8, 0x85, 0xcd, 0xd1, 0xe6, + 0x3c, 0xaa, 0x5d, 0xa1, 0x72, 0x39, 0x93, 0x26, 0xb0, 0xfd, 0x63, 0x15, 0xca, 0xea, 0xbd, + 0xd3, 0x8a, 0x02, 0x99, 0x23, 0x5e, 0x3c, 0xe6, 0x24, 0x52, 0x2a, 0x81, 0xe4, 0xc8, 0x65, + 0x49, 0x1d, 0x50, 0x23, 0x66, 0x3e, 0x7e, 0x94, 0x9f, 0x53, 0xa5, 0x66, 0xde, 0x6a, 0x2f, + 0x18, 0x48, 0x45, 0x0d, 0x7d, 0x87, 0xb8, 0xa6, 0x00, 0x5d, 0x66, 0xd5, 0x7f, 0x8e, 0x9c, + 0x12, 0x87, 0x3a, 0x72, 0x98, 0xb8, 0x9e, 0x05, 0x2e, 0x10, 0x6c, 0xf7, 0x13, 0x0e, 0xf5, + 0xcc, 0x32, 0x9f, 0x8e, 0x5e, 0xb3, 0xa9, 0xb5, 0x6b, 0xa0, 0xef, 0xd8, 0xb5, 0x22, 0x94, + 0xb8, 0x48, 0x8c, 0x7f, 0xdb, 0x9d, 0xb1, 0x57, 0x05, 0x7a, 0x6e, 0x4b, 0x46, 0x89, 0x01, + 0x75, 0xae, 0xc8, 0x9c, 0xaf, 0x29, 0x7e, 0xfb, 0x3c, 0xc7, 0xa0, 0x76, 0xe8, 0x9f, 0xcd, + 0xe0, 0xce, 0xb6, 0x5b, 0x57, 0xb9, 0xa9, 0x4a, 0xa4, 0x21, 0xd6, 0x3e, 0x99, 0x5a, 0xf1, + 0x74, 0xa5, 0xf7, 0xa5, 0xb2, 0xb8, 0x79, 0x81, 0x06, 0x79, 0xdb, 0x30, 0x71, 0x06, 0x9d, + 0xfc, 0xdb, 0x09, 0x40, 0x29, 0x8e, 0x89, 0x3d, 0xe6, 0x88, 0x01, 0x43, 0x8e, 0xf8, 0x4e, + 0xa0, 0x1b, 0xd8, 0xd8, 0x7e, 0xc4, 0xce, 0x1f, 0x1e, 0x81, 0x4a, 0xb2, 0x7f, 0x43, 0x7b, + 0xf5, 0x19, 0x23, 0xe9, 0x46, 0xfd, 0x7a, 0x14, 0x25, 0xb9, 0xaa, 0x14, 0x78, 0x16, 0x38, + 0x55, 0xdb, 0x12, 0xea, 0xc3, 0xc3, 0xb0, 0x21, 0x37, 0x86, 0x9a, 0xe9, 0xd7, 0xd6, 0x53, + 0x3c, 0x4e, 0xf1, 0xee, 0xb8, 0xbd, 0xda, 0xc5, 0xaf, 0x80, 0x77, 0x8d, 0xf1, 0x7d, 0x7f, + 0x3f, 0xdc, 0x07, 0xdc, 0xc9, 0x29, 0xc1, 0x9d, 0x38, 0x23, 0x8d, 0x85, 0x3a, 0x53, 0xef, + 0xd0, 0xd5, 0xb8, 0x2e, 0xe6, 0x28, 0xae, 0x2a, 0x26, 0x8e, 0x9d, 0x64, 0x86, 0xb3, 0x0f, + 0xe9, 0xb0, 0xc1, 0x99, 0x56, 0x9b, 0x19, 0xe1, 0x9e, 0x26, 0xfa, 0x51, 0x60, 0xda, 0x04, + 0x2f, 0x4f, 0x7b, 0x68, 0xbf, 0xe5, 0x66, 0x11, 0x3b, 0xbf, 0xfd, 0x2d, 0x61, 0x92, 0x7b, + 0x19, 0x92, 0x94, 0x06, 0xde, 0xa3, 0xea, 0xc3, 0x25, 0x27, 0x17, 0x9b, 0x3b, 0xcc, 0xfe, + 0x7e, 0x28, 0x39, 0x0e, 0x0d, 0x2e, 0x64, 0xc0, 0x32, 0xa2, 0x6d, 0x3a, 0x69, 0x46, 0xf8, + 0x9a, 0x6f, 0x87, 0x9b, 0xbf, 0x7a, 0xd7, 0x02, 0x15, 0xa8, 0x3b, 0x17, 0x22, 0x87, 0xdc, + 0xf6, 0xb8, 0x9b, 0x5e, 0xd3, 0xdd, 0xf3, 0x61, 0x7a, 0x7b, 0x16, 0x0c, 0x5f, 0x6f, 0xf6, + 0x01, 0xe6, 0x90, 0xbe, 0x2d, 0x94, 0x55, 0xb0, 0x7d, 0x08, 0xf8, 0x67, 0x1f, 0x22, 0x57, + 0x75, 0xeb, 0xa3, 0x98, 0x9d, 0x3a, 0x0f, 0xce, 0x3f, 0x64, 0x83, 0x2d, 0x9c, 0x27, 0xbc, + 0x3e, 0xe4, 0xf4, 0x25, 0xd7, 0xc6, 0xba, 0xaa, 0xe9, 0xf0, 0xb1, 0xeb, 0xcc, 0x8f, 0xaf, + 0x10, 0x26, 0xa3, 0x2c, 0x6c, 0xfe, 0x2d, 0xd3, 0x4b, 0xfb, 0x0d, 0x4f, 0x01, 0x4a, 0x34, + 0x94, 0x7a, 0x5e, 0xca, 0xcf, 0x31, 0x8e, 0x4c, 0x18, 0x64, 0xeb, 0x8c, 0x05, 0x21, 0x5f, + 0xdb, 0xe4, 0x95, 0xe5, 0x93, 0xb6, 0x32, 0xd7, 0x09, 0x61, 0x4f, 0x26, 0x88, 0x93, 0x2d, + 0x16, 0xa3, 0xbf, 0x1c, 0x12, 0xb2, 0x6f, 0xfc, 0x03, 0x73, 0x46, 0xb8, 0xe1, 0x54, 0x45, + 0xbc, 0x34, 0x79, 0x14, 0xd9, 0x6d, 0xf4, 0xa0, 0x22, 0x06, 0x30, 0x45, 0x14, 0xe3, 0xe7, + 0x2a, 0xae, 0xa4, 0xc2, 0xab, 0x4f, 0x82, 0x02, 0x52, 0xe5, 0x28, 0x18, 0x9b, 0x1c, 0x71, + 0x66, 0x80, 0x0b, 0x01, 0xc8, 0x55, 0x4b, 0x9c, 0xe7, 0xa3, 0xad, 0x87, 0xd2, 0x23, 0x17, + 0x0f, 0x85, 0x8d, 0x79, 0x0e, 0x59, 0x24, 0xa1, 0xbb, 0x39, 0x88, 0x8f, 0xeb, 0x3c, 0xce, + 0x47, 0x98, 0x6d, 0xc2, 0xeb, 0xb8, 0xd0, 0x9c, 0x12, 0x63, 0x68, 0x91, 0xa0, 0x03, 0x63, + 0x64, 0xe9, 0x3a, 0x59, 0x44, 0x2d, 0xe5, 0xdf, 0x7d, 0xd9, 0xad, 0x60, 0x63, 0x7c, 0xd4, + 0xca, 0x94, 0x94, 0xcd, 0x2d, 0x1e, 0x9c, 0xa6, 0x4b, 0x09, 0xee, 0x87, 0x81, 0xfe, 0xa7, + 0x27, 0x27, 0xb0, 0xcf, 0xb7, 0x3e, 0x14, 0x62, 0x87, 0xba, 0x35, 0x75, 0xe0, 0xf6, 0x33, + 0x88, 0x26, 0x15, 0x5f, 0xab, 0x10, 0xb7, 0xd2, 0x98, 0x8c, 0xf0, 0x9e, 0x39, 0xd7, 0x73, + 0x9e, 0x22, 0x92, 0x56, 0x0a, 0x3b, 0x53, 0xa4, 0x18, 0xe8, 0x5f, 0x25, 0x5c, 0x12, 0xa0, + 0x54, 0xe3, 0xfb, 0x89, 0xad, 0x27, 0xef, 0xd4, 0x56, 0xf4, 0xfc, 0xb5, 0x27, 0xec, 0x99, + 0xe3, 0x4b, 0xbe, 0x33, 0xea, 0x9a, 0xdc, 0xa2, 0x3a, 0x1a, 0x85, 0xb8, 0xc0, 0x4e, 0xc0, + 0x0d, 0x44, 0x92, 0xe3, 0xe6, 0x45, 0x0e, 0xe9, 0xbd, 0x19, 0x91, 0xc9, 0x07, 0xf3, 0x55, + 0xe6, 0x83, 0xb2, 0x42, 0x2f, 0x2c, 0x53, 0xb0, 0x2c, 0xc1, 0x78, 0x2c, 0x80, 0xda, 0xfe, + 0x5c, 0x46, 0x2a, 0xc1, 0xaa, 0xa8, 0xd8, 0xd2, 0x5c, 0x3a, 0x6d, 0xdd, 0xe9, 0x0a, 0xf1, + 0xa4, 0x36, 0xec, 0x74, 0xf8, 0xee, 0x28, 0x73, 0xf2, 0x01, 0xc9, 0xf2, 0xcd, 0x2a, 0x7b, + 0x57, 0x6a, 0x9f, 0x8d, 0xeb, 0x74, 0xac, 0xd2, 0x49, 0x88, 0xa8, 0xeb, 0x44, 0x1b, 0xc9, + 0x2f, 0xb4, 0x1b, 0x62, 0x5c, 0x01, 0xa8, 0x46, 0x96, 0xf4, 0x7c, 0x46, 0x1b, 0x2d, 0xc2, + 0x34, 0x93, 0x3e, 0x72, 0x03, 0xbe, 0xeb, 0x61, 0x84, 0x65, 0x3d, 0x02, 0x12, 0x90, 0x3d, + 0xbb, 0x1d, 0xa4, 0x7e, 0xbd, 0x2e, 0x39, 0x4d, 0x6d, 0xe2, 0x5b, 0xf7, 0x36, 0x33, 0x85, + 0xe8, 0x45, 0xee, 0x42, 0x1f, 0x02, 0x44, 0x66, 0x5d, 0x69, 0x60, 0xaf, 0x9f, 0x63, 0xe0, + 0x47, 0xd9, 0xfe, 0xff, 0x3d, 0xa0, 0x83, 0xab, 0x96, 0x7e, 0xcd, 0xbd, 0x6f, 0x76, 0x7e, + 0x65, 0x3a, 0x22, 0x0d, 0x1f, 0xc4, 0x10, 0xbc, 0xab, 0x67, 0xd2, 0x27, 0x31, 0xa2, 0x6b, + 0x89, 0x75, 0xf5, 0xab, 0xaa, 0x32, 0x57, 0x64, 0x9d, 0xc5, 0xd7, 0x0f, 0x76, 0x5c, 0x20, + 0x9c, 0x51, 0xb4, 0x2e, 0x81, 0x00, 0xd9, 0x41, 0x6f, 0x33, 0xba, 0x0b, 0x14, 0x25, 0xd0, + 0xc4, 0x00, 0x63, 0x4e, 0x9b, 0xc8, 0x8b, 0x09, 0x93, 0xab, 0x8b, 0x61, 0x50, 0x91, 0x6b, + 0x59, 0x94, 0xbf, 0xb7, 0x70, 0xc1, 0xd1, 0x5d, 0xff, 0xfc, 0xae, 0xe7, 0x59, 0x22, 0x72, + 0x3b, 0x2f, 0x4d, 0xc2, 0x47, 0xdf, 0xaa, 0xd0, 0x38, 0xf4, 0x99, 0xe7, 0xed, 0x1c, 0x01, + 0xb0, 0x51, 0xdd, 0xf1, 0xbc, 0x45, 0xd7, 0x01, 0x74, 0x68, 0xb7, 0x50, 0x66, 0x8b, 0xcf, + 0xe5, 0x21, 0xa4, 0xb0, 0x06, 0x7c, 0x21, 0x33, 0xc4, 0xa3, 0xce, 0xe0, 0xd8, 0x4a, 0x09, + 0xd5, 0xb6, 0x0a, 0x60, 0xdc, 0x5c, 0x3e, 0x22, 0x3a, 0x94, 0x63, 0x5c, 0x30, 0x54, 0x78, + 0x31, 0xd2, 0x9b, 0x06, 0x43, 0x58, 0x85, 0x42, 0xdf, 0xab, 0x97, 0x9f, 0x98, 0x66, 0x70, + 0xc1, 0x43, 0x76, 0xda, 0xf7, 0x73, 0xe9, 0x5d, 0xfe, 0xb3, 0x09, 0x95, 0x45, 0xca, 0x9f, + 0xbf, 0x3b, 0xa3, 0x0c, 0x0e, 0xae, 0xb4, 0x32, 0x73, 0xdb, 0x13, 0x34, 0x88, 0x42, 0xaf, + 0x6e, 0xe8, 0x55, 0xbc, 0xb7, 0x8d, 0x64, 0xbb, 0xa0, 0xb2, 0x28, 0x3f, 0x17, 0xf0, 0x65, + 0x4f, 0x98, 0x3b, 0x9f, 0x20, 0xcd, 0xfb, 0x06, 0xeb, 0xe5, 0x95, 0x8d, 0x17, 0x57, 0xc1, + 0x09, 0x4b, 0xbf, 0x90, 0xbb, 0x04, 0xce, 0xd1, 0xd3, 0x31, 0xeb, 0xff, 0x20, 0xf9, 0xcb, + 0xaf, 0x76, 0x58, 0x6a, 0x5a, 0x84, 0xaf, 0xc6, 0xed, 0x2d, 0x1b, 0x67, 0xbd, 0xe1, 0x91, + 0xd3, 0xde, 0x07, 0x56, 0x24, 0xa5, 0xca, 0xbf, 0x23, 0x55, 0x66, 0xe1, 0x98, 0x80, 0xec, + 0xa7, 0x5f, 0x4a, 0x9d, 0x7a, 0x4e, 0x93, 0x14, 0x3e, 0x44, 0xb2, 0xbd, 0x33, 0x35, 0xef, + 0x35, 0x17, 0x7f, 0xc7, 0x91, 0xb7, 0x42, 0x39, 0x33, 0x51, 0x72, 0xee, 0x0f, 0x2c, 0xf5, + 0xc9, 0xed, 0xec, 0x16, 0x89, 0xd7, 0xa4, 0x36, 0x1f, 0xe5, 0xb9, 0xf5, 0xe8, 0xba, 0x60, + 0x85, 0xf4, 0x2c, 0x25, 0xe7, 0x7b, 0x76, 0x20, 0x5a, 0xea, 0x59, 0x86, 0xd1, 0x55, 0x41, + 0x20, 0x74, 0xfe, 0x7f, 0xda, 0xb2, 0xf3, 0xc2, 0x16, 0xb3, 0xd8, 0xa2, 0xf4, 0x45, 0x18, + 0x11, 0xfc, 0xc1, 0xc5, 0x32, 0xa5, 0x95, 0x1e, 0x25, 0xcc, 0xdd, 0xf4, 0xc2, 0xe6, 0x04, + 0xbd, 0x11, 0xee, 0x99, 0x91, 0x59, 0xde, 0x71, 0x7d, 0x9a, 0xac, 0x2c, 0xa3, 0x39, 0xe1, + 0x81, 0x8f, 0x0a, 0x9c, 0x24, 0x74, 0x2b, 0xb3, 0x94, 0x95, 0x72, 0xb9, 0xef, 0xf3, 0x7b, + 0xc7, 0xc4, 0x55, 0xd3, 0x2c, 0xf8, 0x6b, 0x31, 0x75, 0xbf, 0x2e, 0x36, 0xe0, + ]; + + #[test] + fn test_senc_v0() { + let inbuf: &mut std::io::Cursor<&&[u8]> = &mut std::io::Cursor::new(&ENCODED_SENC); + let parse_result = Senc::decode(inbuf); + assert!(parse_result.is_ok()); + let senc = parse_result.unwrap(); + println!("{senc:?}"); + } +} diff --git a/src/test/av1.rs b/src/test/av1.rs index 2cc2772..1a1d847 100644 --- a/src/test/av1.rs +++ b/src/test/av1.rs @@ -252,6 +252,7 @@ fn av1() { } } }, + senc: None, udta: None, }], udta: Some(Udta { @@ -309,6 +310,7 @@ fn av1() { saiz: vec![], saio: vec![], meta: None, + senc: None, udta: None, }] } diff --git a/src/test/bbb.rs b/src/test/bbb.rs index acb49f5..f5fd8a7 100644 --- a/src/test/bbb.rs +++ b/src/test/bbb.rs @@ -409,6 +409,7 @@ fn bbb() { saiz: vec![], saio: vec![], meta: None, + senc: None, udta: None, }], }, @@ -466,6 +467,7 @@ fn bbb() { saiz: vec![], saio: vec![], meta: None, + senc: None, udta: None, }], }, diff --git a/src/test/esds.rs b/src/test/esds.rs index 5153c1e..dc42e62 100644 --- a/src/test/esds.rs +++ b/src/test/esds.rs @@ -335,6 +335,7 @@ fn esds() { saiz: vec![], saio: vec![], meta: None, + senc: None, udta: None, }], }, diff --git a/src/test/flac.rs b/src/test/flac.rs index 8abcc88..84b97d6 100644 --- a/src/test/flac.rs +++ b/src/test/flac.rs @@ -372,6 +372,7 @@ fn flac() { } } }, + senc: None, udta: None }], udta: None diff --git a/src/test/h264.rs b/src/test/h264.rs index e726e36..57cf9d0 100644 --- a/src/test/h264.rs +++ b/src/test/h264.rs @@ -279,6 +279,7 @@ fn avcc_ext() { }, }, }, + senc: None, udta: None, }, Trak { @@ -380,6 +381,7 @@ fn avcc_ext() { }, }, }, + senc: None, udta: None, }, ], @@ -704,6 +706,97 @@ fn avc_encrypted_segment() { offsets: vec![3901], }], meta: None, + senc: Some(Senc { + data: vec![ + 0, 0, 0, 234, 0, 1, 0, 129, 0, 0, 46, 38, 0, 1, 0, 114, 0, 0, 2, 48, 0, 1, + 0, 114, 0, 0, 4, 81, 0, 1, 0, 114, 0, 0, 3, 238, 0, 1, 0, 114, 0, 0, 3, + 214, 0, 1, 0, 114, 0, 0, 4, 129, 0, 1, 0, 114, 0, 0, 3, 219, 0, 1, 0, 114, + 0, 0, 5, 64, 0, 1, 0, 114, 0, 0, 5, 71, 0, 1, 0, 114, 0, 0, 4, 203, 0, 1, + 0, 114, 0, 0, 5, 182, 0, 1, 0, 114, 0, 0, 5, 10, 0, 1, 0, 114, 0, 0, 5, 50, + 0, 1, 0, 114, 0, 0, 4, 113, 0, 1, 0, 114, 0, 0, 3, 105, 0, 1, 0, 114, 0, 0, + 3, 138, 0, 1, 0, 114, 0, 0, 3, 107, 0, 1, 0, 114, 0, 0, 2, 227, 0, 1, 0, + 114, 0, 0, 3, 85, 0, 1, 0, 114, 0, 0, 4, 6, 0, 1, 0, 114, 0, 0, 4, 105, 0, + 1, 0, 114, 0, 0, 4, 26, 0, 1, 0, 114, 0, 0, 5, 32, 0, 1, 0, 114, 0, 0, 6, + 24, 0, 1, 0, 114, 0, 0, 5, 193, 0, 1, 0, 114, 0, 0, 5, 73, 0, 1, 0, 114, 0, + 0, 4, 179, 0, 1, 0, 114, 0, 0, 4, 249, 0, 1, 0, 114, 0, 0, 4, 215, 0, 1, 0, + 114, 0, 0, 6, 79, 0, 1, 0, 114, 0, 0, 4, 137, 0, 1, 0, 114, 0, 0, 4, 131, + 0, 1, 0, 114, 0, 0, 4, 126, 0, 1, 0, 114, 0, 0, 4, 87, 0, 1, 0, 114, 0, 0, + 4, 164, 0, 1, 0, 114, 0, 0, 5, 75, 0, 1, 0, 114, 0, 0, 4, 96, 0, 1, 0, 114, + 0, 0, 4, 97, 0, 1, 0, 114, 0, 0, 4, 123, 0, 1, 0, 114, 0, 0, 3, 251, 0, 1, + 0, 114, 0, 0, 5, 51, 0, 1, 0, 114, 0, 0, 4, 4, 0, 1, 0, 114, 0, 0, 6, 91, + 0, 1, 0, 114, 0, 0, 3, 83, 0, 1, 0, 114, 0, 0, 4, 92, 0, 1, 0, 114, 0, 0, + 5, 47, 0, 1, 0, 114, 0, 0, 4, 185, 0, 1, 0, 114, 0, 0, 6, 63, 0, 1, 0, 114, + 0, 0, 4, 40, 0, 1, 0, 114, 0, 0, 5, 80, 0, 1, 0, 114, 0, 0, 5, 124, 0, 1, + 0, 114, 0, 0, 4, 236, 0, 1, 0, 114, 0, 0, 4, 73, 0, 1, 0, 114, 0, 0, 4, + 240, 0, 1, 0, 114, 0, 0, 5, 113, 0, 1, 0, 114, 0, 0, 3, 183, 0, 1, 0, 114, + 0, 0, 2, 229, 0, 1, 0, 114, 0, 0, 3, 64, 0, 1, 0, 114, 0, 0, 3, 77, 0, 1, + 0, 114, 0, 0, 3, 161, 0, 1, 0, 114, 0, 0, 3, 39, 0, 1, 0, 114, 0, 0, 4, 42, + 0, 1, 0, 114, 0, 0, 3, 229, 0, 1, 0, 114, 0, 0, 3, 180, 0, 1, 0, 114, 0, 0, + 4, 27, 0, 1, 0, 128, 0, 0, 17, 95, 0, 1, 0, 117, 0, 0, 4, 201, 0, 1, 0, + 119, 0, 0, 3, 140, 0, 1, 0, 120, 0, 0, 4, 205, 0, 1, 0, 121, 0, 0, 3, 150, + 0, 1, 0, 120, 0, 0, 3, 187, 0, 1, 0, 120, 0, 0, 3, 114, 0, 1, 0, 119, 0, 0, + 3, 208, 0, 1, 0, 120, 0, 0, 4, 251, 0, 1, 0, 120, 0, 0, 3, 137, 0, 1, 0, + 119, 0, 0, 3, 120, 0, 1, 0, 120, 0, 0, 4, 137, 0, 1, 0, 121, 0, 0, 3, 15, + 0, 1, 0, 115, 0, 0, 3, 125, 0, 1, 0, 120, 0, 0, 3, 122, 0, 1, 0, 119, 0, 0, + 3, 56, 0, 1, 0, 119, 0, 0, 5, 169, 0, 1, 0, 119, 0, 0, 3, 210, 0, 1, 0, + 120, 0, 0, 3, 195, 0, 1, 0, 120, 0, 0, 6, 31, 0, 1, 0, 119, 0, 0, 4, 222, + 0, 1, 0, 120, 0, 0, 4, 29, 0, 1, 0, 119, 0, 0, 4, 81, 0, 1, 0, 115, 0, 0, + 3, 101, 0, 1, 0, 114, 0, 0, 2, 137, 0, 1, 0, 114, 0, 0, 2, 169, 0, 1, 0, + 114, 0, 0, 3, 98, 0, 1, 0, 114, 0, 0, 2, 234, 0, 1, 0, 114, 0, 0, 2, 238, + 0, 1, 0, 114, 0, 0, 3, 211, 0, 1, 0, 114, 0, 0, 2, 232, 0, 1, 0, 114, 0, 0, + 4, 40, 0, 1, 0, 114, 0, 0, 2, 150, 0, 1, 0, 114, 0, 0, 2, 205, 0, 1, 0, + 114, 0, 0, 3, 35, 0, 1, 0, 114, 0, 0, 4, 6, 0, 1, 0, 114, 0, 0, 3, 148, 0, + 1, 0, 114, 0, 0, 3, 122, 0, 1, 0, 114, 0, 0, 3, 205, 0, 1, 0, 114, 0, 0, 4, + 215, 0, 1, 0, 114, 0, 0, 3, 46, 0, 1, 0, 114, 0, 0, 4, 228, 0, 1, 0, 114, + 0, 0, 4, 29, 0, 1, 0, 114, 0, 0, 4, 178, 0, 1, 0, 114, 0, 0, 4, 122, 0, 1, + 0, 114, 0, 0, 4, 138, 0, 1, 0, 114, 0, 0, 4, 103, 0, 1, 0, 114, 0, 0, 4, + 134, 0, 1, 0, 114, 0, 0, 5, 15, 0, 1, 0, 114, 0, 0, 3, 191, 0, 1, 0, 114, + 0, 0, 5, 72, 0, 1, 0, 114, 0, 0, 3, 204, 0, 1, 0, 129, 0, 0, 24, 108, 0, 1, + 0, 114, 0, 0, 2, 58, 0, 1, 0, 114, 0, 0, 3, 12, 0, 1, 0, 114, 0, 0, 3, 174, + 0, 1, 0, 114, 0, 0, 3, 209, 0, 1, 0, 114, 0, 0, 3, 36, 0, 1, 0, 114, 0, 0, + 3, 165, 0, 1, 0, 114, 0, 0, 3, 175, 0, 1, 0, 114, 0, 0, 3, 197, 0, 1, 0, + 114, 0, 0, 3, 54, 0, 1, 0, 127, 0, 0, 37, 174, 0, 1, 0, 114, 0, 0, 6, 13, + 0, 1, 0, 115, 0, 0, 6, 140, 0, 1, 0, 115, 0, 0, 6, 131, 0, 1, 0, 114, 0, 0, + 8, 221, 0, 1, 0, 114, 0, 0, 7, 66, 0, 1, 0, 114, 0, 0, 5, 119, 0, 1, 0, + 114, 0, 0, 5, 92, 0, 1, 0, 114, 0, 0, 5, 39, 0, 1, 0, 114, 0, 0, 4, 80, 0, + 1, 0, 114, 0, 0, 4, 103, 0, 1, 0, 114, 0, 0, 6, 84, 0, 1, 0, 114, 0, 0, 4, + 235, 0, 1, 0, 114, 0, 0, 4, 246, 0, 1, 0, 114, 0, 0, 5, 249, 0, 1, 0, 114, + 0, 0, 5, 73, 0, 1, 0, 114, 0, 0, 4, 160, 0, 1, 0, 114, 0, 0, 5, 71, 0, 1, + 0, 114, 0, 0, 4, 179, 0, 1, 0, 114, 0, 0, 6, 42, 0, 1, 0, 114, 0, 0, 5, + 212, 0, 1, 0, 114, 0, 0, 5, 103, 0, 1, 0, 114, 0, 0, 5, 208, 0, 1, 0, 114, + 0, 0, 6, 37, 0, 1, 0, 114, 0, 0, 6, 162, 0, 1, 0, 114, 0, 0, 5, 26, 0, 1, + 0, 114, 0, 0, 6, 163, 0, 1, 0, 114, 0, 0, 6, 75, 0, 1, 0, 114, 0, 0, 5, + 138, 0, 1, 0, 114, 0, 0, 6, 235, 0, 1, 0, 114, 0, 0, 5, 241, 0, 1, 0, 114, + 0, 0, 5, 30, 0, 1, 0, 114, 0, 0, 5, 216, 0, 1, 0, 114, 0, 0, 5, 116, 0, 1, + 0, 114, 0, 0, 4, 156, 0, 1, 0, 114, 0, 0, 6, 129, 0, 1, 0, 114, 0, 0, 3, + 238, 0, 1, 0, 114, 0, 0, 4, 34, 0, 1, 0, 114, 0, 0, 4, 226, 0, 1, 0, 114, + 0, 0, 5, 56, 0, 1, 0, 114, 0, 0, 5, 53, 0, 1, 0, 114, 0, 0, 6, 35, 0, 1, 0, + 114, 0, 0, 6, 190, 0, 1, 0, 114, 0, 0, 5, 20, 0, 1, 0, 114, 0, 0, 7, 73, 0, + 1, 0, 114, 0, 0, 8, 216, 0, 1, 0, 114, 0, 0, 5, 163, 0, 1, 0, 114, 0, 0, 5, + 74, 0, 1, 0, 114, 0, 0, 5, 115, 0, 1, 0, 114, 0, 0, 5, 125, 0, 1, 0, 114, + 0, 0, 6, 133, 0, 1, 0, 114, 0, 0, 5, 89, 0, 1, 0, 114, 0, 0, 5, 129, 0, 1, + 0, 114, 0, 0, 5, 62, 0, 1, 0, 114, 0, 0, 5, 64, 0, 1, 0, 114, 0, 0, 4, 252, + 0, 1, 0, 114, 0, 0, 5, 47, 0, 1, 0, 114, 0, 0, 5, 4, 0, 1, 0, 114, 0, 0, 5, + 27, 0, 1, 0, 114, 0, 0, 4, 250, 0, 1, 0, 114, 0, 0, 5, 86, 0, 1, 0, 114, 0, + 0, 4, 228, 0, 1, 0, 114, 0, 0, 5, 4, 0, 1, 0, 114, 0, 0, 4, 231, 0, 1, 0, + 114, 0, 0, 4, 242, 0, 1, 0, 114, 0, 0, 5, 29, 0, 1, 0, 114, 0, 0, 4, 233, + 0, 1, 0, 114, 0, 0, 4, 180, 0, 1, 0, 114, 0, 0, 4, 250, 0, 1, 0, 114, 0, 0, + 4, 15, 0, 1, 0, 114, 0, 0, 4, 110, 0, 1, 0, 114, 0, 0, 4, 222, 0, 1, 0, + 114, 0, 0, 4, 53, 0, 1, 0, 114, 0, 0, 5, 69, 0, 1, 0, 114, 0, 0, 5, 68, 0, + 1, 0, 114, 0, 0, 5, 69, 0, 1, 0, 114, 0, 0, 5, 49, 0, 1, 0, 114, 0, 0, 5, + 9, 0, 1, 0, 114, 0, 0, 4, 89, 0, 1, 0, 114, 0, 0, 4, 214, 0, 1, 0, 114, 0, + 0, 5, 90, 0, 1, 0, 114, 0, 0, 5, 152, 0, 1, 0, 114, 0, 0, 5, 175, 0, 1, 0, + 114, 0, 0, 5, 118, 0, 1, 0, 114, 0, 0, 5, 138, 0, 1, 0, 114, 0, 0, 5, 70, + 0, 1, 0, 114, 0, 0, 5, 125, 0, 1, 0, 114, 0, 0, 5, 6, 0, 1, 0, 114, 0, 0, + 4, 255, 0, 1, 0, 114, 0, 0, 4, 180, 0, 1, 0, 114, 0, 0, 5, 107, 0, 1, 0, + 114, 0, 0, 5, 228, 0, 1, 0, 114, 0, 0, 7, 226, 0, 1, 0, 114, 0, 0, 6, 20, + 0, 1, 0, 114, 0, 0, 5, 88, 0, 1, 0, 114, 0, 0, 5, 234, 0, 1, 0, 114, 0, 0, + 5, 84, 0, 1, 0, 114, 0, 0, 5, 15, 0, 1, 0, 114, 0, 0, 4, 217, 0, 1, 0, 114, + 0, 0, 6, 70, 0, 1, 0, 114, 0, 0, 5, 102, 0, 1, 0, 114, 0, 0, 4, 217, 0, 1, + 0, 114, 0, 0, 6, 13, 0, 1, 0, 114, 0, 0, 5, 161, 0, 1, 0, 114, 0, 0, 6, 3, + 0, 1, 0, 119, 0, 0, 6, 60, 0, 1, 0, 114, 0, 0, 3, 59 + ] + }), udta: None, }] } diff --git a/src/test/hevc.rs b/src/test/hevc.rs index d41255c..2172037 100644 --- a/src/test/hevc.rs +++ b/src/test/hevc.rs @@ -578,6 +578,7 @@ fn hevc() { } } }, + senc: None, udta: None, }], udta: Some(Udta { diff --git a/src/test/uncompressed.rs b/src/test/uncompressed.rs index b467fd4..e0a97d5 100644 --- a/src/test/uncompressed.rs +++ b/src/test/uncompressed.rs @@ -280,6 +280,7 @@ fn uncompressed() { } } }, + senc: None, udta: None, }] .into(), diff --git a/src/test/vp9.rs b/src/test/vp9.rs index 7bade25..940196d 100644 --- a/src/test/vp9.rs +++ b/src/test/vp9.rs @@ -305,6 +305,7 @@ fn vp9() { } } }, + senc: None, udta: None, }], udta: None