mirror of
https://github.com/storytold/craft-libs.git
synced 2026-11-13 22:12:12 +00:00
craft-aaf: retain master names on unnamed clips
* craft-aaf: retain master names on unnamed clips
This commit is contained in:
1 parent
e947d5d799
commit
70fabd64dc
2 files changed
+28
-1
No files matched your search
@@ -386,8 +386,9 @@ impl R<'_> {
|
||||
|
||||
fn clip(&mut self, c: &Obj, rate: (i64, i64), kind: CKind, master_key: Option<String>) -> CItem {
|
||||
let len = units_to_ticks(len_of(c), rate.0, rate.1);
|
||||
let name = tagged_values(c, pid::COMPONENT_USER_COMMENTS).into_iter().find(|(k, _)| k == "Clip Name").map(|(_, v)| v).unwrap_or_default();
|
||||
let tagged_name = tagged_values(c, pid::COMPONENT_USER_COMMENTS).into_iter().find(|(k, _)| k == "Clip Name").map(|(_, v)| v);
|
||||
let (Some(id), Some(slot)) = (c.mob_id(pid::SOURCE_ID), c.u32(pid::SOURCE_MOB_SLOT_ID)) else { return CItem::Filler(len) };
|
||||
let name = tagged_name.or_else(|| self.mobs.get(&id).and_then(|mob| mob.string(pid::MOB_NAME))).unwrap_or_default();
|
||||
if id == [0; 32] {
|
||||
return CItem::Filler(len);
|
||||
}
|
||||
|
||||
@@ -473,6 +473,32 @@ fn audio_tracks_keep_their_names() {
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn unnamed_source_clip_uses_the_referenced_master_name() {
|
||||
let mut doc = crate::testdoc::sound_only(None);
|
||||
let name = doc.sources[0].name.clone();
|
||||
for item in &mut doc.compositions[0].tracks[0].items {
|
||||
if let CItem::Clip(clip) = item {
|
||||
clip.name = name.clone();
|
||||
}
|
||||
}
|
||||
let mut root = store::read(&written(&doc, false)).unwrap();
|
||||
let content = strong_mut(strong_mut(&mut root, pid::ROOT_HEADER), pid::CONTENT);
|
||||
let master = objs_mut(content, pid::MOBS).iter_mut().find(|m| m.class == cls::MASTER_MOB).unwrap();
|
||||
master.set(pid::MOB_NAME, Value::Data(store::utf16z("Master edit")));
|
||||
let bytes = store::write(&root, craft_cfb::Version::V4).unwrap();
|
||||
let back = read_clean(&bytes);
|
||||
let clip = back.compositions[0].tracks[0]
|
||||
.items
|
||||
.iter()
|
||||
.find_map(|item| match item {
|
||||
CItem::Clip(c) => Some(c),
|
||||
_ => None,
|
||||
})
|
||||
.unwrap();
|
||||
assert_eq!(clip.name, "Master edit");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn sound_source_offsets_use_audio_sample_rate_on_disk() {
|
||||
let doc = crate::testdoc::sound_only(None);
|
||||
|
||||
Reference in new issue
Block a user