Beispiel #1
0
OMX_ERRORTYPE TorcOMXPort::EnablePort(bool Enable)
{
    if (!m_handle || !m_parent)
        return OMX_ErrorUndefined;

    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");

    if (portdefinition.bEnabled == OMX_FALSE && Enable)
    {
        LOG(VB_GENERAL, LOG_INFO, QString("%1: Enabling port %2").arg(m_parent->GetName()).arg(m_port));
        error = OMX_SendCommand(m_handle, OMX_CommandPortEnable, m_port, NULL);
        OMX_CHECK(error, m_parent->GetName(), "Failed to send command");
        return m_parent->WaitForResponse(OMX_CommandPortEnable, m_port, 1000);
    }
    else if (portdefinition.bEnabled == OMX_TRUE && !Enable)
    {
        LOG(VB_GENERAL, LOG_INFO, QString("%1: Disabling port %2").arg(m_parent->GetName()).arg(m_port));
        error = OMX_SendCommand(m_handle, OMX_CommandPortDisable, m_port, NULL);
        OMX_CHECK(error, m_parent->GetName(), "Failed to send command");
        return m_parent->WaitForResponse(OMX_CommandPortDisable, m_port, 1000);
    }

    return OMX_ErrorNone;
}
Beispiel #2
0
OMX_ERRORTYPE TorcOMXTunnel::Flush(void)
{
    if (!m_connected)
        return OMX_ErrorUndefined;

    QMutexLocker locker(m_lock);

    OMX_CHECK(m_source->FlushBuffer(OMX_DirOutput, m_sourceIndex, m_sourceDomain), m_source->GetName(), "Tunnel failed to flush source");
    OMX_CHECK(m_destination->FlushBuffer(OMX_DirInput, m_destinationIndex, m_destinationDomain), m_destination->GetName(), "Tunnel failed to flush destination");
    OMX_CHECK(m_source->WaitForResponse(OMX_CommandFlush, m_sourcePort, 200), m_source->GetName(), "Tunnel failed to flush source");
    OMX_CHECK(m_destination->WaitForResponse(OMX_CommandFlush, m_destinationPort, 200), m_destination->GetName(), "Tunnel failed to flush destination");

    return OMX_ErrorNone;
}
Beispiel #3
0
OMX_ERRORTYPE TorcOMXPort::Flush(void)
{
    if (!m_handle || !m_parent)
        return OMX_ErrorUndefined;

    QMutexLocker locker(m_lock);

    OMX_ERRORTYPE error = OMX_SendCommand(m_handle, OMX_CommandFlush, m_port, NULL);
    OMX_CHECK(error, m_parent->GetName(), "Failed to send command");

    return OMX_ErrorNone;
}
Beispiel #4
0
OMX_ERRORTYPE TorcOMXTunnel::Create(void)
{
    // TODO add error checking to EnablePort calls

    if (!m_source || !m_destination || !m_core)
        return OMX_ErrorUndefined;

    if (!m_source->GetHandle() || !m_destination->GetHandle() || !m_core->m_omxSetupTunnel)
        return OMX_ErrorUndefined;

    QMutexLocker locker(m_lock);
    m_connected = false;
    QString description = QString("%1:%2->%3:%4").arg(m_source->GetName()).arg(m_sourcePort).arg(m_destination->GetName()).arg(m_destinationPort);

    OMX_CHECK(m_core->m_omxSetupTunnel(m_source->GetHandle(), m_sourcePort, m_destination->GetHandle(), m_destinationPort), "", QString("Failed to create tunnel: " + description));

    LOG(VB_GENERAL, LOG_INFO, QString("Created tunnel: %1").arg(description));

    m_connected = true;
    return OMX_ErrorNone;
}
Beispiel #5
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;
}