예제 #1
0
PluginMetadata& PluginMetadata::operator =(const PluginMetadata& metadata)
{
	clear();
	memmove(this, &metadata, sizeof(PluginMetadata)- sizeof(metadata.theExports)- sizeof(metadata.theInterfaces));
	if(theInterfacesCount)
		if(allocateInterfaces(*this))
			for(unsigned int i = 0; i < theInterfacesCount; i++)
				theInterfaces [ i ] = metadata.theInterfaces [ i ];
		else
			theInterfacesCount = 0;
	
	if(theExports)
		if(allocateExports(*this))
			for(unsigned int i = 0; i < theExportsCount; i++)
				theExports [ i ] = metadata.theExports [ i ];
		else
			theExportsCount = 0;
	return *this;
}
ENS_API_EXPORT OMX_ERRORTYPE NmfMpc_ProcessingComponent::construct(void) {
    OMX_ERRORTYPE error;

    CM_REGISTER_STUBS_SKELS(ens_cpp);

    MEMORY_TRACE_ENTER2("NmfMpc_ProcessingComponent::construct (%s) @0x%08X", (const char*)mENSComponent.getName(), (unsigned int)&mENSComponent);

    traceMemoryStatus(); // output all available memory

	// trace stuff
	// create ExtraZone if needed
	error = mENSComponent.getTraceBuilder()->createExtraZone(mENSComponent.getNMFDomainHandle());
    if (error != OMX_ErrorNone) return error;

	setTraceInfo(mENSComponent.getSharedTraceInfoPtr(), mENSComponent.getPortCount()); // has to be done before NMF initialization

    error = instantiateLibraries();
    if (error != OMX_ErrorNone) return error;

    error = allocateInterfaces();
    if (error != OMX_ErrorNone) return error;

    for (OMX_U32 i = 0; i < mENSComponent.getPortCount(); i++) {
        ENS_Port * port = static_cast<ENS_Port *>(mENSComponent.getPort(i));
        if (port->useProprietaryCommunication() == OMX_FALSE && 
                port->isEnabled() == OMX_TRUE  &&
			port->getDomain() != OMX_PortDomainOther) {
			//Instantiate Nmf shared buffer components
            error = instantiateNmfSharedBuffers(port);
            if (error != OMX_ErrorNone) return error;
        }
    }

    error = instantiate();
    if (error != OMX_ErrorNone) return error;

    for (OMX_U32 i = 0; i < mENSComponent.getPortCount(); i++) {
        if (mENSComponent.getPort(i)->useProprietaryCommunication() == OMX_FALSE &&
                mENSComponent.getPort(i)->isEnabled() == OMX_TRUE &&
				mENSComponent.getPort(i)->getDomain() != OMX_PortDomainOther) {
            //Start Nmf shared buffer components
            error = startNmfSharedBuf(i);
            if (error != OMX_ErrorNone) return error;
        }
    }

    error = startLibraries();
    if (error != OMX_ErrorNone) return error;

    error = start();
    if (error != OMX_ErrorNone) return error;

    error = configure();
    if (error != OMX_ErrorNone) return error;

    // Initialize NMF component state machine (ports + component)
 	fsmInit_t initFsm = {0,0,0,0};
	
    initFsm.portsDisabled = 0;
    for (OMX_U32 i =0 ; i< mENSComponent.getPortCount(); i++) {
        if(mENSComponent.getPort(i)->isEnabled() == OMX_FALSE){
            initFsm.portsDisabled |= 1 << i;
        }
    }

	initFsm.portsTunneled = 0;
	for (OMX_U32 i =0 ; i< mENSComponent.getPortCount(); i++) {
        if(mENSComponent.getPort(i)->getTunneledComponent()){
			initFsm.portsTunneled |= 1 << i;
        }
    }

	initFsm.traceInfoAddr = (TraceInfo_t *)getDspAddr();
   
	fsmInit(&initFsm);

    MEMORY_TRACE_LEAVE2("NmfMpc_ProcessingComponent::construct (%s) @0x%08X", (const char*)mENSComponent.getName(), (unsigned int)&mENSComponent);

    return OMX_ErrorNone;
}