Aracılığıyla paylaş


D3D12 AV1 video kodlama

Direct3D12 video kodlama özelliği, Windows 11, sürüm 24H2 (WDDM 3.2) ile başlayan AV1 kodlamasını destekleyecek şekilde genişletilmiştir. Bu makalede, mevcut D3D12 Video Kodlama DDI'sinin AV1 kodlamasını desteklemek için değişikliklere ve yeni yapılara ihtiyaç duyduğu uzantı noktaları açıklanmaktadır. Uygulama düzeyi özellikleri de dahil olmak üzere daha fazla bilgi için bkz. AV1 D3D12 Video Kodlama Belirtimi.

Hız denetimi için uzantılar

Aşağıdaki mevcut numaralandırmalar hız denetimi ve hız denetimi desteği için uzantılarla güncelleştirilir:

D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_FLAG_0096_ENABLE_EXTENSION1_SUPPORT etkinleştirildiğinde, genişletilmiş hız denetimi yapıları D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_CONFIGURATION_PARAMS_0080_2.pConfiguration_XXX içinde kullanılır; devre dışı bırakıldığında ise eski yapılar, D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_FLAGS_0080 başvuru sayfasında belgelenen tabloda belirtildiği gibi kullanılır.

Video kodlama desteği uzantıları

Mevcut videoyla ilgili çerçeve, sürücülerin AV1 video kodlama desteği ve özelliklerini raporlamasına olanak tanıyacak şekilde genişletilmiştir. Bu bölümde, AV1 video kodlama desteğini sorgulamak ve raporlamak için kullanılan eklenen veya güncelleştirilmiş yapılar ve numaralandırmalar listelenir.

Kodlama işlemi

AV1 için beklenen bit akışı başlık değerleri

Sürücü/ana bilgisayar başlık kodlama sorumlulukları

K kutucukları ile kodlanmış bir çerçeve verildiğinde, sürücü sıkıştırılmış bit akışında EncodeFrame bağımsız değişkenlerinde istenen kutucuklara karşılık gelen K decode_tile() AV1 söz dizimi öğelerini yazar.

Ardından API İstemcisi, kutucukların sırayla yerleştirilmesi koşuluyla, tile_start_and_end_present_flag/tg_start/tg_end öğelerini kullanarak kutucukları istenen şekilde kutucuk gruplarına yerleştirmek için tile_group_obu() AV1 söz dizimi öğelerini oluşturur. tile_size_minus_1 öğesi ilgili kutucuktan kodlanır D3D12_VIDEO_ENCODER_FRAME_SUBREGION_METADATA bilgileri ve decode_tile() öğeleri sıkıştırılmış bit akışı arabelleğinden kopyalanır. Son olarak, her bir tile_group_obu(), OBU_TILE_GROUP türündeki open_bitstream_unit() öğeleri etrafında sarılır ve başına bir OBU_FRAME_HEADER eklenir. Tek bir kutucuk grubu için bunun yerine bir OBU_FRAME türü kullanılabilir.

API İstemcisi, şu anki çerçeve için ob_extension_flag !(TemporalLayerIndexPlus1 || SpatialLayerIndexPlus1) olarak belirlemekten ve gerekirse open_bitstream_unit() içinde temporal_id ve spatial_id kodlamakla sorumludur.

D3D12 Kodlama API'sinde uygulanan diğer codec bileşenleri gibi EncodeFrame gönderimleri de kod sırasına göredir.

Çözüm değişiklikleri ve uzamsal ölçeklenebilirlik

Sürücü D3D12_VIDEO_ENCODER_SUPPORT_FLAG_RESOLUTION_RECONFIGURATION_AVAILABLE bildirirse, yine de yalnızca anahtar çerçevedeki çözüm değişiklikleri için geçerlidir.

Etkin sıra üst bilgisinde, kullanılan ilişkili ID3D12VideoEncoderHeap içinde en yüksek çözünürlüğe ayarlanmış max_frame_*_minus_1 söz dizimi olmalıdır. İlişkilendirilmiş ID3D12VideoEncoderHeap içinde bulunan çözünürlük kullanan farklı kareler, frame_size() içindeki AV1 söz dizimini frame_size_override_flag kullanarak çözünürlük değişikliğini iletebilir.

D3D12_VIDEO_ENCODER_AV1_FRAME_TYPE_FLAG_SWITCH_FRAME destekleniyorsa:

  • Başvuru çerçeveleri, kodlanan mevcut geçiş çerçevesinden daha yüksek veya eşit çözünürlüğe sahip olmalıdır.
  • Farklı çözünürlüklerin tümü, kullanılan ilişkili ID3D12VideoEncoderHeap içinde mevcut olmalıdır.

Benzer şekilde, uzamsal ölçeklenebilirlik destekleniyorsa, başvuru çerçevelerinin farklı çözünürlüklerinin tümü kullanılan ilişkili ID3D12VideoEncoderHeap içinde mevcut olmalıdır.

Hız kontrol notları

D3D12DDI_VIDEO_ENCODER_RATE_CONTROL_QVBR1_0096.ConstantQualityTarget için kabul edilen aralık :[0..63]. En düşük değer en yüksek kaliteyi verir.

Genel olarak, D3D12DDI_VIDEO_ENCODER_SUPPORT_FLAG_0083_0_RATE_CONTROL_RECONFIGURATION_AVAILABLE kalite ile hız ayarlaması ve farklı hız denetimi modlarının şu aşağıdaki hız denetimi parametreleri için geçerlidir: sabit QP'deki QP, CBR, VBR ve QVBR'deki bit hızları ve kalite düzeyleri. Sürücü, desteklenmeyen diğer hız denetimi parametresi yeniden yapılandırması için D3D12DDI_VIDEO_ENCODER_ENCODE_ERROR_FLAG_0082_0_RECONFIGURATION_REQUEST_NOT_SUPPORTED değerini D3D12DDI_VIDEO_ENCODER_OUTPUT_METADATA_0083_0.EncodeErrorFlags içinde döndürebilir.

Kodlama işlemi API'si

Aşağıdaki yapılar ve numaralandırmalar, AV1 kodlama işlemini desteklemek için uzantılarla eklenir veya güncelleştirilir:

Ayrıca, bir sürücünün mevcut PFND3D12DDI_VIDEO_ENCODE_RESOLVE_OUTPUT_METADATA_0082_0 geri çağırması, AV1 kodlaması için eklenen AV1'e özgü çözümlenmiş arabellek düzenini işleyecek şekilde güncelleştirilmesi gerekir.