D3D12 video kodlama

Bu makalede, Sürücü geliştiricileri için Direct3D12 video kodlama özelliğiyle ilgili genel bilgiler sağlanır. Uygulama düzeyi özellikleri de dahil olmak üzere daha fazla bilgi için bkz. D3D Video Kodlama Belirtimi.

Direct3D 12 video kodlaması hakkında

Windows 11'de (WDDM 3.0) önce DirectX 12, video kod çözme, video işleme ve hareket tahmini gibi çeşitli video uygulamalarında GPU hızlandırmayı desteklemek üzere uygulama ve sürücü düzeyinde arabirimler (API'ler ve DDI'ler) sağladı.

Windows 11'den başlayarak, D3D12 mevcut video API'sine/DDI ailesine bir video kodlama özelliği ekler. Bu özellik, mevcut D3D12 çerçevesiyle tutarlı bir kodlama API'leri/DD'leri kümesi sağlar ve geliştiricilerin GPU hızlandırmalı video altyapılarını kullanarak video kodlaması gerçekleştirmesine olanak tanır.

Video kodlama çerçevesi, video kodlayıcı donanım hızlandırma özelliklerine erişim sağlar. Nesnelerin İnterneti (IoT), bulut, medya API'leri, makine öğrenmesi (ML) ve oyun akışı gibi farklı senaryolarda kullanılabilir.

AV1 Kodlama desteği Windows 11, sürüm 24H2 'ye (WDDM 3.2) eklenir. Daha fazla bilgi için bkz. D3D12 AV1 Video Kodlama.

Desteklenen codec bileşenleri

Windows 11'den başlayarak desteklenen codec'ler H.264 ve HEVC'lerdir, ancak D3D12 video kodlama çerçevesi AV1 gibi daha yeni codec bileşenleri için açık genişletilebilirlik sağlar.

Çerçeve arabiriminin codec'e özgü yönleri, codec'e özgü yapılara ve birleşim türlerine erişimlerine temsilci olarak atanır. Örneğin , D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_0082_0 yapısı codec'e özgü D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_0082_0 işaretçileri ve codec'e özgü yapılandırma bilgilerini içeren D3D12DDI_VIDEO_ENCODER_CODEC_CONFIGURATION_HEVC_0082_0 yapıları içeren bir birleşim içerir.

İkili arabirim uyumluluğunu genişletilebilirlik üzerinde korumak için birleşim türleri her zaman codec'e özgü yapıların işaretçilerini içerir. Birleşim türleri, ana mimarinin işaretçi boyutuna göre sabit boyuttadır. Bu karar, üyelerini tutan (veya anonim) birleşim türlerini barındıran yapıların arabirimi genişletirken tür boyutlarını değiştirmesini de engeller. Birleşimlerden bazıları yalnızca sabit listesi türlerine yönelik işaretçiler içerir; tutarlı olması için bu sabit listesi türlerine, yeni bir codec'in bu kavramları temsil etmek için bir sabit listesi yerine daha karmaşık bir tür gerektirmesi durumunda işaretçi olarak da başvurulur.

Video kodlama desteği ve özelliklerini raporlama

Mevcut videoyla ilgili çerçeve, sürücülerin video kodlama desteği ve özelliklerini raporlamasına olanak tanıyacak şekilde genişletilmiştir.

  • D3D12DDI_FEATURE_VERSION_VIDEO_0083_0 , Windows 11'de tanıtılan tüm D3D12 video kodlama kilometre taşlarının ilk tam uygulamasını tanımlayan sürüm numarasıdır.

  • D3D12DDICAPS_TYPE_VIDEO_0020 numaralandırması, aşağıdaki video kodlama destek değerlerini içerecek şekilde genişletilmiştir:

    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_CODEC = 31,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_PROFILE_LEVEL = 32,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_OUTPUT_RESOLUTION_RATIOS_COUNT = 33,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_OUTPUT_RESOLUTION = 34,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_INPUT_FORMAT = 35,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_RATE_CONTROL_MODE = 36,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_INTRA_REFRESH_MODE = 37,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_FRAME_SUBREGION_LAYOUT_MODE = 38,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_HEAP_SIZE = 39,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_CODEC_CONFIGURATION_SUPPORT = 40,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_SUPPORT = 41,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_CODEC_PICTURE_CONTROL_SUPPORT = 42,
    • D3D12DDICAPS_TYPE_VIDEO_0080_ENCODER_RESOURCE_REQUIREMENTS = 43

    D3D çalışma zamanı, video kodlama desteğini sorgulamak için sürücünün PFND3D12DDI_VIDEO_GETCAPS geri çağırmasını çağırır.

  • Video kodlamayı destekleyen bir sürücü, D3D çalışma zamanına D3D12DDI_DEVICE_FUNCS_VIDEO_0082_0 yapısındaki video kodlama geri çağırma işlevlerinin işaretçilerini sağlar.

D3D12 video kodlama geri çağırma işlevleri

Sürücü, D3D12 video kodlamasını desteklemek için aşağıdaki geri çağırma işlevlerini uygular.

Test aşaması

Aşağıdaki testler , Windows Donanım Laboratuvar Seti'nin (WHLK) bir parçası olarak dahil edilir. Ayrıntılar için WHLK'ye bakın.

Test Adı Açıklama
CreateVideoEncoder CheckFeatureSupport ile ilgili raporlanan vakalara/olaylara dayalı olarak VideoEncoder/VideoEncoderHeap oluşturulmasını doğrular.
SingleEncodeH264/HEVC Yapısal görüntü temel denetimleri için QR kodu tabanlı testler. Giriş görüntüleri dizisi önceden tanımlanmış QR içeriğiyle damgalanır, ardından kodlanır ve kodu çözüler. Son olarak, çıktı değerleri (ve bir ölçüde kalite) beklendiği gibi olduklarından emin olmak için denetlenmektedir.
EncodeProfileLevelSuggestionsH264/HEVC D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT, Önerilen Profil/Düzey değerlerinin H.264/HEVC spesifikasyonlarına ve D3D12_FEATURE_DATA_VIDEO_ENCODER_SUPPORT'a giriş olarak verilen yapılandırmalara dayanarak beklendiği gibi olup olmadığını doğrular.
EncodeHeapSizeCap Farklı artan giriş bağımsız değişkenleriyle artan bellek kullanım alanını doğrular.
SimpleGOPEncodeH264/HEVC(10 bit) Giriş videosunu, farklı çözünürlükler, GOP desenleri, dilim modları ve diğer kodek yapılandırmalarını kullanarak transkodlar ve çıkış kodlanmış videoyu, giriş video akışıyla olan farkın kabul edilebilir olduğunu doğrulayarak karşılaştırır. Bu karşılaştırma, en yüksek sinyal-gürültü oranı (PSNR) kullanılarak yapılır.
Alt Bölgeleri Kodlama/Çözünürlük Yeniden Yapılandırma Anında yeniden yapılandırmaları doğrular.
H264UzunVadeliReferanslarıKodla Uzun süreli resim referanslarının kullanımını doğrular.
EncodeIntraRefresh Açık bir IPP...P...P... GOP ile basit bir iç yenileme senaryosunu doğrular.
Video Kodlama Komut Listesi Özellikleri Video kodlama komut listeleri için öngörü ve belirleyicileri doğrular.
VideoEncodeTimestamps Video kodlama komut listelerinin Zaman Damgalarını doğrular.

Video kodlama senaryoları

OneCore

D3D12 video kodlama desteği, yalnızca D3D12'nin kullanılabildiği platformlarda taşınabilir donanım hızlandırmalı video kodlamasını etkinleştirir. Bu platformlar, bulut işlem ve IoT platformları tarafından kullanılan çeşitli OneCore SKU'larını içerir. Video kodlama hızlandırma, platforma özgü çözümleri kullanmaya gerek kalmadan bu senaryolarda kullanılabilir.

Medya API'leri

Düşük düzeyde ve taşınabilir bir şekilde video kodlama özelliklerine tüm donanım satıcıları tarafından erişilebilir. Bu erişilebilirlik, daha üst düzey Medya API'lerinin (Media Foundation gibi) farklı donanım platformlarını soyutlamayla ilgilenen bu API'nin üzerinde medya katmanlarını oluşturmasına olanak tanır. API'nin düşük düzeyli tasarımı dikkate alındığında, bu üst düzey medya katmanları, video kodlama oturumunun eşzamanlama ve bellek ayırma/yerleşim özelliklerinde ayrıntılı kontrol imkânı sağlayarak senaryolarını optimize edebilir. Başvuru resmi yönetiminin ve bit akışı başlıklarının yazılması gibi sorumlulukların tam kontrolüne sahip olabilirler. Bu API'nin üzerinde yer alan katmana yönelik bu sorumluluk değişimi, donanım satıcılarının farklı donanım platformlarında yeniden kullanılabilecek medya katmanında tutarlı bir kodlama ilkeleri kümesine (örneğin, uyarlamalı GOP gibi DPB buluşsal yöntemleri) sahip olmasını da sağlar.

D3D grafikleri, işlem ve makine öğrenmesi ile birlikte çalışabilirlik

D3D12 video kodlama API'si, D3D12 video kodlaması ile D3D12 grafik, işlem ve ML senaryoları arasında verimli birlikte çalışabilirlik sağlar. Bu birlikte çalışabilirlik, makine öğrenmesi çıkarımlarını kamera akışı üzerinden çalıştırma gibi senaryolar için ilginçtir.

Oyun akışı senaryoları

D3D12 video kodlama API'si, yüksek performanslı bir düşük düzey API gerektiren oyun akışı senaryolarını etkinleştirir.