GF_EXPORT GF_Err gf_isom_remove_meta_item(GF_ISOFile *file, Bool root_meta, u32 track_num, u32 item_id) { GF_ItemInfoEntryBox *iinf; u32 i, count; GF_MetaBox *meta = gf_isom_get_meta(file, root_meta, track_num); u32 item_num; if (!meta || !meta->item_infos || !meta->item_locations) return GF_BAD_PARAM; item_num = gf_isom_get_meta_item_by_id(file, root_meta, track_num, item_id); if (!item_num) return GF_BAD_PARAM; iinf = (GF_ItemInfoEntryBox *)gf_list_get(meta->item_infos->item_infos, item_num-1); gf_list_rem(meta->item_infos->item_infos, item_num-1); count = gf_list_count(meta->item_locations->location_entries); for (i=0; i<count; i++) { GF_ItemLocationEntry *iloc = (GF_ItemLocationEntry *)gf_list_get(meta->item_locations->location_entries, i); if (iloc->item_ID==iinf->item_ID) { /*FIXME: remove data ref...*/ if (iloc->data_reference_index) { } gf_list_rem(meta->item_locations->location_entries, i); iloc_entry_del(iloc); break; } } gf_isom_box_del((GF_Box *)iinf); return GF_OK; }
void iloc_del(GF_Box *s) { u32 i, item_count; GF_ItemLocationBox *ptr = (GF_ItemLocationBox *)s; if (ptr == NULL) return; item_count = gf_list_count(ptr->location_entries); for (i = 0; i < item_count; i++) { GF_ItemLocationEntry *location = (GF_ItemLocationEntry *)gf_list_get(ptr->location_entries, i); iloc_entry_del(location); } gf_list_del(ptr->location_entries); gf_free(ptr); }