Dönüşüm Düğümleri Oluşturma

Dönüştürme düğümü, kod çözücü veya kodlayıcı gibi bir Media Foundation dönüşümünü (MFT) temsil eder. Dönüştürme düğümünü başlatmanın birkaç farklı yolu vardır:

  • Bir işaretçiden MFT'ye.
  • MFT için bir CLSID'den.
  • MFT için bir işaretçiden etkinleştirme nesnesine.

Topolojiyi korumalı medya yolunun (PMP) içine yükleyecekseniz, MFT'nin korumalı işlem içinde oluşturulabilmesi için CLSID veya etkinleştirme nesnesini kullanmanız gerekir. İlk yaklaşım (MFT işaretçisi kullanılarak) PMP ile çalışmaz.

MFT'den Dönüşüm Düğümü Oluşturma

MFT'den bir dönüşüm düğümü oluşturmak için aşağıdakileri yapın:

  1. MFT'nin bir örneğini oluşturun ve MFT'nin IMFTransform arabirimine bir işaretçi alın.
  2. Dönüştürme düğümünü oluşturmak için MF_TOPOLOGY_TRANSFORM_NODE bayrağıyla MFCreateTopologyNode çağırın.
  3. IMFTopologyNode::SetObject çağırın ve IMFTransform işaretçisini geçirin.
  4. Düğümü topolojiye eklemek için IMFTopology::AddNode'ı çağırın.

Aşağıdaki örnek, MFT'den bir dönüştürme düğümü oluşturur ve başlatır.

HRESULT AddTransformNode(
    IMFTopology *pTopology,     // Topology.
    IMFTransform *pMFT,         // MFT.
    IMFTopologyNode **ppNode    // Receives the node pointer.
    )
{
    *ppNode = NULL;

    IMFTopologyNode *pNode = NULL;
    
    // Create the node.
    HRESULT hr = MFCreateTopologyNode(MF_TOPOLOGY_TRANSFORM_NODE, &pNode);

    // Set the object pointer.
    if (SUCCEEDED(hr))
    {
        hr = pNode->SetObject(pMFT);
    }

    // Add the node to the topology.
    if (SUCCEEDED(hr))
    {
        hr = pTopology->AddNode(pNode);
    }

    // Return the pointer to the caller.
    if (SUCCEEDED(hr))
    {
        *ppNode = pNode;
        (*ppNode)->AddRef();
    }

    SafeRelease(&pNode);
    return hr;
}

CLSID'den Dönüşüm Düğümü Oluşturma

CLSID'den bir dönüşüm düğümü oluşturmak için aşağıdakileri yapın:

  1. MFT'nin CLSID'sini bulun. Kod çözücüler veya kodlayıcılar gibi MFT'lerin kategoriye göre CLSID'lerini bulmak için MFTEnum işlevini kullanabilirsiniz. Kullanmak istediğiniz belirli bir MFT'nin CLSID'sini de biliyor olabilirsiniz (örneğin, kendi özel MFT'nizi uyguladıysanız).
  2. Dönüştürme düğümünü oluşturmak için MF_TOPOLOGY_TRANSFORM_NODE bayrağıyla MFCreateTopologyNode çağırın.
  3. Düğümde MF_TOPONODE_TRANSFORM_OBJECTID özniteliğini ayarlayın. Öznitelik değeri CLSID'dir.
  4. Düğümü topolojiye eklemek için IMFTopology::AddNode'ı çağırın.

Aşağıdaki örnek, CLSID'den bir dönüştürme düğümü oluşturur ve başlatır.

HRESULT AddTransformNode(
    IMFTopology *pTopology,     // Topology.
    const CLSID& clsid,         // CLSID of the MFT.
    IMFTopologyNode **ppNode    // Receives the node pointer.
    )
{
    *ppNode = NULL;

    IMFTopologyNode *pNode = NULL;
    
    // Create the node.
    HRESULT hr = MFCreateTopologyNode(MF_TOPOLOGY_TRANSFORM_NODE, &pNode);

    // Set the CLSID attribute.

    if (SUCCEEDED(hr))
    {
        hr = pNode->SetGUID(MF_TOPONODE_TRANSFORM_OBJECTID, clsid);
    }

    // Add the node to the topology.
    if (SUCCEEDED(hr))
    {
        hr = pTopology->AddNode(pNode);
    }

    // Return the pointer to the caller.
    if (SUCCEEDED(hr))
    {
        *ppNode = pNode;
        (*ppNode)->AddRef();
    }

    SafeRelease(&pNode);
    return hr;
}

Etkinleştirme Nesnesinden Dönüştürme Düğümü Oluşturma

Bazı MFT'ler etkinleştirme nesneleri sağlar. Örneğin MFCreateWMAEncoderActivate işlevi, Windows Media Audio (WMA) kodlayıcı için bir etkinleştirme nesnesi döndürür. Tam işlev MFT'ye bağlıdır. Her MFT bir etkinleştirme nesnesi sağlamaz. Daha fazla bilgi için bkz. etkinleştirme nesneleri .

MFTEnumEx işlevini çağırarak da MFT etkinleştirme nesnesi alabilirsiniz.

Etkinleştirme nesnesinden bir dönüştürme düğümü oluşturmak için aşağıdakileri yapın:

  1. Etkinleştirme nesnesini oluşturun ve etkinleştirme nesnesinin IMFActivate arabirimine bir işaretçi alın.
  2. Dönüştürme düğümünü oluşturmak için MF_TOPOLOGY_TRANSFORM_NODE bayrağıyla MFCreateTopologyNode çağırın.
  3. IMFTopologyNode::SetObject çağrısı yapın ve IMFActivate işaretçisini geçirin.
  4. Düğümü topolojiye eklemek için IMFTopology::AddNode'ı çağırın.

Aşağıdaki örnek, bir etkinleştirme nesnesinden bir dönüştürme düğümü oluşturur ve başlatır.

HRESULT AddTransformNode(
    IMFTopology *pTopology,     // Topology.
    IMFActivate *pActivate,     // MFT activation object.
    IMFTopologyNode **ppNode    // Receives the node pointer.
    )
{
    *ppNode = NULL;

    IMFTopologyNode *pNode = NULL;
    
    // Create the node.
    HRESULT hr = MFCreateTopologyNode(MF_TOPOLOGY_TRANSFORM_NODE, &pNode);

    // Set the object pointer.
    if (SUCCEEDED(hr))
    {
        hr = pNode->SetObject(pActivate);
    }

    // Add the node to the topology.
    if (SUCCEEDED(hr))
    {
        hr = pTopology->AddNode(pNode);
    }

    // Return the pointer to the caller.
    if (SUCCEEDED(hr))
    {
        *ppNode = pNode;
        (*ppNode)->AddRef();
    }

    SafeRelease(&pNode);
    return hr;
}

Topolojiler Oluşturma

Topolojileri

IMFTopologyNode