void ComponentOp2::SetOperator(char op) { ComponentType inType = CT_NONE; if (op == '|' || op == '&') inType = CT_BOOL; else if (op == '=') inType = CT_NONE; else inType = CT_DOUBLE; if (inType == CT_NONE) { for (size_t i = 0; i < m_inputs.size(); i++) { if (m_inputs[i].comp == NULL) m_inputs[i].type = CT_NONE; else inType = m_inputs[i].type; m_inputs[i].dynamic = true; } for (size_t i = 0; i < m_inputs.size(); i++) if (m_inputs[i].dynamic) m_inputs[i].type = inType; } else { for (size_t i = 0; i < m_inputs.size(); i++) if (m_inputs[i].type != inType && inType != CT_NONE) { m_inputs[i].type = inType; m_inputs[i].dynamic = false; RemoveInput(m_inputs[i].comp); } } if (op == '|' || op == '&' || op == '<' || op == '>' || op == '=') { if (m_outputs[0].type != CT_BOOL) ClearOutputs(); m_outputs[0].type = CT_BOOL; } else { if (m_outputs[0].type != CT_DOUBLE) ClearOutputs(); m_outputs[0].type = CT_DOUBLE; } m_operator = op; }
COp::~COp() { ClearInputs(); ClearOutputs(); ClearInternals(); // rem: Hier m_uiIDMax_ nicht dekrementieren! }
COp & COp::operator = ( const COp &roOp ) { ClearInputs(); ClearOutputs(); InitInputs( roOp.m_uiCountIn ); // m_uiCountIn / m_ppoOpIn InitOutputs( roOp.m_uiCountOut ); // m_uiCountOut / m_pdValOut //for( unsigned int i=0; i<m_uiCountIn; ++i ) // m_poIn[i] = roOp.m_poIn[i]; //for( unsigned int i=0; i<m_uiCountOut; ++i ) // m_pdOut[i] = roOp.m_pdOut[i]; if( m_uiCountIn ) OP_MEM_COPY( m_poIn, roOp.m_poIn, m_uiCountIn * sizeof(CLink) ); if( m_uiCountOut ) OP_MEM_COPY( m_pdOut, roOp.m_pdOut, m_uiCountOut * sizeof(double) ); m_uiState = roOp.m_uiState; m_bIsNotValid = roOp.m_bIsNotValid; // m_uiID bleibt! m_uiFlags = roOp.m_uiFlags; #ifdef OP_USE_INTERNALS /* // rem: Kann nur in der spezifischen Klasse im Konstruktur initialisiert werden. if( m_uiCountInternalInt != roOp.m_uiCountInternalInt ) SetCountInternalInt( roOp.m_uiCountInternalInt ); if( m_uiCountInternalUInt != roOp.m_uiCountInternalUInt ) SetCountInternalUInt( roOp.m_uiCountInternalUInt ); if( m_uiCountInternalFlt != roOp.m_uiCountInternalFlt ) SetCountInternalFlt( roOp.m_uiCountInternalFlt ); OP_MEM_COPY( m_pptPtrInternalInt, roOp.m_pptPtrInternalInt, m_uiCountInternalInt * sizeof(int *) ); OP_MEM_COPY( m_pptPtrInternalUInt, roOp.m_pptPtrInternalUInt, m_uiCountInternalUInt * sizeof(unsigned int *) ); OP_MEM_COPY( m_pptPtrInternalFlt, roOp.m_pptPtrInternalFlt, m_uiCountInternalFlt * sizeof(double *) ); */ for( unsigned int i=0; i<m_uiCountInternalInt; ++i ) *(m_pptPtrInternalInt[i]) = *(roOp.m_pptPtrInternalInt[i]); for( unsigned int i=0; i<m_uiCountInternalUInt; ++i ) *(m_pptPtrInternalUInt[i]) = *(roOp.m_pptPtrInternalUInt[i]); for( unsigned int i=0; i<m_uiCountInternalFlt; ++i ) *(m_pptPtrInternalFlt[i]) = *(roOp.m_pptPtrInternalFlt[i]); #endif // OP_USE_INTERNALS #ifdef OP_USE_RUNTIME_INFO m_oStrNameInstance = roOp.m_oStrNameInstance; m_oArrStrNameIn = roOp.m_oArrStrNameIn; m_oArrStrNameOut = roOp.m_oArrStrNameOut; m_oArrStrInfoIn = roOp.m_oArrStrInfoIn; m_oArrStrInfoOut = roOp.m_oArrStrInfoOut; #ifdef OP_USE_ROUTINES m_oArrStrNameRoutine = roOp.m_oArrStrNameRoutine; m_oArrStrInfoRoutine = roOp.m_oArrStrInfoRoutine; #endif // OP_USE_ROUTINES #endif // OP_USE_RUNTIME_INFO #ifdef OP_USE_USER_DATA m_pvData = roOp.m_pvData; #endif // OP_USE_USER_DATA return *this; }
LRESULT CFilterComposer::OnDestroy( UINT, WPARAM, LPARAM, BOOL& ) { // Stop running (if we are currently processing video) m_videoRunner.StopProcessing(); // Free the loaded classifiers and outputsinks ClearActiveClassifiers(); ClearStandardClassifiers(); ClearCustomClassifiers(); ClearOutputs(); delete graphics; DeleteDC(hdcmem); DeleteObject(hbm); m_filterLibrary.DestroyWindow(); PostQuitMessage( 0 ); return 0; }