OMX_ERRORTYPE TorcOMXTunnel::Destroy(void) { if (!m_source || !m_destination || !m_core) return OMX_ErrorUndefined; if (!m_source->GetHandle() || !m_destination->GetHandle() ) { return OMX_ErrorUndefined; } QMutexLocker locker(m_lock); m_source->EnablePort(OMX_DirOutput, m_sourceIndex, false, m_sourceDomain); m_destination->EnablePort(OMX_DirInput, m_destinationIndex, false, m_destinationDomain); OMX_ERRORTYPE error = m_core->m_omxSetupTunnel(m_source->GetHandle(), m_sourcePort, NULL, 0); if (OMX_ErrorNone != error) OMX_ERROR(error, m_source->GetName(), "Failed to destroy tunnel input"); error = m_core->m_omxSetupTunnel(m_destination->GetHandle(), m_destinationPort, NULL, 0); if (OMX_ErrorNone != error) OMX_ERROR(error, m_destination->GetName(), "Failed to destroy tunnel output"); m_connected = false; return OMX_ErrorNone; }
OMX_ERRORTYPE TorcOMXPort::CreateBuffers(void) { if (!m_handle) return OMX_ErrorUndefined; QMutexLocker locker(m_lock); OMX_PARAM_PORTDEFINITIONTYPE portdefinition; OMX_INITSTRUCTURE(portdefinition); portdefinition.nPortIndex = m_port; OMX_ERRORTYPE error = OMX_GetParameter(m_handle, OMX_IndexParamPortDefinition, &portdefinition); OMX_CHECK(error, m_parent->GetName(), "Failed to get port definition"); m_alignment = portdefinition.nBufferAlignment; for (OMX_U32 i = 0; i < portdefinition.nBufferCountActual; ++i) { OMX_BUFFERHEADERTYPE *buffer = NULL; error = OMX_AllocateBuffer(m_handle, &buffer, m_port, NULL, portdefinition.nBufferSize); if (OMX_ErrorNone != error) { OMX_ERROR(error, m_parent->GetName(), "Failed to allocate buffer"); return error; } buffer->pAppPrivate = (void*)this; buffer->nFilledLen = 0; buffer->nOffset = 0; buffer->nInputPortIndex = m_port; m_buffers.append(buffer); m_availableBuffers.enqueue(buffer); } LOG(VB_GENERAL, LOG_INFO, QString("%1: Created %2 %3byte buffers") .arg(m_parent->GetName()).arg(portdefinition.nBufferCountActual).arg(portdefinition.nBufferSize)); return OMX_ErrorNone; }