CoCreateInstance Kullanarak Kodlayıcı Oluşturma

Medya dosyalarını ASF biçimine dönüştürmek için Windows Media kodlayıcılarını kullanabilirsiniz. Bu kodlayıcıları kullanmak için sisteme kayıtlı olmaları gerekir. Kodlayıcılar Media Foundation (MFT) dönüşümleri olarak uygulanır ve IMFTransform arabirimini kullanıma sunmalıdır. Bu konu başlığında, bir uygulamanın ilgili MFT kodlayıcının IMFTransform arabirimine nasıl işaretçi elde edebileceği ve kullanım için nasıl örnek oluşturabileceği açıklanmaktadır.

Kodlayıcı kaydı hakkında bilgi için bkz. Kodlayıcı MFT örneği oluşturma.

Kodlayıcının IMFTransform Arabirimini Kullanma

Windows Media kodlayıcılarının sisteme başarıyla kaydedilmesinin ardından, bir uygulama MFTEnumçağırarak kodlayıcıları numaralandırabilir. Doğru kodlayıcıyı aramak için aşağıdakileri belirtmeniz gerekir:

  • MFT_CATEGORY_AUDIO_ENCODER veya MFT_CATEGORY_VIDEO_ENCODERkategorisini temsil eden GUID.

  • Eşleşmesi gereken biçim. Bu, kodlayıcının örnekler oluşturacağı medya türünün ana türünü ve alt türünü belirten MFT_REGISTER_TYPE_INFO yapısında ayarlanır. Bu yapı pOutputType parametresinde geçirilir. Desteklenen türler hakkında bilgi için bkz. Medya Türü GUID'leri.

    Not

    pInputType parametresindeki giriş türü bilgileri gerekli değildir. Bunun nedeni, giriş türünün uygulama tarafından bilinmesi ve kodlayıcının giriş akışının sıkıştırılmamış biçimde olmasını beklemesidir.

     

MFTEnum, arama ölçütleriyle eşleşen kodlayıcı MFT'ler için IMFTransform işaretçileri dizisi döndürür. CoCreateInstance COM işlevini çağırıp kullanmak istediğiniz kodlayıcının CLSID'sini geçirerek bir kodlayıcı örneği oluşturabilirsiniz. Bu işlev, kodlayıcıyı temsil eden IMFTransform arabirimine bir işaretçi döndürür. Bu işlev çağrısı hakkında daha fazla bilgi için Bileşen Nesne Modeli (COM) için Windows SDK belgelerine bakın.

Kodlayıcı Oluşturma Örneği

Aşağıdaki kod örneği, bir ses veya video kodlayıcının nasıl oluşturulacağını gösterir.

HRESULT FindEncoder(
    const GUID& subtype, 
    BOOL bAudio, 
    IMFTransform **ppEncoder
    )
{
    HRESULT hr = S_OK;
    UINT32 count = 0;

    CLSID *ppCLSIDs = NULL;

    MFT_REGISTER_TYPE_INFO info = { 0 };

    info.guidMajorType = bAudio ? MFMediaType_Audio : MFMediaType_Video;
    info.guidSubtype = subtype;

    hr = MFTEnum(   
        bAudio ? MFT_CATEGORY_AUDIO_ENCODER : MFT_CATEGORY_VIDEO_ENCODER,
        0,          // Reserved
        NULL,       // Input type
        &info,      // Output type
        NULL,       // Reserved
        &ppCLSIDs,
        &count
        );

    if (SUCCEEDED(hr) && count == 0)
    {
        hr = MF_E_TOPO_CODEC_NOT_FOUND;
    }

    // Create the first encoder in the list.

    if (SUCCEEDED(hr))
    {
        hr = CoCreateInstance(ppCLSIDs[0], NULL,
            CLSCTX_INPROC_SERVER, IID_PPV_ARGS(ppEncoder));
    }

    CoTaskMemFree(ppCLSIDs);
    return hr;
}

Kodlayıcı MFT Örneği Oluşturma

Windows Media Kodlayıcıları