void AvidInfo::GetPhysicalPackageInfo(HeaderMetadata *header_metadata) { vector<GenericPackage*> packages = header_metadata->getPreface()->getContentStorage()->getPackages(); size_t i; for (i = 0; i < packages.size(); i++) { SourcePackage *sp = dynamic_cast<SourcePackage*>(packages[i]); if (!sp || !sp->haveDescriptor()) continue; GenericDescriptor *descriptor = sp->getDescriptorLight(); if (!descriptor || !mxf_set_is_subclass_of(descriptor->getCMetadataSet(), &MXF_SET_K(PhysicalDescriptor))) continue; have_phys_package = true; if (mxf_set_is_subclass_of(descriptor->getCMetadataSet(), &MXF_SET_K(TapeDescriptor))) phys_package_type = TAPE_PACKAGE_TYPE; else if (mxf_set_is_subclass_of(descriptor->getCMetadataSet(), &MXF_SET_K(ImportDescriptor))) phys_package_type = IMPORT_PACKAGE_TYPE; else if (mxf_set_is_subclass_of(descriptor->getCMetadataSet(), &MXF_SET_K(RecordingDescriptor))) phys_package_type = RECORDING_PACKAGE_TYPE; else phys_package_type = UNKNOWN_PACKAGE_TYPE; phys_package_uid = sp->getPackageUID(); if (sp->haveName()) phys_package_name = sp->getName(); if (descriptor->haveLocators()) { vector<Locator*> locators = descriptor->getLocators(); size_t j; for (j = 0; j < locators.size(); j++) { NetworkLocator *network_locator = dynamic_cast<NetworkLocator*>(locators[j]); if (network_locator) { phys_package_locator = network_locator->getURLString(); break; } } } } }