scuffle_mp4/boxes/types/
btrt.rs1use std::io;
2
3use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt};
4use bytes::Bytes;
5
6use crate::boxes::header::BoxHeader;
7use crate::boxes::traits::BoxType;
8
9#[derive(Debug, Clone, PartialEq)]
10pub struct Btrt {
13 pub header: BoxHeader,
14 pub buffer_size_db: u32,
15 pub max_bitrate: u32,
16 pub avg_bitrate: u32,
17}
18
19impl BoxType for Btrt {
20 const NAME: [u8; 4] = *b"btrt";
21
22 fn demux(header: BoxHeader, data: Bytes) -> io::Result<Self> {
23 let mut reader = io::Cursor::new(data);
24
25 let buffer_size_db = reader.read_u32::<BigEndian>()?;
26 let max_bitrate = reader.read_u32::<BigEndian>()?;
27 let avg_bitrate = reader.read_u32::<BigEndian>()?;
28
29 Ok(Self {
30 header,
31
32 buffer_size_db,
33 max_bitrate,
34 avg_bitrate,
35 })
36 }
37
38 fn primitive_size(&self) -> u64 {
39 4 + 4 + 4 }
43
44 fn primitive_mux<T: io::Write>(&self, writer: &mut T) -> io::Result<()> {
45 writer.write_u32::<BigEndian>(self.buffer_size_db)?;
46 writer.write_u32::<BigEndian>(self.max_bitrate)?;
47 writer.write_u32::<BigEndian>(self.avg_bitrate)?;
48
49 Ok(())
50 }
51}