Bagikan melalui


Membuat Node Transformasi

Simpul transformasi mewakili transformasi Media Foundation (MFT), seperti dekoder atau encoder. Ada beberapa cara berbeda untuk menginisialisasi node transformasi:

  • Dari penunjuk ke MFT.
  • Dari CLSID untuk MFT.
  • Dari penunjuk ke objek aktivasi untuk MFT.

Jika Anda akan memuat topologi di dalam jalur media yang dilindungi (PMP), Anda harus menggunakan CLSID atau objek aktivasi, sehingga MFT dapat dibuat di dalam proses yang dilindungi. Pendekatan pertama (menggunakan pointer ke MFT) tidak berfungsi dengan PMP.

Membuat Node Transformasi dari MFT

Untuk membuat node transformasi dari MFT, lakukan hal berikut:

  1. Buat instans MFT dan dapatkan pointer ke antarmuka IMFTransform MFT.
  2. Panggil MFCreateTopologyNode dengan bendera MF_TOPOLOGY_TRANSFORM_NODE untuk membuat node transformasi.
  3. Panggil IMFTopologyNode::SetObject dan berikan penunjuk IMFTransform .
  4. Panggil IMFTopology::AddNode untuk menambahkan simpul ke topologi.

Contoh berikut membuat dan menginisialisasi node transformasi dari MFT.

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;
}

Membuat Node Transformasi dari CLSID

Untuk membuat node transformasi dari CLSID, lakukan hal berikut:

  1. Temukan CLSID MFT. Anda dapat menggunakan fungsi MFTEnum untuk menemukan CLSID MFTs berdasarkan kategori, seperti decoder atau encoder. Anda mungkin juga mengetahui CLSID dari MFT tertentu yang ingin Anda gunakan (misalnya, jika Anda menerapkan MFT kustom Anda sendiri).
  2. Panggil MFCreateTopologyNode dengan bendera MF_TOPOLOGY_TRANSFORM_NODE untuk membuat node transformasi.
  3. Atur atribut MF_TOPONODE_TRANSFORM_OBJECTID pada simpul. Nilai atribut adalah CLSID.
  4. Panggil IMFTopology::AddNode untuk menambahkan simpul ke topologi.

Contoh berikut membuat dan menginisialisasi node transformasi dari CLSID.

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;
}

Membuat Node Transformasi dari Objek Aktivasi

Beberapa MFT menyediakan objek aktivasi. Misalnya, fungsi MFCreateWMAEncoderActivate mengembalikan objek aktivasi untuk encoder Windows Media Audio (WMA). Fungsi yang tepat tergantung pada MFT. Tidak setiap MFT menyediakan objek aktivasi. Untuk informasi selengkapnya, lihat Objek Aktivasi.

Anda juga bisa mendapatkan objek aktivasi MFT dengan memanggil fungsi MFTEnumEx .

Untuk membuat node transformasi dari objek aktivasi, lakukan hal berikut:

  1. Buat objek aktivasi dan dapatkan penunjuk ke antarmuka IMFActivate dari objek aktivasi.
  2. Panggil MFCreateTopologyNode dengan bendera MF_TOPOLOGY_TRANSFORM_NODE untuk membuat node transformasi.
  3. Panggil IMFTopologyNode::SetObject dan berikan penunjuk IMFActivate .
  4. Panggil IMFTopology::AddNode untuk menambahkan simpul ke topologi.

Contoh berikut membuat dan menginisialisasi node transformasi dari objek aktivasi.

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;
}

Membuat Topologi

Topologi

IMFTopologyNode