Aracılığıyla paylaş


Ön ve Arka Kenar Akış İşaretçileri

Varsayılan olarak, her AVStream kuyruğu bir ön kenar akış işaretçisi içerir. Ön kenar, kuyruğa gelen yeni çerçeveleri gösterir. Özellikle, ön kenar başlangıçta kuyrukta ilk gelen çerçeveyi işaret eder ve minisürücü onu hareket ettirene kadar yerinden oynamaz. AVStream, kuyruğun ömrü boyunca var olan öncü çizgiyi oluşturur. Minidriver'lar, Microsoft tarafından sağlanan işlevleri kullanarak öndeki kenarı işleyebilir.

Bir kuyruğa yeni bir çerçeve geldiğinde AVStream, öndeki kenarın zaten bir çerçeveye işaret etmemesi koşuluyla, ön kenarı bu çerçeveyi işaret eden şekilde ayarlar.

Öndeki kenar akış işaretçisine yönelik bir işaretçi elde etmek için, minidriver KsPinGetLeadingEdgeStreamPointerçağırır.

Minidriver, aşağıdaki tabloda özetlenen iki durum dışında öndeki kenarın ilerlemesini sağlar.

Durum AVStream'in Davranışı

Çerçeve, daha önce boş olan bir kuyruğa ulaşır.

AVStream, ön kenarı bu çerçeveye işaret edecek şekilde ayarlar.

Öncü kenar bir çerçeveyi işaret eder. Bu çerçeveye karşılık gelen IRP iptal edilir.

AVStream, yenilikte öncü adımlar atar. Ön kenar artık daha yeni bir çerçeveye işaret ediyor.

Akış işaretçilerini ilerletme hakkında daha fazla bilgi için bkz. Akış İşaretçilerine Giriş.

Son Kenar Akış İşaretçisini Belirtme

Minidriver'lar kuyruğun sonunda uç akış işaretçisi olduğunu belirtebilir. Sondaki kenar genellikle mini sürücü için en eski ilgi çekici çerçeveyi gösterir. Sondaki kenarı belirtmek için, ilgili KSPIN_DESCRIPTOR_EX yapısının Bayraklar üyesinde KSPIN_FLAG_DISTINCT_TRAILING_EDGE bayrağını ayarlayın. Ardından, sondaki kenar akış işaretçisine bir işaretçi elde etmek için KsPinGetTrailingEdgeStreamPointer çağırın.

Art kenar ilerlediğinde, daha önce işaret ettiği çerçevedeki referans sayısı sıfıra düşer ve çerçeve tamamlanır. Çerçeve, kendi IRP'si içindeki son çerçeveyse, alıcı pini çağıranın IRP'sini tamamlar; kaynak pini, IRP'yi bağlı olduğu pini gönderir.

Çerçeve Penceresini Koruma

Akış İşaretçilerine Girişiçinde açıklanan çerçeve referans sayısı kurallarının bir sonucu olarak,iptal edilene kadar önde ve arkadaki kenar arasındaki bir çerçeve,bir akış işaretçisi tarafından referans verilmemiş olsa bile kuyrukta kalır. Bu nedenle, bir minidriver birden çok bitişik çerçevenin çalışma penceresini korumak için öndeki ve sondaki kenar işaretçilerini kullanabilir. Penceredeki çerçeveler, örneğin işlemeyi veya doldurulmayı bekliyor olabilir.

Aşağıdaki diyagramda en eski kareler en alttadır. Yeni çerçeveler en üste gelir. Her çerçevedeki sayı, o çerçevenin referans sayısıdır. Akış işaretçileri ilerlediğinde, bu diyagramda yukarı hareket ederler.

avstream akış işaretçilerinin pin kuyruklarına başvurduğunu gösteren diyagram.

En soldaki kuyruk, minidriver'ın çalışan bir çerçeve kümesi oluşturmak için sondaki kenarı nasıl kullanabileceğini gösterir. Baştaki ve sondaki kenar arasındaki her çerçeve, hiçbir akış işaretçisi bu çerçevelere referans vermemesi gerçeğine rağmen, referans sayısı bir olan bir çerçevedir.

Ortadaki kuyruk, Akış İşaretçilerini Kopyalama örneğidir. Sürücü, AVStream DMA Services'deki pin işlemi adımlarında belirtildiği gibi, öncü sınırı tekrar tekrar klonlayıp ileri taşımıştır.

En sağdaki kuyruk, minidriver'ın bir akış işaretçisi kopyası kullanarak, takip eden kenarın arkasındaki bir kare için başvuru sayısını nasıl koruyabileceğini gösterir.