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 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.
Video kodlayıcısını temsil eden sürücü nesnesini oluşturun:
PFND3D12DDI_CALCPRIVATEVIDEOENCODERSIZE_0082_0 , D3D çalışma zamanının sürücü nesnesi için ayırması gereken bellek miktarını hesaplar.
PFND3D12DDI_CREATEVIDEOENCODER_0082_0 , video kodlama oturumunun durumunu tutan gerçek video kodlayıcı nesnesini oluşturur.
Video kodlayıcı yığınını temsil eden sürücü nesnesini oluşturun:
PFND3D12DDI_CALCPRIVATEVIDEOENCODERHEAPSIZE_0080_2 , D3D çalışma zamanının sürücü nesnesi için ayırması gereken bellek miktarını hesaplar.
PFND3D12DDI_CREATEVIDEOENCODERHEAP_0080_2 , çözünürlüğe bağımlı sürücü kaynaklarını ve durumunu içeren video kodlayıcı yığın nesnesini oluşturur.
Çerçeve kodlama:
PFND3D12DDI_VIDEO_ENCODE_FRAME_0082_0 komut listesine bir kodlama çerçevesi işlemi kaydeder.
Kodlama işleminden sonra, kodlama işleminin çıktı meta verilerini okunabilir bir biçimde çözümlemek için PFND3D12DDI_VIDEO_ENCODE_RESOLVE_OUTPUT_METADATA_0082_0 de çağrılmalıdır. Sürücünün çözümlenen meta verilerinin düzeni, belirtimdeki diyagramda gösterilen örneğe benzer.
Video kodlayıcısını ve ilişkili yığını yok edin:
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.