craft-aaf: retain master names on unnamed clips

* craft-aaf: retain master names on unnamed clips
This commit is contained in:
Dylan M. Taylor authored and GitHub committed 2026-11-12 07:30:59 -05:00
1 parent e947d5d799
commit 70fabd64dc
2 files changed
+28 -1

No files matched your search

+2 -1
View File
@@ -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);
}
+26
View File
@@ -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);