Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu konu başlığında, bir Media Foundation dönüşümünü (MFT) akış sırasında biçim değişikliklerini nasıl işlemesi gerektiği açıklanmaktadır.
Önemli
Bu konu kodlayıcılar için geçerli değildir. Kodlayıcılar, bu konuda açıklandığı gibi biçim değişikliklerini yaymamalıdır. Kodlayıcılar yalnızca şu anda yapılandırılmış olan çıkış türüyle eşleşen bir giriş türünü kabul etmelidir.
Biçim Değişikliklerine Genel Bakış
Genel olarak, akış sırasında biçimin değişmesi için iki neden vardır.
- İstemci, yeni bir biçime sahip bir akışa geçebilir. Örneğin dijital televizyonda bu durum kanal değişikliği nedeniyle gerçekleşebilir.
- H.264 gibi bazı video biçimlerinde bit akışı biçim değişikliği sinyali verebilir. Bu tür değişiklikler alan hakimiyeti, video çözünürlüğü veya piksel en boy oranındaki değişiklikleri içerebilir.
Kodlama türü değişirse, istemcinin MFT'yi işlem hattından kaldırması ve başka bir MFT ile değiştirmesi gerekebilir. (Örneğin, istemcinin yeni bir kod çözücü ile eskisini değiştirmesi gerekebilir.) Bu konu böyle bir durumu kapsamaz. Bu konu yalnızca geçerli MFT'nin yeni biçimi işleyebildiği durumu kapsar.
Biçim değişirse, MFT yeni bir giriş türü, yeni bir çıkış türü veya her ikisini de gerektirebilir.
- Giriş türündeki değişiklikler istemci tarafından başlatılır. MFT hiçbir zaman kendi giriş türünü değiştirmez.
- Çıkış türündeki değişiklikler MFT tarafından başlatılır. MFT, yeni bir çıkış türü gerektirdiğini bildirir ve istemci yeni çıkış türünü MFT ile görüşür.
Bu nedenle, üç ayrı durum mümkündür:
- İstemci yeni bir giriş türü ayarlar. MFT, çıkış türünde hiçbir değişiklik olmadan yeni biçimi tüketir.
- İstemci yeni bir giriş türü ayarlar ve bu, çıkış türünde bir değişiklik tetikler.
- Giriş türü değişmez, ancak MFT bit akışında yeni bir çıkış türü gerektiren bir biçim değişikliği algılar.
Biçim Değişikliklerini Uygulama
Bu konunun geri kalanında, istemcinin bir biçim değişikliğini nasıl işlemesi gerektiği ve MFT'de biçim değişikliklerinin nasıl uygulandığı açıklanmaktadır.
Çıkış Türü
Herhangi bir MFT, çıkış türünde aşağıdaki gibi bir değişiklik başlatabilir:
- İstemci, IMFTransform::ProcessOutputçağırır. MFT aşağıdaki gibi yanıt verir:
- MFT, ProcessOutputsırasında bir çıkış örneği üretmez.
- MFT, MFT_OUTPUT_DATA_BUFFER yapısının dwStatus üyesinde MFT_OUTPUT_DATA_BUFFER_FORMAT_CHANGE bayrağını ayarlar.
- ProcessOutput yöntemi MF_E_TRANSFORM_STREAM_CHANGEhata kodunu döndürür.
- İstemci, IMFTransform::GetOutputAvailableTypeçağırır. Bu yöntem, güncelleştirilmiş bir çıkış türü kümesi döndürür.
- İstemci, yeni bir çıkış türü ayarlamak için SetOutputTypeçağırır.
- İstemci, ProcessInput/ProcessOutputçağrısına devam eder.
Giriş Türü
Giriş türündeki değişiklikler istemci tarafından başlatılır, hiçbir zaman MFT tarafından başlatılmaz. Giriş türü değişirse çıkış türünde bir değişiklik tetikleyebilir.
Olayların tam sırası, MFT_SUPPORT_DYNAMIC_FORMAT_CHANGE özniteliğinin değerine bağlıdır.
| Değer | Açıklama |
|---|---|
| YANLIŞ | İstemci yeni bir giriş türü oluşturmadan önce MFT'yi boşaltması gerekir. |
| DOĞRU | İstemci, MFT'yi boşaltmadan yeni bir giriş türü ayarlayabilir. |
MFT bu özniteliği IMFTransform::GetAttributes yöntemiyle kullanıma sunar. Bu özniteliğin varsayılan değeri FALSE; MFT özniteliği ayarlamazsa değeri FALSEolarak değerlendirin.
MFT_SUPPORT_DYNAMIC_FORMAT_CHANGE FALSE'dır
- İstemci MFT_MESSAGE_COMMAND_DRAIN iletisini gönderir.
- İstemci, ProcessOutputMF_E_TRANSFORM_NEED_MORE_INPUTdöndürene kadar IMFTransform::ProcessOutput çağırarak MFT'yi boşaltıyor.
- İstemci, yeni giriş türünü ayarlamak için IMFTransform::SetInputType çağırır.
- MFT, giriş türünü doğrular. Tür geçersizse, SetInputTypeMF_E_INVALIDMEDIATYPE veya başka bir hata kodu döndürür. Aksi takdirde, SetInputType S_OK döndürür.
- Giriş türünün geçerli olduğunu varsayarsak, MFT çıkış türünün de değişip değişmediğini değerlendirir. Aksi takdirde akış devam eder ve başka eylem gerekmez.
- Çıkış türü değişirse:
- MFT geçerli çıkış medya türünü geçersiz kılıp kullanılabilir çıkış medyası türlerinin listesini güncelleştirir.
- Bir sonraki ProcessOutput çağrısı, önceki bölümde açıklandığı gibi, MF_E_TRANSFORM_STREAM_CHANGEdöndürür.
- İstemci, güncelleştirilmiş çıkış türlerinin listesini almak için IMFTransform::GetOutputAvailableType çağırır.
- İstemci, SetOutputTypeçağırır.
MFT_SUPPORT_DYNAMIC_FORMAT_CHANGE doğrudur
- İstemci, yeni giriş türünü ayarlamak için IMFTransform::SetInputType çağırır.
- MFT, giriş türünü doğrular. Tür geçersizse, SetInputTypeMF_E_INVALIDMEDIATYPE veya başka bir hata kodu döndürür. Aksi takdirde, SetInputType S_OK döndürür.
- Giriş türünün geçerli olduğunu varsayarsak, MFT çıkış türünün de değişip değişmediğini değerlendirir. Aksi takdirde akış devam eder ve başka eylem gerekmez.
- Çıkış türü değişmeden önce MFT'nin önbelleğe alınmış giriş örneklerini aşağıdaki gibi işlemesi gerekir:
- MFT geçerli çıkış türünü geçersiz kılmaz.
- MFT, önbelleğe alınan giriş örneklerinden olabildiğince çok çıkış üretir.
- MFT'nin önbelleğe alınmış örnekleri işlerken yeni giriş örneklerini kabul edip etmediği isteğe bağlıdır. Bu durumda, yeni giriş örnekleri yeni giriş biçimini kullanır, bu nedenle MFT biçimin değiştiği noktayı izlemelidir.
- MFT, giriş türü değiştirilmeden önce aldığı tüm örnekleri işledikten sonra, IMFTransform::P rocessOutputMF_E_TRANSFORM_STREAM_CHANGEdöndürür.
- MFT geçerli çıkış türünü geçersiz kılıp kullanılabilir çıkış medyası türlerinin listesini güncelleştirir.
- İstemci, daha önce açıklandığı gibi yeni çıkış türüyle anlaşma sağlar.
Zaman Uyumsuz MFT'lerMFT_SUPPORT_DYNAMIC_FORMAT_CHANGE özniteliği için TRUE değerini döndürmelidir. Zaman uyumsuz MFT kullanırken istemci, MFT_SUPPORT_DYNAMIC_FORMAT_CHANGE özniteliğinin TRUE olarak ayarlandığını varsayabilir.
MFT_SUPPORT_DYNAMIC_FORMAT_CHANGE TRUE olduğunda, temel fark istemcinin yeni bir giriş türü ayarlamadan önce MFT'yi boşaltması gerekmemesidir. Sonuç olarak, MFT giriş örneklerini tutarken giriş türü değişebilir. MFT'nin bu örnekleri bırakmaması önemlidir. Ayrıca, MFT önbelleğe alınmış tüm verilerini işleyene kadar çıkış türü değiştirilemez.
Önceki paragraf, özellikle zamansal sıradan bağımsız kodlanmış çerçeveler alabilen ve bu nedenle bunları önbelleğe alması gereken video kod çözücüleri için geçerlidir. MFT giriş örneklerini önbelleğe almazsa, boşaltma temelde bir no-op. Bu durumda MFT, MFT_SUPPORT_DYNAMIC_FORMAT_CHANGE FALSE olarak ayarlayabilir (veya özniteliğini ayarlanmamış olarak bırakabilir).
Her MFT'nin, boşaltma işleminin ardından format değişikliklerini doğru şekilde işlemesi beklendiğini de unutmayın. MFT_SUPPORT_DYNAMIC_FORMAT_CHANGE özniteliği, MFT'nin boşaltılmadan biçim değişikliklerini destekleyip desteklemediğini gösterir.
Interlace Modunda Değiştirme
Geçerli medya türünü geçersiz kılmadığından, video ara modundaki değişiklikler özel bir durumdur. Bunun yerine, her video karesi için interlace modu, medya örneğindeki öznitelikler ayarlanarak belirtilir. Bir video MFT'sinin her giriş örneğinde bu bayrakların olup olmadığını denetlemesi gerekir.
Çapraz tarama modu, saha hakimiyeti üst sahadan alt sahaya geçtiğinde veya video aşamalı ve çapraz taramalı görüntüler arasında geçiş yaptığında değişebilir.
Daha fazla bilgi için bkz. örnekler Interlace Bayrakları.
İlgili konular