AAX_Result IPlugAAX::SetChunk(AAX_CTypeID chunkID, const AAX_SPlugInChunk * iChunk ) { TRACE; if (chunkID == GetUniqueID()) { ByteChunk IPlugChunk; IPlugChunk.PutBytes(iChunk->fData, iChunk->fSize); int pos = 0; //GetIPlugVerFromChunk(&IPlugChunk, &pos); pos = UnserializeState(&IPlugChunk, pos); for (int i = 0; i< NParams(); i++) { SetParameterNormalizedValue(mParamIDs.Get(i)->Get(), GetParam(i)->GetNormalized() ); } RedrawParamControls(); //TODO: what about icontrols not linked to params how do they get redrawn - setdirty via UnserializeState()? mNumPlugInChanges++; // necessary in order to cause CompareActiveChunk() to get called again and turn off the compare light return AAX_SUCCESS; } return AAX_ERROR_INVALID_CHUNK_ID; }
ComponentResult IPlugProcess::SetChunk(OSType chunkID, SFicPlugInChunk *chunk) { TRACE; if (chunkID == mPluginID) { int dataSize = chunk->fSize - sizeof(SFicPlugInChunkHeader); ByteChunk IPlugChunk; IPlugChunk.PutBytes(chunk->fData, dataSize); mPlug->UnserializeState(&IPlugChunk, 0); for (int i = 0; i< mPlug->NParams(); i++) { IParam *p = mPlug->GetParam(i); int idx = i+kPTParamIdxOffset; switch (p->Type()) { case IParam::kTypeDouble: { CPluginControl_Continuous *control = dynamic_cast<CPluginControl_Continuous*>(GetControl(idx)); SetControlValue(idx, control->ConvertContinuousToControl( p->Value() )); break; } case IParam::kTypeInt: case IParam::kTypeEnum: case IParam::kTypeBool: { CPluginControl_Discrete *control = dynamic_cast<CPluginControl_Discrete*>(GetControl(idx)); SetControlValue(idx, control->ConvertDiscreteToControl( p->Int() )); break; } default: break; } } fNumPlugInChanges++; return noErr; } return kChunkRangeErr; }