From c26bdcab594d7dbdc7ccc9d5e583224af2bb6cf6 Mon Sep 17 00:00:00 2001 From: rolleifx <110799844+rolleifx@users.noreply.github.com> Date: Fri, 6 Jan 2023 10:19:47 +0800 Subject: [PATCH] fix "mdat size too large" (#80) * fix "mdat size too large" * fix clippy * Fix clippy::derive-partial-eq-without-eq --- src/mp4box/avc1.rs | 6 +++--- src/mp4box/co64.rs | 2 +- src/mp4box/ctts.rs | 4 ++-- src/mp4box/data.rs | 2 +- src/mp4box/dinf.rs | 6 +++--- src/mp4box/edts.rs | 2 +- src/mp4box/elst.rs | 4 ++-- src/mp4box/emsg.rs | 2 +- src/mp4box/ftyp.rs | 2 +- src/mp4box/hdlr.rs | 2 +- src/mp4box/hev1.rs | 4 ++-- src/mp4box/ilst.rs | 4 ++-- src/mp4box/mdhd.rs | 2 +- src/mp4box/mdia.rs | 2 +- src/mp4box/mehd.rs | 2 +- src/mp4box/meta.rs | 2 +- src/mp4box/mfhd.rs | 2 +- src/mp4box/minf.rs | 2 +- src/mp4box/mod.rs | 5 +++-- src/mp4box/moof.rs | 2 +- src/mp4box/moov.rs | 2 +- src/mp4box/mp4a.rs | 12 ++++++------ src/mp4box/mvex.rs | 2 +- src/mp4box/mvhd.rs | 2 +- src/mp4box/smhd.rs | 2 +- src/mp4box/stbl.rs | 2 +- src/mp4box/stco.rs | 2 +- src/mp4box/stsc.rs | 4 ++-- src/mp4box/stsd.rs | 2 +- src/mp4box/stss.rs | 2 +- src/mp4box/stsz.rs | 2 +- src/mp4box/stts.rs | 4 ++-- src/mp4box/tfhd.rs | 2 +- src/mp4box/tkhd.rs | 4 ++-- src/mp4box/traf.rs | 2 +- src/mp4box/trak.rs | 2 +- src/mp4box/trex.rs | 2 +- src/mp4box/trun.rs | 2 +- src/mp4box/tx3g.rs | 4 ++-- src/mp4box/udta.rs | 2 +- src/mp4box/vmhd.rs | 4 ++-- src/mp4box/vp09.rs | 2 +- src/mp4box/vpcc.rs | 2 +- src/track.rs | 2 +- src/types.rs | 32 ++++++++++++++++---------------- src/writer.rs | 13 +++++++++---- 46 files changed, 89 insertions(+), 83 deletions(-) diff --git a/src/mp4box/avc1.rs b/src/mp4box/avc1.rs index 81cf81a..0e6d727 100644 --- a/src/mp4box/avc1.rs +++ b/src/mp4box/avc1.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize)] pub struct Avc1Box { pub data_reference_index: u16, pub width: u16, @@ -153,7 +153,7 @@ impl WriteBox<&mut W> for Avc1Box { } } -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct AvcCBox { pub configuration_version: u8, pub avc_profile_indication: u8, @@ -262,7 +262,7 @@ impl WriteBox<&mut W> for AvcCBox { } } -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct NalUnit { pub bytes: Vec, } diff --git a/src/mp4box/co64.rs b/src/mp4box/co64.rs index 9ec80fe..a7ea68a 100644 --- a/src/mp4box/co64.rs +++ b/src/mp4box/co64.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct Co64Box { pub version: u8, pub flags: u32, diff --git a/src/mp4box/ctts.rs b/src/mp4box/ctts.rs index d27f31d..f0ed002 100644 --- a/src/mp4box/ctts.rs +++ b/src/mp4box/ctts.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct CttsBox { pub version: u8, pub flags: u32, @@ -23,7 +23,7 @@ impl CttsBox { } } -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct CttsEntry { pub sample_count: u32, pub sample_offset: i32, diff --git a/src/mp4box/data.rs b/src/mp4box/data.rs index ac254df..994dd9a 100644 --- a/src/mp4box/data.rs +++ b/src/mp4box/data.rs @@ -7,7 +7,7 @@ use serde::Serialize; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct DataBox { pub data: Vec, pub data_type: DataType, diff --git a/src/mp4box/dinf.rs b/src/mp4box/dinf.rs index 3025e38..3d9a95b 100644 --- a/src/mp4box/dinf.rs +++ b/src/mp4box/dinf.rs @@ -3,7 +3,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct DinfBox { dref: DrefBox, } @@ -84,7 +84,7 @@ impl WriteBox<&mut W> for DinfBox { } } -#[derive(Debug, Clone, PartialEq, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize)] pub struct DrefBox { pub version: u8, pub flags: u32, @@ -196,7 +196,7 @@ impl WriteBox<&mut W> for DrefBox { } } -#[derive(Debug, Clone, PartialEq, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize)] pub struct UrlBox { pub version: u8, pub flags: u32, diff --git a/src/mp4box/edts.rs b/src/mp4box/edts.rs index b8dea6f..2d55357 100644 --- a/src/mp4box/edts.rs +++ b/src/mp4box/edts.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::elst::ElstBox; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct EdtsBox { pub elst: Option, } diff --git a/src/mp4box/elst.rs b/src/mp4box/elst.rs index cf13d8c..1c48952 100644 --- a/src/mp4box/elst.rs +++ b/src/mp4box/elst.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct ElstBox { pub version: u8, pub flags: u32, @@ -13,7 +13,7 @@ pub struct ElstBox { pub entries: Vec, } -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct ElstEntry { pub segment_duration: u64, pub media_time: u64, diff --git a/src/mp4box/emsg.rs b/src/mp4box/emsg.rs index b81269f..1ada228 100644 --- a/src/mp4box/emsg.rs +++ b/src/mp4box/emsg.rs @@ -6,7 +6,7 @@ use serde::Serialize; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct EmsgBox { pub version: u8, pub flags: u32, diff --git a/src/mp4box/ftyp.rs b/src/mp4box/ftyp.rs index 4bbfb06..ba1358d 100644 --- a/src/mp4box/ftyp.rs +++ b/src/mp4box/ftyp.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct FtypBox { pub major_brand: FourCC, pub minor_version: u32, diff --git a/src/mp4box/hdlr.rs b/src/mp4box/hdlr.rs index f0e77ec..9fb0368 100644 --- a/src/mp4box/hdlr.rs +++ b/src/mp4box/hdlr.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct HdlrBox { pub version: u8, pub flags: u32, diff --git a/src/mp4box/hev1.rs b/src/mp4box/hev1.rs index 6e5c50f..b566aaa 100644 --- a/src/mp4box/hev1.rs +++ b/src/mp4box/hev1.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize)] pub struct Hev1Box { pub data_reference_index: u16, pub width: u16, @@ -153,7 +153,7 @@ impl WriteBox<&mut W> for Hev1Box { } } -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct HvcCBox { pub configuration_version: u8, } diff --git a/src/mp4box/ilst.rs b/src/mp4box/ilst.rs index bda3ee1..9609c33 100644 --- a/src/mp4box/ilst.rs +++ b/src/mp4box/ilst.rs @@ -8,7 +8,7 @@ use serde::Serialize; use crate::mp4box::data::DataBox; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct IlstBox { pub items: HashMap, } @@ -54,7 +54,7 @@ impl ReadBox<&mut R> for IlstBox { } } -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct IlstItemBox { pub data: DataBox, } diff --git a/src/mp4box/mdhd.rs b/src/mp4box/mdhd.rs index d5a3568..31c65a8 100644 --- a/src/mp4box/mdhd.rs +++ b/src/mp4box/mdhd.rs @@ -5,7 +5,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize)] pub struct MdhdBox { pub version: u8, pub flags: u32, diff --git a/src/mp4box/mdia.rs b/src/mp4box/mdia.rs index 5e84627..c77b767 100644 --- a/src/mp4box/mdia.rs +++ b/src/mp4box/mdia.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, SeekFrom, Write}; use crate::mp4box::*; use crate::mp4box::{hdlr::HdlrBox, mdhd::MdhdBox, minf::MinfBox}; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct MdiaBox { pub mdhd: MdhdBox, pub hdlr: HdlrBox, diff --git a/src/mp4box/mehd.rs b/src/mp4box/mehd.rs index 57de477..63c0246 100644 --- a/src/mp4box/mehd.rs +++ b/src/mp4box/mehd.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Serialize, Default)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Default)] pub struct MehdBox { pub version: u8, pub flags: u32, diff --git a/src/mp4box/meta.rs b/src/mp4box/meta.rs index bd48493..28ead47 100644 --- a/src/mp4box/meta.rs +++ b/src/mp4box/meta.rs @@ -5,7 +5,7 @@ use serde::Serialize; use crate::mp4box::ilst::IlstBox; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct MetaBox { #[serde(skip_serializing_if = "Option::is_none")] pub ilst: Option, diff --git a/src/mp4box/mfhd.rs b/src/mp4box/mfhd.rs index b3be936..7bc2f72 100644 --- a/src/mp4box/mfhd.rs +++ b/src/mp4box/mfhd.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize)] pub struct MfhdBox { pub version: u8, pub flags: u32, diff --git a/src/mp4box/minf.rs b/src/mp4box/minf.rs index a2cf2df..1551db8 100644 --- a/src/mp4box/minf.rs +++ b/src/mp4box/minf.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, SeekFrom, Write}; use crate::mp4box::*; use crate::mp4box::{dinf::DinfBox, smhd::SmhdBox, stbl::StblBox, vmhd::VmhdBox}; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct MinfBox { #[serde(skip_serializing_if = "Option::is_none")] pub vmhd: Option, diff --git a/src/mp4box/mod.rs b/src/mp4box/mod.rs index bb7ac8a..890b694 100644 --- a/src/mp4box/mod.rs +++ b/src/mp4box/mod.rs @@ -115,7 +115,7 @@ pub const HEADER_EXT_SIZE: u64 = 4; macro_rules! boxtype { ($( $name:ident => $value:expr ),*) => { - #[derive(Clone, Copy, PartialEq)] + #[derive(Clone, Copy, PartialEq, Eq)] pub enum BoxType { $( $name, )* UnknownBox(u32), @@ -194,7 +194,8 @@ boxtype! { NameBox => 0xa96e616d, DayBox => 0xa9646179, CovrBox => 0x636f7672, - DescBox => 0x64657363 + DescBox => 0x64657363, + WideBox => 0x77696465 } pub trait Mp4Box: Sized { diff --git a/src/mp4box/moof.rs b/src/mp4box/moof.rs index 51cfc05..b9ab1d4 100644 --- a/src/mp4box/moof.rs +++ b/src/mp4box/moof.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, SeekFrom, Write}; use crate::mp4box::*; use crate::mp4box::{mfhd::MfhdBox, traf::TrafBox}; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct MoofBox { pub mfhd: MfhdBox, diff --git a/src/mp4box/moov.rs b/src/mp4box/moov.rs index 881c0c4..22b6276 100644 --- a/src/mp4box/moov.rs +++ b/src/mp4box/moov.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, SeekFrom, Write}; use crate::mp4box::*; use crate::mp4box::{mvex::MvexBox, mvhd::MvhdBox, trak::TrakBox, udta::UdtaBox}; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct MoovBox { pub mvhd: MvhdBox, diff --git a/src/mp4box/mp4a.rs b/src/mp4box/mp4a.rs index 8e49e50..a7e0a95 100644 --- a/src/mp4box/mp4a.rs +++ b/src/mp4box/mp4a.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize)] pub struct Mp4aBox { pub data_reference_index: u16, pub channelcount: u16, @@ -134,7 +134,7 @@ impl WriteBox<&mut W> for Mp4aBox { } } -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct EsdsBox { pub version: u8, pub flags: u32, @@ -278,7 +278,7 @@ fn write_desc(writer: &mut W, tag: u8, size: u32) -> Result { Ok(1 + nbytes as u64) } -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct ESDescriptor { pub es_id: u16, @@ -362,7 +362,7 @@ impl WriteDesc<&mut W> for ESDescriptor { } } -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct DecoderConfigDescriptor { pub object_type_indication: u8, pub stream_type: u8, @@ -458,7 +458,7 @@ impl WriteDesc<&mut W> for DecoderConfigDescriptor { } } -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct DecoderSpecificDescriptor { pub profile: u8, pub freq_index: u8, @@ -550,7 +550,7 @@ impl WriteDesc<&mut W> for DecoderSpecificDescriptor { } } -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct SLConfigDescriptor {} impl SLConfigDescriptor { diff --git a/src/mp4box/mvex.rs b/src/mp4box/mvex.rs index 1a146ca..ec8c76f 100644 --- a/src/mp4box/mvex.rs +++ b/src/mp4box/mvex.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, SeekFrom, Write}; use crate::mp4box::*; use crate::mp4box::{mehd::MehdBox, trex::TrexBox}; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct MvexBox { pub mehd: Option, pub trex: TrexBox, diff --git a/src/mp4box/mvhd.rs b/src/mp4box/mvhd.rs index dced158..462a29b 100644 --- a/src/mp4box/mvhd.rs +++ b/src/mp4box/mvhd.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize)] pub struct MvhdBox { pub version: u8, pub flags: u32, diff --git a/src/mp4box/smhd.rs b/src/mp4box/smhd.rs index b6a22b5..cab7e4b 100644 --- a/src/mp4box/smhd.rs +++ b/src/mp4box/smhd.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize)] pub struct SmhdBox { pub version: u8, pub flags: u32, diff --git a/src/mp4box/stbl.rs b/src/mp4box/stbl.rs index 81fa2dd..e8b78b6 100644 --- a/src/mp4box/stbl.rs +++ b/src/mp4box/stbl.rs @@ -7,7 +7,7 @@ use crate::mp4box::{ stsz::StszBox, stts::SttsBox, }; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct StblBox { pub stsd: StsdBox, pub stts: SttsBox, diff --git a/src/mp4box/stco.rs b/src/mp4box/stco.rs index 0db577f..2f252f5 100644 --- a/src/mp4box/stco.rs +++ b/src/mp4box/stco.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct StcoBox { pub version: u8, pub flags: u32, diff --git a/src/mp4box/stsc.rs b/src/mp4box/stsc.rs index df8b54a..53d45c5 100644 --- a/src/mp4box/stsc.rs +++ b/src/mp4box/stsc.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct StscBox { pub version: u8, pub flags: u32, @@ -23,7 +23,7 @@ impl StscBox { } } -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct StscEntry { pub first_chunk: u32, pub samples_per_chunk: u32, diff --git a/src/mp4box/stsd.rs b/src/mp4box/stsd.rs index 64b2a07..8387bbb 100644 --- a/src/mp4box/stsd.rs +++ b/src/mp4box/stsd.rs @@ -6,7 +6,7 @@ use crate::mp4box::vp09::Vp09Box; use crate::mp4box::*; use crate::mp4box::{avc1::Avc1Box, hev1::Hev1Box, mp4a::Mp4aBox, tx3g::Tx3gBox}; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct StsdBox { pub version: u8, pub flags: u32, diff --git a/src/mp4box/stss.rs b/src/mp4box/stss.rs index 7236953..775131b 100644 --- a/src/mp4box/stss.rs +++ b/src/mp4box/stss.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct StssBox { pub version: u8, pub flags: u32, diff --git a/src/mp4box/stsz.rs b/src/mp4box/stsz.rs index 533ea4a..bd0e184 100644 --- a/src/mp4box/stsz.rs +++ b/src/mp4box/stsz.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct StszBox { pub version: u8, pub flags: u32, diff --git a/src/mp4box/stts.rs b/src/mp4box/stts.rs index 84a90a4..ea84692 100644 --- a/src/mp4box/stts.rs +++ b/src/mp4box/stts.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct SttsBox { pub version: u8, pub flags: u32, @@ -23,7 +23,7 @@ impl SttsBox { } } -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct SttsEntry { pub sample_count: u32, pub sample_delta: u32, diff --git a/src/mp4box/tfhd.rs b/src/mp4box/tfhd.rs index 68763af..ba017d2 100644 --- a/src/mp4box/tfhd.rs +++ b/src/mp4box/tfhd.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Serialize, Default)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Default)] pub struct TfhdBox { pub version: u8, pub flags: u32, diff --git a/src/mp4box/tkhd.rs b/src/mp4box/tkhd.rs index 6dd9086..d7bcfbe 100644 --- a/src/mp4box/tkhd.rs +++ b/src/mp4box/tkhd.rs @@ -10,7 +10,7 @@ pub enum TrackFlag { // TrackInPreview = 0x000004, } -#[derive(Debug, Clone, PartialEq, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize)] pub struct TkhdBox { pub version: u8, pub flags: u32, @@ -51,7 +51,7 @@ impl Default for TkhdBox { } } -#[derive(Debug, Clone, PartialEq, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize)] pub struct Matrix { pub a: i32, pub b: i32, diff --git a/src/mp4box/traf.rs b/src/mp4box/traf.rs index 6d2b963..a73532e 100644 --- a/src/mp4box/traf.rs +++ b/src/mp4box/traf.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, SeekFrom, Write}; use crate::mp4box::*; use crate::mp4box::{tfhd::TfhdBox, trun::TrunBox}; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct TrafBox { pub tfhd: TfhdBox, pub trun: Option, diff --git a/src/mp4box/trak.rs b/src/mp4box/trak.rs index 274d145..c1e1845 100644 --- a/src/mp4box/trak.rs +++ b/src/mp4box/trak.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, SeekFrom, Write}; use crate::mp4box::*; use crate::mp4box::{edts::EdtsBox, mdia::MdiaBox, tkhd::TkhdBox}; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct TrakBox { pub tkhd: TkhdBox, diff --git a/src/mp4box/trex.rs b/src/mp4box/trex.rs index ed671e7..2694fd6 100644 --- a/src/mp4box/trex.rs +++ b/src/mp4box/trex.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct TrexBox { pub version: u8, pub flags: u32, diff --git a/src/mp4box/trun.rs b/src/mp4box/trun.rs index 8a5c799..7a8278d 100644 --- a/src/mp4box/trun.rs +++ b/src/mp4box/trun.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct TrunBox { pub version: u8, pub flags: u32, diff --git a/src/mp4box/tx3g.rs b/src/mp4box/tx3g.rs index c44b6a3..d696315 100644 --- a/src/mp4box/tx3g.rs +++ b/src/mp4box/tx3g.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize)] pub struct Tx3gBox { pub data_reference_index: u16, pub display_flags: u32, @@ -15,7 +15,7 @@ pub struct Tx3gBox { pub style_record: [u8; 12], } -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct RgbaColor { pub red: u8, pub green: u8, diff --git a/src/mp4box/udta.rs b/src/mp4box/udta.rs index 0960915..de5dd9b 100644 --- a/src/mp4box/udta.rs +++ b/src/mp4box/udta.rs @@ -5,7 +5,7 @@ use serde::Serialize; use crate::mp4box::meta::MetaBox; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct UdtaBox { #[serde(skip_serializing_if = "Option::is_none")] pub meta: Option, diff --git a/src/mp4box/vmhd.rs b/src/mp4box/vmhd.rs index 9b067c3..31f24b2 100644 --- a/src/mp4box/vmhd.rs +++ b/src/mp4box/vmhd.rs @@ -4,7 +4,7 @@ use std::io::{Read, Seek, Write}; use crate::mp4box::*; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct VmhdBox { pub version: u8, pub flags: u32, @@ -12,7 +12,7 @@ pub struct VmhdBox { pub op_color: RgbColor, } -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct RgbColor { pub red: u16, pub green: u16, diff --git a/src/mp4box/vp09.rs b/src/mp4box/vp09.rs index 0b9fdad..2e5fe57 100644 --- a/src/mp4box/vp09.rs +++ b/src/mp4box/vp09.rs @@ -3,7 +3,7 @@ use crate::mp4box::*; use crate::Mp4Box; use serde::Serialize; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct Vp09Box { pub version: u8, pub flags: u32, diff --git a/src/mp4box/vpcc.rs b/src/mp4box/vpcc.rs index a1d883f..c1782b8 100644 --- a/src/mp4box/vpcc.rs +++ b/src/mp4box/vpcc.rs @@ -2,7 +2,7 @@ use crate::mp4box::*; use crate::Mp4Box; use serde::Serialize; -#[derive(Debug, Clone, PartialEq, Default, Serialize)] +#[derive(Debug, Clone, PartialEq, Eq, Default, Serialize)] pub struct VpccBox { pub version: u8, pub flags: u32, diff --git a/src/track.rs b/src/track.rs index 2427a9d..24ef4d3 100644 --- a/src/track.rs +++ b/src/track.rs @@ -13,7 +13,7 @@ use crate::mp4box::{ }; use crate::*; -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq, Eq)] pub struct TrackConfig { pub track_type: TrackType, pub timescale: u32, diff --git a/src/types.rs b/src/types.rs index 404c67c..667359a 100644 --- a/src/types.rs +++ b/src/types.rs @@ -9,7 +9,7 @@ use crate::*; pub use bytes::Bytes; pub use num_rational::Ratio; -#[derive(Debug, Clone, Copy, PartialEq, Serialize)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)] pub struct FixedPointU8(Ratio); impl FixedPointU8 { @@ -30,7 +30,7 @@ impl FixedPointU8 { } } -#[derive(Debug, Clone, Copy, PartialEq, Serialize)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)] pub struct FixedPointI8(Ratio); impl FixedPointI8 { @@ -51,7 +51,7 @@ impl FixedPointI8 { } } -#[derive(Debug, Clone, Copy, PartialEq, Serialize)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)] pub struct FixedPointU16(Ratio); impl FixedPointU16 { @@ -86,7 +86,7 @@ impl fmt::Display for BoxType { } } -#[derive(Default, PartialEq, Clone, Copy, Serialize)] +#[derive(Default, PartialEq, Eq, Clone, Copy, Serialize)] pub struct FourCC { pub value: [u8; 4], } @@ -165,7 +165,7 @@ const HANDLER_TYPE_AUDIO_FOURCC: [u8; 4] = [b's', b'o', b'u', b'n']; const HANDLER_TYPE_SUBTITLE: &str = "sbtl"; const HANDLER_TYPE_SUBTITLE_FOURCC: [u8; 4] = [b's', b'b', b't', b'l']; -#[derive(Debug, Clone, Copy, PartialEq)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum TrackType { Video, Audio, @@ -223,7 +223,7 @@ const MEDIA_TYPE_VP9: &str = "vp9"; const MEDIA_TYPE_AAC: &str = "aac"; const MEDIA_TYPE_TTXT: &str = "ttxt"; -#[derive(Debug, Clone, Copy, PartialEq)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum MediaType { H264, H265, @@ -277,7 +277,7 @@ impl From<&MediaType> for &str { } } -#[derive(Debug, PartialEq, Clone, Copy)] +#[derive(Debug, PartialEq, Eq, Clone, Copy)] pub enum AvcProfile { AvcConstrainedBaseline, // 66 with constraint set 1 AvcBaseline, // 66, @@ -316,7 +316,7 @@ impl fmt::Display for AvcProfile { } } -#[derive(Debug, PartialEq, Clone, Copy)] +#[derive(Debug, PartialEq, Eq, Clone, Copy)] pub enum AudioObjectType { AacMain = 1, // AAC Main Profile AacLowComplexity = 2, // AAC Low Complexity @@ -463,7 +463,7 @@ impl fmt::Display for AudioObjectType { } } -#[derive(Debug, PartialEq, Clone, Copy)] +#[derive(Debug, PartialEq, Eq, Clone, Copy)] pub enum SampleFreqIndex { Freq96000 = 0x0, Freq88200 = 0x1, @@ -522,7 +522,7 @@ impl SampleFreqIndex { } } -#[derive(Debug, PartialEq, Clone, Copy)] +#[derive(Debug, PartialEq, Eq, Clone, Copy)] pub enum ChannelConfig { Mono = 0x1, Stereo = 0x2, @@ -564,7 +564,7 @@ impl fmt::Display for ChannelConfig { } } -#[derive(Debug, PartialEq, Clone, Default)] +#[derive(Debug, PartialEq, Eq, Clone, Default)] pub struct AvcConfig { pub width: u16, pub height: u16, @@ -572,19 +572,19 @@ pub struct AvcConfig { pub pic_param_set: Vec, } -#[derive(Debug, PartialEq, Clone, Default)] +#[derive(Debug, PartialEq, Eq, Clone, Default)] pub struct HevcConfig { pub width: u16, pub height: u16, } -#[derive(Debug, PartialEq, Clone, Default)] +#[derive(Debug, PartialEq, Eq, Clone, Default)] pub struct Vp9Config { pub width: u16, pub height: u16, } -#[derive(Debug, PartialEq, Clone)] +#[derive(Debug, PartialEq, Eq, Clone)] pub struct AacConfig { pub bitrate: u32, pub profile: AudioObjectType, @@ -603,10 +603,10 @@ impl Default for AacConfig { } } -#[derive(Debug, PartialEq, Clone, Default)] +#[derive(Debug, PartialEq, Eq, Clone, Default)] pub struct TtxtConfig {} -#[derive(Debug, PartialEq, Clone)] +#[derive(Debug, PartialEq, Eq, Clone)] pub enum MediaConfig { AvcConfig(AvcConfig), HevcConfig(HevcConfig), diff --git a/src/writer.rs b/src/writer.rs index 2a45ade..3dec951 100644 --- a/src/writer.rs +++ b/src/writer.rs @@ -5,7 +5,7 @@ use crate::mp4box::*; use crate::track::Mp4TrackWriter; use crate::*; -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq, Eq)] pub struct Mp4Config { pub major_brand: FourCC, pub minor_version: u32, @@ -71,6 +71,7 @@ impl Mp4Writer { // TODO largesize let mdat_pos = writer.seek(SeekFrom::Current(0))?; BoxHeader::new(BoxType::MdatBox, HEADER_SIZE).write(&mut writer)?; + BoxHeader::new(BoxType::WideBox, HEADER_SIZE).write(&mut writer)?; let tracks = Vec::new(); let timescale = config.timescale; @@ -117,10 +118,14 @@ impl Mp4Writer { let mdat_end = self.writer.seek(SeekFrom::Current(0))?; let mdat_size = mdat_end - self.mdat_pos; if mdat_size > std::u32::MAX as u64 { - return Err(Error::InvalidData("mdat size too large")); + self.writer.seek(SeekFrom::Start(self.mdat_pos))?; + self.writer.write_u32::(1)?; + self.writer.seek(SeekFrom::Start(self.mdat_pos + 8))?; + self.writer.write_u64::(mdat_size)?; + } else { + self.writer.seek(SeekFrom::Start(self.mdat_pos))?; + self.writer.write_u32::(mdat_size as u32)?; } - self.writer.seek(SeekFrom::Start(self.mdat_pos))?; - self.writer.write_u32::(mdat_size as u32)?; self.writer.seek(SeekFrom::Start(mdat_end))?; Ok(()) }