Pembuatan Node Transformasi
Simpul transformasi mewakili transformasi Media Foundation (MFT), seperti dekoder atau encoder. Ada beberapa cara berbeda untuk menginisialisasi node transformasi:
- Dari pointer 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:
- Buat instans MFT dan dapatkan penunjuk ke antarmuka IMFTransform MFT.
- Panggil MFCreateTopologyNode dengan bendera MF_TOPOLOGY_TRANSFORM_NODE untuk membuat simpul transformasi.
- Panggil IMFTopologyNode::SetObject dan masukkan penunjuk IMFTransform .
- 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:
- Temukan CLSID MFT. Anda dapat menggunakan fungsiMFTEnumuntuk menemukan CLSID MFTs berdasarkan kategori, seperti dekoder atau encoder. Anda mungkin juga tahu CLSID dari MFT tertentu yang ingin Anda gunakan (misalnya, jika Anda menerapkan MFT kustom Anda sendiri).
- Panggil MFCreateTopologyNode dengan bendera MF_TOPOLOGY_TRANSFORM_NODE untuk membuat simpul transformasi.
- Atur atribut MF_TOPONODE_TRANSFORM_OBJECTID pada simpul. Nilai atribut adalah CLSID.
- 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, fungsiMFCreateWMAEncoderActivate 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 fungsiMFTEnumEx.
Untuk membuat simpul transformasi dari objek aktivasi, lakukan hal berikut:
- Buat objek aktivasi dan dapatkan penunjuk ke antarmuka IMFActivate objek aktivasi.
- Panggil MFCreateTopologyNode dengan bendera MF_TOPOLOGY_TRANSFORM_NODE untuk membuat simpul transformasi.
- Panggil IMFTopologyNode::SetObject dan masukkan penunjuk IMFActivate.
- 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;
}
Topik terkait