c2pa-rs

A fork of https://github.com/contentauth/c2pa-rs/
git clone git://archive.git.mtrnord.blog/mtrnords-photography-manager/c2pa-rs.git
Log | Files | Refs | README

commit 61905cf313eb0d00e3f6779bafce99dd202ba8ba
parent a09b013e805ccff785c99410ae0aa2a0cdb26dce
Author: mauricefisher64 <92736594+mauricefisher64@users.noreply.github.com>
Date:   Tue,  9 Aug 2022 16:57:30 -0400

Fix box order for BMFF (#104)

* FIx box order for BMFF

* Updated video sample

* comment cleanup

* clippy fixes
Diffstat:
Msdk/src/asset_handlers/bmff_io.rs | 14+++++++++-----
Msdk/src/store.rs | 27+++++++++++++++++++--------
Msdk/tests/fixtures/video1.mp4 | 0
3 files changed, 28 insertions(+), 13 deletions(-)

diff --git a/sdk/src/asset_handlers/bmff_io.rs b/sdk/src/asset_handlers/bmff_io.rs @@ -904,6 +904,13 @@ impl AssetIO for BmffIO { &mut bmff_map, )?; + // get ftyp location + // start after ftyp + let ftyp_token = bmff_map.get("/ftyp").ok_or(Error::UnsupportedType)?; // todo check ftyps to make sure we supprt any special format requirements + let ftyp_info = &bmff_tree[ftyp_token[0]].data; + let ftyp_offset = ftyp_info.offset; + let ftyp_size = ftyp_info.size; + // get position to insert c2pa let (c2pa_start, c2pa_length) = if let Some(uuid_tokens) = bmff_map.get("/uuid") { let uuid_info = &bmff_tree[uuid_tokens[0]].data; @@ -919,13 +926,10 @@ impl AssetIO for BmffIO { if is_c2pa { (uuid_info.offset, Some(uuid_info.size)) } else { - (0, None) + ((ftyp_offset + ftyp_size), None) } } else { - // start after ftyp - let ftyp_token = bmff_map.get("/ftyp").ok_or(Error::UnsupportedType)?; // todo check ftyps to make sure we supprt any special format requirements - let ftyp_info = &bmff_tree[ftyp_token[0]].data; - ((ftyp_info.offset + ftyp_info.size), None) + ((ftyp_offset + ftyp_size), None) }; let mut new_c2pa_box: Vec<u8> = Vec::with_capacity(store_bytes.len() * 2); diff --git a/sdk/src/store.rs b/sdk/src/store.rs @@ -2820,18 +2820,29 @@ pub mod tests { } #[test] - #[cfg(feature = "bmff")] - fn test_bmff() { + #[cfg(feature = "file_io")] + fn test_bmff_jumbf_generation() { + // test adding to actual image let ap = fixture_path("video1.mp4"); - let mut report = DetailedStatusTracker::new(); - let store = Store::load_from_asset(&ap, true, &mut report).expect("load_from_asset"); + let temp_dir = tempdir().expect("temp dir"); + let op = temp_dir_path(&temp_dir, "video1.mp4"); - let errors = report_split_errors(report.get_log_mut()); + // Create claims store. + let mut store = Store::new(); - println!("Error report for {}: {:?}", ap.as_display(), errors); - assert!(errors.is_empty()); + // Create a new claim. + let claim1 = create_test_claim().unwrap(); - println!("store = {}", store); + let signer = temp_signer(); + + // Move the claim to claims list. + store.commit_claim(claim1).unwrap(); + store.save_to_asset(&ap, &signer, &op).unwrap(); + + let mut report = DetailedStatusTracker::new(); + + // can we read back in + let _new_store = Store::load_from_asset(&op, true, &mut report).unwrap(); } #[test] diff --git a/sdk/tests/fixtures/video1.mp4 b/sdk/tests/fixtures/video1.mp4 Binary files differ.