static HRESULT ReadAAFFile(aafWChar* pFileName) { IAAFFile* pFile = NULL; IAAFHeader* pHeader = NULL; IAAFDictionary* pDictionary = NULL; IAAFCodecDef *pCodec = NULL; IAAFClassDef *pWaveClassDef=0,*pReturnedClassDef=0; IAAFDataDef *pDataDef = NULL; IEnumAAFCodecFlavours *pEnum = NULL; bool bFileOpen = false; aafBool testResult; aafUID_t codecID = kAAFCodecWAVE; aafUID_t readFlavour, checkFlavour = kAAFNilCodecFlavour; HRESULT hr = S_OK; try { // Open the AAF file checkResult(AAFFileOpenExistingRead(pFileName, 0, &pFile)); bFileOpen = true; // Get the AAF file header. checkResult(pFile->GetHeader(&pHeader)); checkResult(pHeader->GetDictionary(&pDictionary)); CAAFBuiltinDefs defs (pDictionary); checkResult(pDictionary->LookupCodecDef(codecID, &pCodec)); checkResult(pCodec->IsEssenceKindSupported (defs.ddkAAFMatte(), &testResult)); checkExpression (testResult == kAAFTrue, AAFRESULT_TEST_FAILED); checkResult(pCodec->IsEssenceKindSupported (defs.ddkAAFPicture(), &testResult)); checkExpression (testResult == kAAFFalse, AAFRESULT_TEST_FAILED); checkResult(pCodec->EnumCodecFlavours (&pEnum)); checkResult(pEnum->NextOne (&readFlavour)); checkExpression (memcmp(&readFlavour, &checkFlavour, sizeof(checkFlavour)) == 0, AAFRESULT_TEST_FAILED); checkResult(pCodec->AreThereFlavours (&testResult)); checkExpression (kAAFFalse == testResult, AAFRESULT_TEST_FAILED); aafUID_t uid = kAAFClassID_WAVEDescriptor; checkResult(pDictionary->LookupClassDef(uid, &pWaveClassDef)); checkResult(pCodec->GetFileDescriptorClass(&pReturnedClassDef)); // COM interface pointers pReturnedClassDef and pWaveClassDef should be // equal checkExpression(AreUnksSame(pReturnedClassDef,pWaveClassDef)==kAAFTrue, AAFRESULT_TEST_FAILED); } catch (HRESULT& rResult) { hr = rResult; } // Cleanup and return if (pReturnedClassDef) pReturnedClassDef->Release(); if (pWaveClassDef) pWaveClassDef->Release(); if (pEnum) pEnum->Release(); if (pDataDef) pDataDef->Release(); if (pCodec) pCodec->Release(); if (pDictionary) pDictionary->Release(); if (pHeader) pHeader->Release(); if (pFile) { // Close file if (bFileOpen) pFile->Close(); pFile->Release(); } return hr; }