mp4_atom/moov/trak/mdia/minf/
smhd.rs1use crate::*;
2
3#[derive(Debug, Clone, PartialEq, Eq, Default)]
4#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5pub struct Smhd {
6 pub balance: FixedPoint<i8>,
7}
8
9impl AtomExt for Smhd {
10 type Ext = ();
11
12 const KIND_EXT: FourCC = FourCC::new(b"smhd");
13
14 fn decode_body_ext<B: Buf>(buf: &mut B, _ext: ()) -> Result<Self> {
15 let balance = FixedPoint::decode(buf)?;
16 u16::decode(buf)?; Ok(Smhd { balance })
19 }
20
21 fn encode_body_ext<B: BufMut>(&self, buf: &mut B) -> Result<()> {
22 self.balance.encode(buf)?;
23 0u16.encode(buf)?; Ok(())
26 }
27}
28
29#[cfg(test)]
30mod tests {
31 use super::*;
32
33 #[test]
34 fn test_smhd() {
35 let expected = Smhd {
36 balance: FixedPoint::from(-1),
37 };
38 let mut buf = Vec::new();
39 expected.encode(&mut buf).unwrap();
40
41 let mut buf = buf.as_ref();
42 let decoded = Smhd::decode(&mut buf).unwrap();
43 assert_eq!(decoded, expected);
44 }
45}