Пример #1
0
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;
}
Пример #2
0
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;
}