Belirli Kodlama Modları için Ses Türlerini Numaralandırma (Microsoft Media Foundation)

Ses kodlayıcı tarafından kabul edilen giriş ve çıkış medya türleri çok yapılandırılmıştır. desteklenen çıkış türlerini IMediaObject::GetOutputType yöntemini veya IMFTransform::GetOutputTypeçağırarak elde etmeniz gerekir. Bir çıkış türü aldıktan sonra, bunu değiştirmemelisiniz.

Tek geçişli CBR dışında bir kodlama modu kullanmak istiyorsanız, modu ayarlamalı ve ardından bu mod için çıkış türlerini numaralandırmalısınız; kodlayıcı, mod kümesine bağlı olarak desteklenen çıkış türlerini değiştirir. Kodlama modunu denetleen özellikler MFPKEY_VBRENABLED ve MFPKEY_PASSESUSED. Mod kodlayıcıda ayarlandığında, CBR'de olduğu gibi değişiklik yapmadan kullanarak bir çıkış türünü numaralandırıp seçmeniz gerekir.

Kalite Tabanlı VBR Türlerini Tanımlama

Kalite tabanlı VBR türlerini belirleme yordamı, kodlayıcının DirectX Media Nesnesi (DMO) olarak mı yoksa Media Foundation Dönüşümü (MFT) olarak mı davrandığına bağlıdır. Bir kodlayıcının DMO veya MFT işlevi görmesi hakkında bilgi için, Codec Nesnelerialtındaki tek tek codec başvuru sayfalarına bakın.

Bir ses kodlayıcı DMO olarak hareket ettiğinde ve kodlayıcıyı tek geçişli VBR kullanacak şekilde yapılandırdığınızda, desteklenen tüm çıkış türlerini numaralandırır. Ancak, genellikle kalite parametresine göre tek geçişli bir VBR türü seçmek istersiniz. Kodlayıcı, tek geçişli VBR çıkış türlerinin kalite değerini DMO_MEDIA_TYPE.pbFormattarafından işaret edilen WAVEFORMATEX yapısının nAvgBytesPerSec üyesine yerleştirir.

Bu değer şu biçimde depolanır: 0x7FFFFFXX, burada XX kalite değeridir (0 ile 100). Örneğin, 0x7FFFFF62 nAvgBytesPerSec değeri, kalite düzeyi 98'i (0x62 = 98) belirtir.

Aşağıdaki örnekte, kodlayıcı DMO olarak görev yaparken biçimin kalite düzeyinin nasıl denetlendiği gösterilmektedir.

void ShowQuality(WAVEFORMATEX* pWave)
{
    // Store the average bytes per second in a local variable
    // with a more manageable name.
    DWORD dwBps = pWave->nAvgBytesPerSec;

    // Verify that the value is a VBR quality level by using 
    // a bitmask to check for the bit pattern 0x7FFFFFXX. 
    if(dwBps & 0x7FFFFF00 == 0x7FFFFF00)
        printf("VBR Quality: %d%%\n",(dwBps & 0x000000FF));
    else // Not a valid VBR quality value.
        printf("Not a valid one-pass VBR audio format.\n");
}

Kodlayıcı bir MFT olarak davrandığında ve GetAvailableOutputType çağrısında bir çıkış türünü listelediğinde, MFT'yi MFPKEY_MOST_RECENTLY_ENUMERATED_VBRQUALITY özelliği için sorgulayabilirsiniz. Döndürülen değer, en son döndürülen çıktı medya türünün VBR kalitesini gösterir. Ardından kodlayıcının MFPKEY_DESIRED_VBRQUALITY özelliğini ayarlamak için bu değeri kullanabilirsiniz.

Tepe Kısıtlamalarını Ayarlama

Kalite tabanlı VBR (tek geçişli) ve kısıtlanmamış iki geçişli VBR için çıkış türü alındıktan sonra ek ayar gerekmez. Tepe kısıtlamalı VBR kullanmak için VBR etkin ve iki geçiş ayarlanmış bir çıktı türü edinin. Bu tür, değişiklik olmadan, kısıtlanmamış VBR ayarlarını açıklar. En yüksek kısıtlamaları ayarlamak için MFPKEY_RMAX ve MFPKEY_BMAX özelliklerini ayarlayın.

Ses Kodlamayı Yapılandırma

Ses Kodlayıcı Çıkış Türlerini Bulma

Kullanarak Two-Pass Kodlama

VBR Kodlama Kullanarak