Video Arasında Geçiş

Bu konu başlığında, medya kaynaklarının ve kod çözücülerin ara video içeriğini nasıl işlemesi gerektiği açıklanmaktadır.

Araya alınan videonun kodunu çözmek ve işlemek için aşağıdaki bilgiler gereklidir:

  • Aşamalı veya geçişli. Video akışı aşamalı çerçeveler, ara çerçeveler veya her ikisinin bir karışımını içerebilir.

  • Alan hakimiyeti. Alan hakimiyeti, ilk olarak hangi alanın görüneceğini, üst alanı veya alt alanı açıklar.

  • İlk alanı yineleyin. Bu bayrak, 3:2 çekme sırasında, çerçeve aşamalı olduğunda ancak akış aralandığında kullanılır. Bu bağlamda, ilk alan üst veya alt alan olabilir.

  • Araya kaydedilen alanlar veya tek alan. Örnek, tek bir alanı veya iki araya katılmış alanı barındırabilir. Bir örnek tek bir alan içeriyorsa örnek, çerçevenin tarama çizgilerinin yalnızca yarısını içerdiğinden, örnek yüksekliği çerçeve yüksekliğinin yarısıdır. Kaynak içeriğin özellikleri aksini belirtmediği sürece, araya eklenen alanlar önerilir.

Bu özelliklerden herhangi biri bir örnekten diğerine değişebilir. Ancak, video bileşenlerinin akış başlamadan önce genel içerik hakkında bir şeyler bilmesi gerekir. Örneğin, video araya alınmışsa, gelişmiş video işleyicisinin (EVR) ayrıştırma için video belleği ayırması gerekir. Video tamamen aşamalı çerçeveler ise EVR, işleme işlem hattını iyileştirebilir. İşlem hattına bir ayrıştırma adımı eklemek işleme gecikmesini artırır.

Araya alma ile ilgili bilgiler iki yerde depolanır:

  • Bir akıştaki araya alma hakkında genel bilgiler medya türüne yerleştirilir. Medya türleri hakkında daha fazla bilgi için bkz. Medya Türleri.

  • Her örnekle değişebilen bilgiler, örneğe öznitelik olarak yerleştirilir. Örnekler hakkında daha fazla bilgi için bkz. Medya Örnekleri.

Medya Türündeki Interlace Bilgileri

Medya türündeki MF_MT_INTERLACE_MODE özniteliği, bir bütün olarak akışın nasıl geçişli olduğunu açıklar. Bu özniteliğin değeri, MFVideoInterlaceMode numaralandırmasının bir üyesidir. Video medya türü her zaman bu özniteliğe sahip olmalıdır.

  • Akışta yalnızca aşamalı çerçeveler varsa ve aralanmış çerçeveler yoksa MFVideoInterlace_Progressive kullanın.
  • Akışta yalnızca ara çerçeveler varsa ve her örnek iki aralanmış alan içeriyorsa MFVideoInterlace_FieldInterleavedUpperFirst veya MFVideoInterlace_FieldInterleavedLowerFirst kullanın.
  • Akışta yalnızca ara çerçeveler varsa ve her örnek tek bir alan içeriyorsa, MFVideoInterlace_FieldSingleUpper veya MFVideoInterlace_FieldSingleLower kullanın. Alanlar üst ve alt arasında geçiş yapıyorsa, bu iki değerden hangisinin kullanıldığı önemli değildir. Biçim yalnızca üst alanlar veya yalnızca alt alanlar içeriyorsa, içeriğe karşılık gelen değeri ayarlayın.
  • Akış, ara ve aşamalı çerçevelerin bir karışımını içeriyorsa veya alan hakimiyeti değişiyorsa, medya türünü MFVideoInterlace_MixedInterlaceOrProgressive olarak ayarlayın. Her çerçeveyi açıklamak için örnek öznitelikleri kullanın.

Aşağıdaki tabloda bu öznitelik özetlemektedir.

MF_MT_INTERLACE_MODE Titreşimli? Örnekleri İlk alan
MFVideoInterlace_Progressive Hayır Aşamalı çerçeve Uygulanamaz
MFVideoInterlace_FieldInterleavedUpperFirst Evet Araya kaydedilen alanlar Önce üst
MFVideoInterlace_FieldInterleavedLowerFirst Evet Araya kaydedilen alanlar Önce daha düşük
MFVideoInterlace_FieldSingleUpper Evet Tek alan Önce üst
MFVideoInterlace_FieldSingleLower Evet Tek alan Önce daha düşük
MFVideoInterlace_MixedInterlaceOrProgressive Değişiklik gösterebilir Araya kaydedilen alanlar veya aşamalı çerçeveler Değişiklik gösterebilir

 

Ara alanlar ve tek alanlar karıştırılamaz. Birinden diğerine geçiş yapmak için medya türü değişikliği gerekir.

Örneklerde Interlace Bayrakları

Bir örnekten diğerine değişebilen bilgiler örnek öznitelikler kullanılarak belirtilir. Bu öznitelikleri almak veya ayarlamak için IMFSample arabirimini kullanın.

Bu bölümde listelenen tüm ara özniteliklerin Boole değerleri vardır. Bu özniteliklerin her birinin üç değeri olabilir: TRUE, FALSEveya ayarlanmaz. Bir öznitelik ayarlanmadıysa, değer medya türünden alınır. Bir öznitelik ayarlanırsa, değer medya türünü geçersiz kılar. Bayrak ve medya türlerinin bazı bileşimleri geçerli değildir.

Öznitelik Açıklama
MFSampleExtension_Interlaced TRUE çerçevenin arasını alır. FALSE çerçeve aşamalıdır.
Medya türü MFVideoInterlace_MixedInterlaceOrProgressive her örnekte bu özniteliği ayarlayın.
MFSampleExtension_BottomFieldFirst Bu bayrağın anlamı, örneklerin birbirine eklenmiş alanlar mı yoksa tek alanlar mı içerdiğine bağlıdır.
  • Ara alanlar: TRUE alt alan önce olur. FALSE , üst alan önce olur.
  • Tek alanlar: TRUE örnek daha düşük bir alan içerir. FALSE örnek bir üst alan içerir.
Medya türü MFVideoInterlace_FieldSingleUpper, MFVideoInterlace_FieldSingleLower veya MFVideoInterlace_MixedInterlaceOrProgressive ise bu özniteliği her interlace örneğinde ayarlayın.
MFSampleExtension_RepeatFirstField TRUE ilk alan yinelenir. FALSE veya ayarlanmadıysa, ilk alan yinelenmez.
MFSampleExtension_SingleField TRUE örnek tek bir alan içerir. FALSE örnekte aralanmış alanlar bulunur.

 

Aşağıdaki tabloda, medya türüne göre hangi bayrakların gerekli, isteğe bağlı veya yasak olduğu gösterilmektedir.

Medya Türü Daraltılmış Bayrak BottomFieldFirst Bayrağı RepeatFirstField Bayrağı TekAlan bayrağı
İlerici Opsiyonel; ayarlanırsa FALSE olmalıdır. Ayarlamayın. Ayarlamayın. Ayarlamayın.
Araya kaydedilen alanlar Opsiyonel; ayarlanırsa TRUE olmalıdır. Opsiyonel; ayarlanırsa, medya türüyle eşleşmelidir. Ayarlamayın. Opsiyonel; ayarlanırsa FALSE olmalıdır.
Tek alanlar Opsiyonel; ayarlanırsa TRUE olmalıdır. Gerekli. Ayarlamayın. TRUE olarak ayarlayın.
Karışık Gerekli. Gerekli. Gerekli. Opsiyonel; ayarlanırsa FALSE olmalıdır.

 

Özniteliğin isteğe bağlı olduğu durumlarda, medya türü bilgileri zaten tanımlar. Özniteliği eşleşecek şekilde ayarlamak geçerlidir, ancak gerekli değildir.

Örneğin, medya türü MFVideoInterlace_Progressive ise, akıştaki tüm çerçevelerin aşamalı olduğu anlamına gelir. Bu nedenle, MFSampleExtension_Interlaced özniteliğini FALSE olarak ayarlayabilir veya özniteliğini ayarsız bırakabilirsiniz.

Öneri

Bu bölüm, çeşitli içerik türlerine yönelik öneriler içerir.

  1. Videonun tümü aşamalı kareler.
  • Medya türünü MFVideoInterlace_Progressive olarak ayarlayın.

  • MFSampleExtension_Interlaced özniteliğini ayarlamayın veya her karede FALSE olarak ayarlayın.

  • MFSampleExtension_BottomFieldFirst, MFSampleExtension_RepeatFirstFieldveya MFSampleExtension_SingleField özniteliklerini ayarlamayın.

  1. Video, aynı alan hakimiyetine sahip tüm ara alanlardır. Örnekler, araya kaydedilen alanlar içeriyor.
  • Medya türünü MFVideoInterlace_FieldInterleavedUpperFirst veya MFVideoInterlace_FieldInterleavedLowerFirst olarak ayarlayın.

  • MFSampleExtension_Interlaced özniteliğini ayarlamayın veya her karede TRUE olarak ayarlamayın.

  • MFSampleExtension_BottomFieldFirst özniteliğini ayarlamayın veya her karedeki değeri medya türüyle eşleşecek şekilde ayarlamayın.

  • MFSampleExtension_RepeatFirstField özniteliğini ayarlamayın veya her karede FALSE olarak ayarlayın.

  • MFSampleExtension_SingleField özniteliğini ayarlamayın veya her karede FALSE olarak ayarlayın.

  1. Video, yinelenen alanlar ve değişen alan hakimiyeti (örneğin, DVD videosu) ile birlikte ara ve aşamalı çerçevelerin bir karışımını içerir.
  • Medya türünü MFVideoInterlace_MixedInterlaceOrProgressive olarak ayarlayın.

  • Her çerçevede MFSampleExtension_Interlaced, MFSampleExtension_BottomFieldFirstve MFSampleExtension_RepeatFirstField özniteliklerini ayarlayın.

  • MFSampleExtension_SingleField özniteliğini ayarlamayın veya her karede FALSE olarak ayarlayın.

  1. Videonun araları oluşturulmuş ve örnekler tek alanlar içeriyor.
  • Medya türünü MFVideoInterlace_FieldSingleUpper veya MFVideoInterlace_FieldSingleLower olarak ayarlayın.

  • Her karede MFSampleExtension_BottomFieldFirst özniteliğini ayarlayın.

  • MFSampleExtension_Interlaced özniteliğini ayarlamayın veya her karede TRUE olarak ayarlamayın.

  • MFSampleExtension_RepeatFirstField özniteliğini ayarlamayın veya her karede FALSE olarak ayarlayın.

  • MFSampleExtension_SingleField özniteliğini ayarlamayın veya her karede TRUE olarak ayarlayın.

Video içeriğinin çoğu bu kategorilerden birinde yer alır.

MPEG-2 Eşlemeleri

MPEG-2 içeriği için aşağıdaki eşlemeleri kullanarak MPEG-2 bayraklarını Media Foundation örnek özniteliklerine dönüştürün.

picture_structure

Değer Örnek Öznitelik
çerçeve MFSAMPLEEXTENSION_SINGLEFIELD = FALSE
top_field trueMFSampleExtension_SingleField =
MFSAMPLEEXTENSION_BOTTOMFIELDFIRST = FALSE
bottom_field trueMFSampleExtension_SingleField =
TRUEMFSampleExtension_BottomFieldFirst =

 

progressive_frame

Değer Örnek Öznitelik
0 TRUEMFSampleExtension_Interlaced =
1 MFSAMPLEEXTENSION_INTERLACED = FALSE

 

top_field_first

Değer Örnek Öznitelik
0 TRUEMFSampleExtension_BottomFieldFirst =
1 MFSAMPLEEXTENSION_BOTTOMFIELDFIRST = FALSE

 

repeat_first_field

Değer Örnek Öznitelik
0 MFSAMPLEEXTENSION_REPEATFIRSTFIELD = FALSE
1 TRUEMFSampleExtension_RepeatFirstField =

 

Single-Field Örnekleri

Medya türü MFVideoInterlace_FieldSingleUpper veya MFVideoInterlace_FieldSingleLower ise, her örneğin tek bir alan içerdiği anlamına gelir. Ancak, medya türü çerçevenin tamamını açıklar. Bu nedenle, her arabellek, medya türünde verilen alan satırlarının yalnızca yarısını içerir. Örneğin, medya türü videoyu 720 × 480 olarak tanımlıyorsa, her alan 240 tarama satırı içerir ve bu nedenle her arabellek yalnızca 240 satır piksel içerir. Tek alanlı örneklerle medya türlerini kabul eden bir bileşen yazarsanız, arabellekteki verilere erişirken bu gerçeği dikkate almanız gerekir.

Aynı kural geometrik diyafram (MF_MT_GEOMETRIC_APERTURE özniteliği) ve en düşük görüntü açıklığı (MF_MT_MINIMUM_DISPLAY_APERTURE özniteliği) için de geçerlidir. Bu bölgeler tek tek alanlar için değil, çerçevenin tamamıyla belirtilir.

DirectShow Eşlemeleri

DirectShow'da örnek başına geçiş bilgileri, _SAMPLE2_PROPERTIES yapısının dwTypeSpecificFlags üyesinde yer alır. Aşağıdaki tabloda Media Foundation için eşdeğer öznitelikler gösterilmektedir.

DirectShow örnek bayrağı Media Foundation örnek özniteliği
AM_VIDEO_FLAG_INTERLEAVED_FRAME FALSEMFSampleExtension_SingleField = .
AM_VIDEO_FLAG_FIELD1 TRUEMFSampleExtension_Interlaced = .
TRUEMFSampleExtension_SingleField = .
FALSEMFSampleExtension_BottomFieldFirst = .
AM_VIDEO_FLAG_FIELD2 TRUEMFSampleExtension_Interlaced = .
TRUEMFSampleExtension_SingleField = .
TRUEMFSampleExtension_BottomFieldFirst = .
AM_VIDEO_FLAG_WEAVE FALSEMFSampleExtension_Interlaced = . (Bu bayrak, sürücünün iki alanın kodunu kaldırmaması gerektiğini gösterir.)
AM_VIDEO_FLAG_FIELD1FIRST FALSEMFSampleExtension_BottomFieldFirst = . İçerik araya eklenmişse ve_VIDEO_FLAG_FIELD1FIRST bayrağı yoksa, bu özniteliği TRUE olarak ayarlayın.
AM_VIDEO_FLAG_REPEAT_FIELD TRUEMFSampleExtension_RepeatFirstField = . _VIDEO_FLAG_REPEAT_FIELD bayrağı yoksa, bu özniteliği FALSE olarak ayarlayın.

 

DirectShow örneği örnek bayraklar içermiyorsa, VIDEOINFOHEADER2 yapısından dwInterlaceFlags değerini kullanın:

DirectShow interlace bayrağı Media Foundation örnek özniteliği
AMINTERLACE_IsInterlaced TRUEMFSampleExtension_Interlaced = .
AMINTERLACE_1FieldPerSample TRUEMFSampleExtension_SingleField = .
AMINTERLACE_Field1First FALSEMFSampleExtension_BottomFieldFirst = .

 

Video Medya Türleri

Medya Türleri