//**************** // GetMobKind() // AAFRESULT STDMETHODCALLTYPE ImplAAFSourceMob::GetMobKind (aafMobKind_t *pMobKind) { ImplAAFEssenceDescriptor *edesc = NULL; if(pMobKind == NULL) return(AAFRESULT_NULL_PARAM); XPROTECT() { CHECK(GetEssenceDescriptor (&edesc)); if(edesc != NULL) { CHECK(edesc->GetOwningMobKind(pMobKind)); edesc->ReleaseReference(); edesc = 0; } else *pMobKind = kAAFAllMob; } XEXCEPT { if(edesc != NULL) edesc->ReleaseReference(); edesc = 0; } XEND; return AAFRESULT_SUCCESS; }
ImplAAFSourceMob::~ImplAAFSourceMob () { ImplAAFEssenceDescriptor *essenceDesc = _essenceDesc.clearValue(); if (essenceDesc) { essenceDesc->ReleaseReference(); essenceDesc = 0; } }
//**************** // SetEssenceDescriptor() // AAFRESULT STDMETHODCALLTYPE ImplAAFSourceMob::SetEssenceDescriptor (ImplAAFEssenceDescriptor *pEdes) { if (pEdes == NULL) return AAFRESULT_NULL_PARAM; if (pEdes->attached()) return AAFRESULT_OBJECT_ALREADY_ATTACHED; ImplAAFEssenceDescriptor *pOldEdes = _essenceDesc.setValue(pEdes); if (pOldEdes) pOldEdes->ReleaseReference(); if (pEdes) pEdes->AcquireReference(); return AAFRESULT_SUCCESS; }
AAFRESULT STDMETHODCALLTYPE ImplAAFEssenceData::GetFileMob (ImplAAFSourceMob ** ppFileMob) { AAFRESULT result = AAFRESULT_SUCCESS; ImplAAFMob *pMob = NULL; ImplAAFSourceMob *pSourceMob = NULL; ImplAAFEssenceDescriptor *pEssenceDescriptor = NULL; ImplAAFHeader *pHeader = NULL; aafMobID_t mobID; if(NULL == ppFileMob) return(AAFRESULT_NULL_PARAM); XPROTECT() { CHECK(GetFileMobID(&mobID)); // Does a mob with the ID already exist? If not, return error. // NOTE: Will return AAFRESULT_OBJECT_NOT_PERSISTENT if this object has // not been appended to to the file. CHECK(MyHeadObject(&pHeader)); CHECK(pHeader->LookupMob(mobID, &pMob)); // This should be a valid file mob which is a file mob. pSourceMob = dynamic_cast<ImplAAFSourceMob *>(pMob); if (NULL == pSourceMob) RAISE(AAFRESULT_NOT_FILEMOB); // Does the source mob contain a file descriptor? CHECK(pSourceMob->GetEssenceDescriptor(&pEssenceDescriptor)); if (dynamic_cast<ImplAAFFileDescriptor *>(pEssenceDescriptor)) { (*ppFileMob) = pSourceMob; pSourceMob->AcquireReference(); } } /* XPROTECT */ XEXCEPT { // save the error code. result = (XCODE()); NO_PROPAGATE(); } XEND; // cleanup // Note: pMob and pSourceMob are temp and should not be released. if (pEssenceDescriptor) { pEssenceDescriptor->ReleaseReference(); pEssenceDescriptor = NULL; } if (pMob) { pMob->ReleaseReference(); pMob = NULL; } if (pHeader) { pHeader->ReleaseReference(); pHeader = NULL; } return(result); }
AAFRESULT STDMETHODCALLTYPE ImplAAFEssenceData::SetFileMob (ImplAAFSourceMob * pFileMob) { AAFRESULT result = AAFRESULT_SUCCESS; ImplAAFMob *pMob = NULL; ImplAAFSourceMob *pSourceMob = NULL; ImplAAFEssenceDescriptor *pEssenceDescriptor = NULL; ImplAAFFileDescriptor *pFileDescriptor = NULL; ImplAAFHeader *pHeader = NULL; aafMobID_t mobID; if(NULL == pFileMob) return(AAFRESULT_NULL_PARAM); XPROTECT() { CHECK(pFileMob->GetMobID(&mobID)); // move to ImplAAFContentStorage::AppendEssenceData(). // Does a mob with the ID already exist? If not, return error CHECK(pFileMob->MyHeadObject(&pHeader)); CHECK(pHeader->LookupMob(mobID, &pMob)); // Make sure the mob is a valid File source mob??? pSourceMob = dynamic_cast<ImplAAFSourceMob *>(pMob); if (NULL == pSourceMob) RAISE(AAFRESULT_INVALID_FILE_MOB); // Must result = pSourceMob->GetEssenceDescriptor(&pEssenceDescriptor); if (AAFRESULT_SUCCESS != result) RAISE(AAFRESULT_INVALID_FILE_MOB); pFileDescriptor = dynamic_cast<ImplAAFFileDescriptor *>(pEssenceDescriptor); if (NULL == pFileDescriptor) RAISE(AAFRESULT_INVALID_FILE_MOB); // The mob id refers to a valid file source mob so we can save // the id. _fileMobID = mobID; } /* XPROTECT */ XEXCEPT { // save the error code. result = (XCODE()); NO_PROPAGATE(); } XEND; // cleanup if (pEssenceDescriptor) { pEssenceDescriptor->ReleaseReference(); pEssenceDescriptor = NULL; } if (pMob) { pMob->ReleaseReference(); pMob = NULL; } if (pHeader) { pHeader->ReleaseReference(); pHeader = NULL; } return(result); }