Donanım MFT'leri

Not

Bu konu, Windows 7 veya sonraki sürümler için geçerlidir.

 

Bu konuda, bir donanım kodlayıcı, kod çözücü veya dijital sinyal işlemcisine (DSP) ara sunucu işlevi gören bir Media Foundation dönüşümünü (MFT) nasıl yazacağınız açıklanmaktadır.

Önemli

Bir donanım codec'i AVStream multimedya sınıfı sürücüsünü kullanıyorsa, özel bir MFT gerektirmez. Media Foundation bu amaçla bir AVStream proxy'si sağlar. Bu konudaki bilgiler yalnızca donanım codec bileşeninin AVStream kullanmadığı özel durumlarda geçerlidir. Daha fazla bilgi için bkz. AVStream Donanım Codec Desteği.

 

Bu konu aşağıdaki bölümleri içerir:

Giriş

AVStream tabanlı olmayan tüm donanım codec'leri, sürücüye ara sunucu olarak davranacak kendi MFT'sini sağlamalıdır. Donanım codec'i birkaç farklı işlevsel blok içerebilir:

  • Kodlayıcı
  • Kod çözücü
  • Çerçeve ölçeklendirme/biçim dönüştürme

Bu işlevlerin her biri ayrı bir MFT tarafından yönetilmelidir. Donanım MFT'leri hiçbir zaman çok amaçlı bir "transcoder" olarak davranmamalıdır. Bunun yerine kodlama işlevlerini bir kodlayıcı MFT'sine, kod çözme işlevlerini de bir kod çözücü MFT'sine yerleştirin. Donanım çerçeve ölçeklendirme ve biçim dönüştürmeleri sunuyorsa, bu işlevleri MFT_CATEGORY_VIDEO_PROCESSOR kategorisinde kayıtlı ayrı bir video işlemcisine yerleştirin. Donanım çerçeve ölçeklendirme veya biçim dönüştürmeyi desteklemiyorsa Media Foundation bir yazılım video işlemcisi sağlar.

Donanım MFT'leri aşağıdaki genel gereksinimlere sahiptir:

  • Donanım MFT'leri, Zaman Uyumsuz MFT'ler bölümünde açıklandığı gibi yeni zaman uyumsuz işleme modelini kullanmalıdır.
  • Donanım MFT'leri, Dinamik Biçim Değişiklikleri'nde açıklandığı gibi dinamik biçim değişikliklerini desteklemelidir.

Donanım MFT Öznitelikleri

Donanım MFT'sinde özniteliklerle ilgili aşağıdaki yöntemler uygulanmalıdır:

MFT ilk kez oluşturulduğunda, aşağıdaki öznitelikleri kendi genel öznitelik deposunda (yani, GetAttributestarafından döndürülen öznitelik deposu) ayarlamalıdır:

Öznitelik Açıklama
MF_TRANSFORM_ASYNC TRUE olarak ayarlanmalıdır. MFT'nin zaman uyumsuz işlem gerçekleştirdiğini gösterir.
MFT_ENUM_HARDWARE_URL_Attribute Donanım cihazının sembolik bağlantısını içerir.
Topoloji yükleyicisi, MFT'nin bir donanım cihazını temsil edip etmediğini test etmek için bu özniteliğin varlığını kullanır.
MFT_SUPPORT_DYNAMIC_FORMAT_CHANGE TRUE olarak ayarlanmalıdır. MFT'nin dinamik biçim değişikliklerini desteklediğini gösterir.

 

Donanım El Sıkışma Sırası

İki MFT aynı fiziksel cihazı temsil ederse, donanım içinde (örneğin, bir donanım veri yolu üzerinden) veri alışverişi yapabilir. Verileri sistem belleğine ve ardından cihaza geri kopyalamanız gerekmez.

Aşağıdaki diyagramda, "A" ve "B" etiketli MFT'ler aynı donanım içindeki işlevsel blokları temsil eder. Örneğin, kodlama dönüştürme senaryosunda "A" bir donanım kod çözücüyü, "B" ise donanım kodlayıcısını temsil edebilir. "A" ile "B" arasındaki veri akışı donanım içinde gerçekleşir. "C" etiketli MFT bir yazılım MFT'dir. "B" ile "C" veri akışı sistem belleğini kullanır.

c ile etiketlenmiş kutuların ve donanım codec bileşeninin gösterildiği diyagram: b'ye ve codec bileşenine, codec b'ye, b ise c'ye işaret

Donanım bağlantısı kurmak için iki donanım MFT'sinin özel bir iletişim kanalı kullanması gerekir. Bu bağlantı, biçim anlaşması sırasında, medya türleri ayarlanmadan önce ve ProcessInputilk çağrıdan önce kurulur. Bağlantı işlemi aşağıdaki gibi çalışır:

  1. Topoloji yükleyicisi, MFT_ENUM_HARDWARE_URL_Attribute özniteliğinin varlığı için her iki MFT'yi de denetler. Bu özniteliğin değerini incelemediğini unutmayın.

  2. her iki MFT'de de MFT_ENUM_HARDWARE_URL_Attribute varsa, topoloji yükleyicisi aşağıdakileri yapar:

    1. Topoloji yükleyicisi, yukarı akış MFT'sinde (A) IMFTransform::GetOutputStreamAttributes çağırır. Bu yöntem bir IMFAttributes işaretçisi döndürür. Bu işaretçinin pUpstream belirtilmesine izin verin.
    2. Topoloji yükleyicisi, aşağı akış MFT'sinde (B)IMFTransform::GetInputStreamAttributesçağırır. Bu çağrı ayrıca bir IMFAttributes işaretçisi döndürür. Bu işaretçinin pDownstream belirtilmesine izin verin.
    3. Topoloji yükleyicisi, IMFAttributes::SetUnknownçağrısı yaparak pDownstreamMFT_CONNECTED_STREAM_ATTRIBUTE özniteliğini ayarlar. özniteliğinin değeri pUpstream işaretçisidir.
    4. Topoloji yükleyicisi, MFT_CONNECTED_TO_HW_STREAM özniteliğini hem pDownstream hem de pUpstreamTRUE olarak ayarlar.
  3. Bu noktada, aşağıdaki diyagramda gösterildiği gibi aşağı akış MFT'sinin yukarı akış MFT'sinin öznitelik deposuna bir işaretçisi vardır.

    Her mft'nin akışını, her akışın deposunu işaret ettiği ve giriş deposunu çıkış deposuna kesikli çizgiyle gösteren diyagramı

    Not

    Netlik sağlamak için bu diyagram akışları ve öznitelik depolarını ayrı nesneler olarak gösterir, ancak bu uygulama için gerekli değildir.

     

  4. Aşağı akış MFT' IMFAttributes işaretçisini kullanarak yukarı akış MFT ile özel bir iletişim kanalı oluşturur. Kanal özel olduğundan, tam mekanizma uygulama tarafından tanımlanır. Örneğin, MFT özel bir COM arabirimini sorgulayabilir.

4. adım sırasında aşağı akış MFT'sinin iki MFT'nin aynı fiziksel cihazı paylaşıp paylaşmadığını doğrulaması gerekir. Aksi takdirde, veri aktarımı için sistem belleğini kullanmaya geri dönmeleri gerekir. Bu, MFT'nin yazılım MFT'leri ve diğer donanım cihazlarıyla doğru şekilde çalışmasına olanak tanır.

El sıkışma başarılı olursa ve iki MFT özel veri kanalını paylaşıyorsa, bağlantı noktasında standart veri işleme modelini (sonraki bölümde açıklanmıştır) kullanmaz. Özellikle, aşağı akış MFT METransformNeedInput olayları göndermez; daha fazla ayrıntı için bu konunun sonraki bölümüne bakın.

Bilgi işlem

Bir donanım MFT'sinde veri aktarımı için sistem belleği kullanıldığında, işlem aşağıdaki gibi çalışır:

  1. MFT, daha fazla giriş istemek için bir METransformNeedInput olayı gönderir.
  2. METransformNeedInput olayı, işlem hattının IMFTransform::P rocessInputçağırmasına neden olur.
  3. MFT çıktı verilerine sahip olduğunda, MFT bir METransformHaveOutput olayı gönderir.
  4. METransformHaveOutput olayı, işlem hattının IMFTransform::P rocessOutputçağırmasına neden olur.

Ayrıntılar için bkz. Zaman Uyumsuz MFT'ler.

Ancak MFT bir donanım kanalı kullanıyorsa, tüm veri aktarımı donanım içinde gerçekleştiğinden bu olayları donanım bağlantı noktasına göndermez. Bu nedenle işlem hattı, bağlantı noktasında ProcessInput veya ProcessOutput çağırmaz.

Örneğin, bu konudaki ilk diyagramı göz önünde bulundurun. Bu yapılandırma göz önüne alındığında, veri işleme aşağıdaki gibi gerçekleşebilir:

  1. "A" veri istemek için METransformNeedInput gönderir.
  2. İşlem hattı, "A" üzerindeki ProcessInput çağırır.
  3. "A" ve "B" verileri donanımda işler.
  4. İşleme tamamlandığında "B" bir METransformHaveOutput olayı gönderir.
  5. İşlem hattı, "B" üzerindeki ProcessOutput çağırır.

Eşleştirilmiş Kod Çözücü/Kodlayıcı

Kod çözücü ve kodlayıcı aynı donanım yongasında bulunuyorsa, kod dönüştürme sırasında bunların birlikte kullanılması tercih edilebilir. Başka bir deyişle, birini seçmek diğerinin kod dönüştürme işlem hattında seçilmesine neden olmalıdır. Eşleşen donanım codec'lerinin seçildiğinden emin olmak için her iki codec MFT'nin de özel bir medya türü sunması gerekir. Özel medya türü oluşturmak için:

  • MF_MT_MAJOR_TYPE özniteliğini uygun şekilde MFMediaType_Audio veya MFMediaType_Videoolarak ayarlayın.
  • MF_MT_SUBTYPE özniteliğini özel bir GUID değerine ayarlayın.

Diğer tür öznitelikleri isteğe bağlıdır. Kod çözücü, IMFTransform::GetOutputAvailableTypeöğesinden özel türü döndürür ve kodlayıcı, IMFTransform::GetInputAvailableType yönteminden özel türü döndürür. Her iki durumda da, özel tür listedeki ilk girdi olmalıdır (dwTypeIndex = 0).

Yazılım codec'leriyle çalışmak için codec'in video için NV12 gibi en az bir standart biçim döndürmesi de gerekir. Standart biçimler özel türden sonra görünmelidir (dwTypeIndex> 0). İki codec bileşeni her zaman eşlenmelidir ve yazılım codec'leri ile birlikte çalışamazsa, MFT'ler yalnızca özel biçimi döndürmelidir ve standart biçim döndürmemelidir.

Not

Kod çözücü herhangi bir standart biçim döndürmezse, Gelişmiş Video oluşturucuile kayıttan yürütme için kullanılamaz. Bu durumda, yalnızca kod dönüştürme kod çözücü olarak kaydedilmelidir. Bkz. Transcode-Only Kod Çözücüler.

 

Özel MFT Yazma

Codec MFT Uygulama

Media Foundation Dönüştürmeleri