static HRESULT ReadAAFFile(aafWChar* pFileName) { IAAFFile* pFile = NULL; IAAFHeader* pHeader = NULL; IAAFDictionary* pDictionary = NULL; IEnumAAFOperationDefs *pEffectEnum = NULL; IEnumAAFOperationDefs *pDegradeEnum = NULL; IEnumAAFParameterDefs *pParmDefEnum = NULL; IAAFOperationDef *pOperationDef = NULL; IAAFParameterDef *pParmDef = NULL; IAAFDefObject* pDefObject = NULL; bool bFileOpen = false; IAAFDataDefSP pReadDataDef; aafBool readIsTimeWarp; aafInt32 checkNumInputs; aafUInt32 checkBypass; HRESULT hr = S_OK; wchar_t checkName[256]; aafUID_t checkCat; aafBool bResult = kAAFFalse; 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->GetOperationDefs(&pEffectEnum)); checkResult(pEffectEnum->NextOne (&pOperationDef)); checkResult(pOperationDef->GetDataDef(&pReadDataDef)); checkResult(pOperationDef->QueryInterface(IID_IAAFDefObject, (void **) &pDefObject)); checkResult(pDefObject->GetName (checkName, sizeof(checkName))); checkExpression(wcscmp(checkName, effectNames[0]) == 0, AAFRESULT_TEST_FAILED); checkResult(pDefObject->GetDescription (checkName, sizeof(checkName))); checkExpression(wcscmp(checkName, effectDesc[0]) == 0, AAFRESULT_TEST_FAILED); pDefObject->Release(); pDefObject = NULL; checkResult(pReadDataDef->IsDataDefOf(defs.ddkAAFPicture(), &bResult)); checkExpression(bResult == kAAFTrue, AAFRESULT_TEST_FAILED); checkResult(pOperationDef->IsTimeWarp (&readIsTimeWarp)); checkExpression(readIsTimeWarp == kAAFFalse, AAFRESULT_TEST_FAILED); checkResult(pOperationDef->GetCategory (&checkCat)); checkExpression(memcmp(&checkCat, &TEST_CATEGORY, sizeof(aafUID_t)) == 0, AAFRESULT_TEST_FAILED); checkResult(pOperationDef->GetBypass (&checkBypass)); checkExpression(checkBypass == TEST_BYPASS, AAFRESULT_TEST_FAILED); checkResult(pOperationDef->GetNumberInputs (&checkNumInputs)); checkExpression(checkNumInputs == TEST_NUM_INPUTS, AAFRESULT_TEST_FAILED); checkResult(pOperationDef->GetParameterDefs (&pParmDefEnum)); checkResult(pParmDefEnum->NextOne (&pParmDef)); checkResult(pParmDef->QueryInterface(IID_IAAFDefObject, (void **) &pDefObject)); checkResult(pDefObject->GetName (checkName, sizeof(checkName))); checkExpression(wcscmp(checkName, TEST_PARAM_NAME) == 0, AAFRESULT_TEST_FAILED); checkResult(pDefObject->GetDescription (checkName, sizeof(checkName))); checkExpression(wcscmp(checkName, TEST_PARAM_DESC) == 0, AAFRESULT_TEST_FAILED); pDefObject->Release(); pDefObject = NULL; checkResult(pOperationDef->GetDegradeToOperations (&pDegradeEnum)); pOperationDef->Release(); pOperationDef = NULL; // Check for prepended one first checkResult(pDegradeEnum->NextOne (&pOperationDef)); checkResult(pOperationDef->QueryInterface(IID_IAAFDefObject, (void **) &pDefObject)); checkResult(pDefObject->GetName (checkName, sizeof(checkName))); checkExpression(wcscmp(checkName, effectNames[2]) == 0, AAFRESULT_TEST_FAILED); checkResult(pDefObject->GetDescription (checkName, sizeof(checkName))); checkExpression(wcscmp(checkName, effectDesc[2]) == 0, AAFRESULT_TEST_FAILED); pDefObject->Release(); pDefObject = NULL; pOperationDef->Release(); pOperationDef = NULL; // Check for appended one second checkResult(pDegradeEnum->NextOne (&pOperationDef)); checkResult(pOperationDef->QueryInterface(IID_IAAFDefObject, (void **) &pDefObject)); checkResult(pDefObject->GetName (checkName, sizeof(checkName))); checkExpression(wcscmp(checkName, effectNames[1]) == 0, AAFRESULT_TEST_FAILED); checkResult(pDefObject->GetDescription (checkName, sizeof(checkName))); checkExpression(wcscmp(checkName, effectDesc[1]) == 0, AAFRESULT_TEST_FAILED); pDefObject->Release(); pDefObject = NULL; pOperationDef->Release(); pOperationDef = NULL; } catch (HRESULT& rResult) { hr = rResult; } // Cleanup and return if (pHeader) pHeader->Release(); if (pDictionary) pDictionary->Release(); if (pEffectEnum) pEffectEnum->Release(); if (pDegradeEnum) pDegradeEnum->Release(); if (pParmDefEnum) pParmDefEnum->Release(); if (pOperationDef) pOperationDef->Release(); if (pDefObject) pDefObject->Release(); if (pParmDef) pParmDef->Release(); if (pFile) { // Close file if (bFileOpen) pFile->Close(); pFile->Release(); } return hr; }
static HRESULT ReadAAFFile(aafWChar* pFileName) { IAAFFile* pFile = NULL; IAAFHeader* pHeader = NULL; IAAFDictionary* pDictionary = NULL; IEnumAAFOperationDefs *pOperationGroupEnum = NULL; IEnumAAFParameterDefs *pParmDefEnum = NULL; IAAFOperationDef *pOperationDef = NULL; IAAFParameterDef *pParmDef = NULL; IAAFParameter *pParameter = NULL; IAAFMetaDefinition* pMetaDefinition = NULL; IAAFSegment* pSeg = NULL; IAAFOperationGroup* pOperationGroup = NULL; IEnumAAFMobs *mobIter = NULL; IAAFMob* pMob = NULL; IEnumAAFMobSlots *slotIter = NULL; IAAFMobSlot* pSlot = NULL; IAAFFiller* pFill = NULL; IAAFSourceReference *pSourceRef = NULL; IEnumAAFControlPoints *pEnumCP = NULL; IAAFControlPoint *pControlPoint = NULL; IAAFVaryingValue *pVaryingValue = NULL; IAAFInterpolationDef *pInterpDef = NULL; IAAFTypeDef *pTypeDef = NULL; bool bFileOpen = false; aafBool readIsTimeWarp; aafUInt32 testNumSources, testNumParam; HRESULT hr = S_OK; aafNumSlots_t s; aafNumSlots_t numSlots; aafUInt32 readOverride; aafBool readValidTransition; aafRational_t testTime; aafRational_t sampleValue1 = kTestLevel1, sampleValue2 = kTestLevel2, testValue; aafRational_t checkTime1 = kTestTime1; aafRational_t checkTime2 = kTestTime2; aafEditHint_t checkEditHint; aafUID_t testInterpDef, checkInterpDef = kAAFTypeID_Rational; try { // Open the AAF file checkResult(AAFFileOpenExistingRead(pFileName, 0, &pFile)); bFileOpen = true; // Get the AAF file header. checkResult(pFile->GetHeader(&pHeader)); aafSearchCrit_t criteria; criteria.searchTag = kAAFNoSearch; checkResult(pHeader->GetMobs (&criteria, &mobIter)); checkResult(mobIter->NextOne (&pMob)); checkResult(pMob->GetSlots(&slotIter)); checkResult(pMob->CountSlots (&numSlots)); for(s = 0; s < numSlots; s++) { checkResult(slotIter->NextOne (&pSlot)); checkResult(pSlot->GetSegment (&pSeg)); checkResult(pSeg->QueryInterface (IID_IAAFOperationGroup, (void **)&pOperationGroup)); pSeg->Release(); pSeg = NULL; checkResult(pOperationGroup->CountSourceSegments(&testNumSources)); checkExpression(testNumSources == TEST_NUM_INPUTS, AAFRESULT_TEST_FAILED); checkResult(pOperationGroup->CountParameters(&testNumParam)); checkExpression(testNumSources == 1, AAFRESULT_TEST_FAILED); checkResult(pOperationGroup->IsATimeWarp (&readIsTimeWarp)); checkExpression(readIsTimeWarp == kAAFFalse, AAFRESULT_TEST_FAILED); checkResult(pOperationGroup->GetBypassOverride (&readOverride)); checkExpression(readOverride == 1, AAFRESULT_TEST_FAILED); checkResult(pOperationGroup->IsValidTranOperation (&readValidTransition)); checkExpression(readValidTransition == kAAFFalse, AAFRESULT_TEST_FAILED); /**/ checkResult(pOperationGroup->GetInputSegmentAt (0, &pSeg)); checkResult(pSeg->QueryInterface(IID_IAAFFiller, (void **) &pFill)); pFill->Release(); pFill = NULL; /**/ checkResult(pOperationGroup->LookupParameter (kTestParmID, &pParameter)); checkResult(pParameter->QueryInterface(IID_IAAFVaryingValue, (void **) &pVaryingValue)); /*** Check the VaryingValue methods **/ aafUInt32 testLen, bytesRead; checkResult(pVaryingValue->GetControlPoints(&pEnumCP)); checkResult(pEnumCP->NextOne(&pControlPoint)); checkResult(pControlPoint->GetValueBufLen (&testLen)); checkExpression(testLen == sizeof(sampleValue1), AAFRESULT_TEST_FAILED); checkResult(pControlPoint->GetValue (sizeof(sampleValue1), (aafDataBuffer_t)&testValue, &bytesRead)); checkExpression(testValue.numerator == sampleValue1.numerator, AAFRESULT_TEST_FAILED); checkExpression(testValue.denominator == sampleValue1.denominator, AAFRESULT_TEST_FAILED); checkExpression(bytesRead == sizeof(sampleValue1), AAFRESULT_TEST_FAILED); checkResult(pControlPoint->GetTime(&testTime)); checkExpression(testTime.numerator == checkTime1.numerator, AAFRESULT_TEST_FAILED); checkExpression(testTime.denominator == checkTime1.denominator, AAFRESULT_TEST_FAILED); checkResult(pControlPoint->GetEditHint(&checkEditHint)); checkExpression(checkEditHint == kAAFRelativeLeft, AAFRESULT_TEST_FAILED); checkResult(pControlPoint->GetTypeDefinition (&pTypeDef)); checkResult(pTypeDef->QueryInterface(IID_IAAFMetaDefinition, (void **) &pMetaDefinition)); checkResult(pMetaDefinition->GetAUID(&testInterpDef)); checkExpression(memcmp(&testInterpDef, &checkInterpDef, sizeof(aafUID_t)) == 0, AAFRESULT_TEST_FAILED); pControlPoint->Release(); pControlPoint = NULL; pTypeDef->Release(); pTypeDef = NULL; pMetaDefinition->Release(); pMetaDefinition = NULL; /**/ checkResult(pEnumCP->NextOne(&pControlPoint)); checkResult(pControlPoint->GetValueBufLen (&testLen)); checkExpression(testLen == sizeof(sampleValue2), AAFRESULT_TEST_FAILED); checkResult(pControlPoint->GetValue (sizeof(sampleValue2), (aafDataBuffer_t)&testValue, &bytesRead)); checkExpression(testValue.numerator == sampleValue2.numerator, AAFRESULT_TEST_FAILED); checkExpression(testValue.denominator == sampleValue2.denominator, AAFRESULT_TEST_FAILED); checkExpression(bytesRead == sizeof(sampleValue2), AAFRESULT_TEST_FAILED); checkResult(pControlPoint->GetTime(&testTime)); checkExpression(testTime.numerator == checkTime2.numerator, AAFRESULT_TEST_FAILED); checkExpression(testTime.denominator == checkTime2.denominator, AAFRESULT_TEST_FAILED); checkResult(pControlPoint->GetEditHint(&checkEditHint)); checkExpression(checkEditHint == kAAFProportional, AAFRESULT_TEST_FAILED); checkResult(pControlPoint->GetTypeDefinition (&pTypeDef)); checkResult(pTypeDef->QueryInterface(IID_IAAFMetaDefinition, (void **) &pMetaDefinition)); checkResult(pMetaDefinition->GetAUID(&testInterpDef)); checkExpression(memcmp(&testInterpDef, &checkInterpDef, sizeof(aafUID_t)) == 0, AAFRESULT_TEST_FAILED); pControlPoint->Release(); pControlPoint = NULL; pEnumCP->Release(); pEnumCP = NULL; pTypeDef->Release(); pTypeDef = NULL; pMetaDefinition->Release(); pMetaDefinition = NULL; /*****/ pVaryingValue->Release(); pVaryingValue = NULL; pParameter->Release(); pParameter = NULL; pSeg->Release(); pSeg = NULL; pOperationGroup->Release(); pOperationGroup = NULL; pSlot->Release(); pSlot = NULL; } slotIter->Release(); slotIter = NULL; pMob->Release(); pMob = NULL; } catch (HRESULT& rResult) { hr = rResult; } // Cleanup and return if (pFill) pFill->Release(); if(pInterpDef) pInterpDef->Release(); if(pVaryingValue) pVaryingValue->Release(); if (pSourceRef) pSourceRef->Release(); if (mobIter) mobIter->Release(); if (pSlot) pSlot->Release(); if (slotIter) slotIter->Release(); if (pMob) pMob->Release(); if (pHeader) pHeader->Release(); if (pSeg) pSeg->Release(); if (pControlPoint) pControlPoint->Release(); if(pEnumCP) pEnumCP->Release(); if (pOperationGroup) pOperationGroup->Release(); if (pDictionary) pDictionary->Release(); if (pOperationGroupEnum) pOperationGroupEnum->Release(); if (pParameter) pParameter->Release(); if (pParmDefEnum) pParmDefEnum->Release(); if (pOperationDef) pOperationDef->Release(); if (pMetaDefinition) pMetaDefinition->Release(); if (pParmDef) pParmDef->Release(); if (pTypeDef) pTypeDef->Release(); if (pFile) { // Close file if (bFileOpen) pFile->Close(); pFile->Release(); } return hr; }