Bagikan melalui


struktur D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264 (d3d12video.h)

Mewakili elemen kontrol tingkat gambar untuk perintah EncodeFrame terkait untuk pengodean H.264.

Sintaks

typedef struct D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264 {
  D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS                                         Flags;
  D3D12_VIDEO_ENCODER_FRAME_TYPE_H264                                                               FrameType;
  UINT                                                                                              pic_parameter_set_id;
  UINT                                                                                              idr_pic_id;
  UINT                                                                                              PictureOrderCountNumber;
  UINT                                                                                              FrameDecodingOrderNumber;
  UINT                                                                                              TemporalLayerIndex;
  UINT                                                                                              List0ReferenceFramesCount;
  UINT                                                                                              *pList0ReferenceFrames;
  UINT                                                                                              List1ReferenceFramesCount;
  UINT                                                                                              *pList1ReferenceFrames;
  UINT                                                                                              ReferenceFramesReconPictureDescriptorsCount;
  D3D12_VIDEO_ENCODER_REFERENCE_PICTURE_DESCRIPTOR_H264                                             *pReferenceFramesReconPictureDescriptors;
  UCHAR                                                                                             adaptive_ref_pic_marking_mode_flag;
  UINT                                                                                              RefPicMarkingOperationsCommandsCount;
  D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION           *pRefPicMarkingOperationsCommands;
  UINT                                                                                              List0RefPicModificationsCount;
  D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION *pList0RefPicModifications;
  UINT                                                                                              List1RefPicModificationsCount;
  D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION *pList1RefPicModifications;
  UINT                                                                                              QPMapValuesCount;
  INT8                                                                                              *pRateControlQPMap;
} D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264;

Anggota

Flags

Kombinasi nilai OR bit dari enumerasi D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS menentukan bendera konfigurasi untuk bingkai yang dikodekan.

FrameType

Nilai dari enumerasi D3D12_VIDEO_ENCODER_FRAME_TYPE_H264 yang menentukan jenis gambar. Pastikan bahwa bendera khusus codec mendukung jenis yang ditentukan. Pilihan ini harus tetap sinkron dengan konfigurasi struktur GOP yang ditetapkan oleh host. Perhatikan bahwa GOP didefinisikan dalam urutan tampilan dan pilihan jenis pic ini harus mengikuti GOP, tetapi dalam urutan pengodean.

pic_parameter_set_id

UINT yang menentukan nilai yang akan digunakan di header ilis bingkai saat ini untuk mereferensikan PPS.

idr_pic_id

Ketika FrameType** D3D12_VIDEO_ENCODER_FRAME_TYPE_H264_IDR_FRAME, UINT yang menunjukkan pengidentifikasi bingkai IDR yang akan digunakan di semua header irisan yang ada dalam bingkai.

PictureOrderCountNumber

UINT yang menentukan urutan tampilan bingkai saat ini.

FrameDecodingOrderNumber

UINT yang menentukan urutan dekode bingkai dengan semantik seperti yang ditunjukkan oleh header ipotong frame_num elemen sintaks yang bertambah setelah setiap gambar referensi.

TemporalLayerIndex

UINT yang menentukan nomor lapisan gambar dalam hierarki temporal. Periksa jumlah maksimum lapisan dalam D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264.

List0ReferenceFramesCount

UINT yang menentukan jumlah referensi bingkai sebelumnya yang akan digunakan untuk bingkai ini. Nilai ini harus koheren dengan apa yang diekspos dalam D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264.

pList0ReferenceFrames

Penunjuk ke array UINT yang menentukan daftar bingkai referensi bingkai sebelumnya yang akan digunakan untuk bingkai ini. Setiap nilai bilangan bulat dalam indeks array ini menjadi pReferenceFramesReconPictureDescriptors untuk mereferensikan gambar yang disimpan di DPB.

List1ReferenceFramesCount

UINT yang menentukan jumlah referensi bingkai di masa mendatang yang akan digunakan untuk bingkai ini. Nilai ini harus koheren dengan apa yang diekspos dalam D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_SUPPORT_H264.

pList1ReferenceFrames

Penunjuk ke array UINT yang menentukan daftar bingkai referensi bingkai di masa mendatang yang akan digunakan untuk bingkai ini. Setiap nilai bilangan bulat dalam indeks array ini menjadi pReferenceFramesReconPictureDescriptors untuk mereferensikan gambar yang disimpan di DPB.

ReferenceFramesReconPictureDescriptorsCount

UINT yang menentukan jumlah entri dalam pReferenceFramesReconPictureDescriptors.

pReferenceFramesReconPictureDescriptors

Penunjuk ke array UINT yang menjelaskan status buffer DPB saat ini yang disimpan di D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrame. pList0ReferenceFrames dan pList1ReferenceFrames mencantumkan peta indeks dari referensi masa lalu/masa depan ke dalam array deskriptor ini.

Array deskriptor ini, pada gilirannya, memetakan gambar referensi untuk bingkai ini ke dalam indeks sumber daya dalam array gambar yang direkonstruksi D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrame. Selain itu, untuk setiap gambar referensi, ini menunjukkan enkode dan menampilkan nomor pesanan dan apakah itu referensi jangka panjang.

Ukuran array ini selalu cocok dengan D3D12_VIDEO_ENCODER_PICTURE_CONTROL_DESC. ReferenceFrames.NumTextures untuk perintah EncodeFrame terkait.

adaptive_ref_pic_marking_mode_flag

UCHAR yang mendefinisikan mode semantik untuk penanganan referensi bingkai.

nilai adaptive_ref_pic_marking_mode_flag Mode penandaan gambar referensi ditentukan
0 1
Mode penandaan gambar referensi jendela geser: Mode penandaan yang menyediakan mekanisme first-in first-out untuk gambar referensi jangka pendek. Mode penandaan gambar referensi adaptif: Mode penandaan gambar referensi yang menyediakan elemen sintaks untuk menentukan penandaan gambar referensi sebagai "tidak digunakan untuk referensi" dan untuk menetapkan indeks bingkai jangka panjang.

RefPicMarkingOperationsCommandsCount

UINT yang menentukan jumlah operasi penandaan gambar referensi yang terkait dengan bingkai saat ini. Mengharuskan adaptive_ref_pic_marking_mode_flag diatur ke 1.

pRefPicMarkingOperationsCommands

Penunjuk ke array struktur D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION yang mewakili daftar gambar referensi yang menandai operasi yang terkait dengan bingkai saat ini. Operasi yang dijelaskan oleh daftar ini perlu tercermin dalam deskriptor DPB yang sesuai selama sesi pengodean.

List0RefPicModificationsCount

UINT yang menentukan jumlah item di pList0RefPicModifications.

pList0RefPicModifications

Penunjuk ke array struktur D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION yang mewakili daftar operasi modifikasi daftar gambar referensi untuk daftar pList0ReferenceFrames .

List1RefPicModificationsCount

UINT yang menentukan jumlah item dalam pList1RefPicModifications.

pList1RefPicModifications

Penunjuk ke array struktur D3D12_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_LIST_MODIFICATION_OPERATION yang mewakili daftar operasi modifikasi daftar gambar referensi untuk daftar pList1ReferenceFrames .

QPMapValuesCount

UINT yang menentukan jumlah elemen yang ada di pRateControlQPMap. Ini harus cocok dengan jumlah blok pengkodean dalam bingkai, membulatkan resolusi bingkai ke nilai yang paling selaras.

pRateControlQPMap

Penunjuk ke array Int8 yang berisi, dalam urutan pemindaian baris/kolom, nilai peta QP yang akan digunakan pada setiap wilayah kuadrat untuk bingkai ini. Dimensi peta QP dapat dihitung menggunakan resolusi saat ini dan D3D12_FEATURE_DATA_VIDEO_ENCODER_RESOLUTION_SUPPORT_LIMITS. QPMapRegionPixelsSize menyampaikan ukuran wilayah kuadrat.

Keterangan

Perhatikan bahwa jika bingkai saat ini ditandai sebagai gambar referensi, output harus berisi gambar yang direkonstruksi bersama dengan bitstream bagi host untuk menempatkannya di perintah mendatang dalam daftar referensi gambar yang direkonstruksi. Perhatikan bahwa mungkin ada batasan untuk beberapa jenis bingkai yang akan ditandai sebagai referensi, periksa dukungan fitur sebelum mengatur nilai tersebut.

Tabel berikut mencantumkan Nilai SPS dan PPS yang diharapkan untuk pengodean H264.

pemetaan Level_idc untuk H264

Tingkat D3D12 level_idc yang diharapkan Catatan
D3D12_VIDEO_ENCODER_LEVELS_H264_1 10 Tidak ada
D3D12_VIDEO_ENCODER_LEVELS_H264_1b 11 SPS.constraint_set3 harus 1
D3D12_VIDEO_ENCODER_LEVELS_H264_11 11 Tidak ada
D3D12_VIDEO_ENCODER_LEVELS_H264_12 12 Tidak ada
D3D12_VIDEO_ENCODER_LEVELS_H264_13 13 Tidak ada
D3D12_VIDEO_ENCODER_LEVELS_H264_2 20 Tidak ada
D3D12_VIDEO_ENCODER_LEVELS_H264_21 21 Tidak ada
D3D12_VIDEO_ENCODER_LEVELS_H264_22 22 Tidak ada
D3D12_VIDEO_ENCODER_LEVELS_H264_3 30 Tidak ada
D3D12_VIDEO_ENCODER_LEVELS_H264_31 31 Tidak ada
D3D12_VIDEO_ENCODER_LEVELS_H264_32 32 Tidak ada
D3D12_VIDEO_ENCODER_LEVELS_H264_4 40 Tidak ada
D3D12_VIDEO_ENCODER_LEVELS_H264_41 41 Tidak ada
D3D12_VIDEO_ENCODER_LEVELS_H264_42 42 Tidak ada
D3D12_VIDEO_ENCODER_LEVELS_H264_5 50 Tidak ada
D3D12_VIDEO_ENCODER_LEVELS_H264_51 51 Tidak ada
D3D12_VIDEO_ENCODER_LEVELS_H264_52 52 Tidak ada
D3D12_VIDEO_ENCODER_LEVELS_H264_6 60 Tidak ada
D3D12_VIDEO_ENCODER_LEVELS_H264_61 61 Tidak ada
D3D12_VIDEO_ENCODER_LEVELS_H264_62 62 Tidak ada

Parameter Urutan H264 Mengatur nilai yang diharapkan

Elemen Sintaks Nilai default yang diharapkan Catatan
profile_idc Nilai enum H264_PROFILE_MAIN/H264_PROFILE_HIGH/H264_PROFILE_HIGH10 Tidak ada
constraint_set0_flag 0 Tidak ada
constraint_set1_flag 0 Tidak ada
constraint_set2_flag 0 Tidak ada
constraint_set3_flag 0 1 jika menggunakan D3D12_VIDEO_ENCODER_LEVELS_H264_1b
constraint_set4_flag 0 Tidak ada
constraint_set5_flag 0 Tidak ada
reserved_zero_2bits 0 Tidak ada
level_idc Silakan lihat tabel di atas untuk tingkat H264 Tidak ada
seq_parameter_set_id Spesifik pengguna Tidak ada
chroma_format_idc 1 Untuk penggunaan dengan format P010 atau NV12 YUV 4.2.0 saja
bit_depth_luma_minus8 0 untuk NV12, 2 untuk P010 Tidak ada
qpprime_y_zero_transform_bypass_flag 0 Tidak ada
seq_scaling_matrix_present_flag 0 Tidak ada
log2_max_frame_num_minus4 Sama seperti di D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 Tidak ada
pic_order_cnt_type Sama seperti di D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 Hanya mode 0 dan 2 yang didukung di API ini
log2_max_pic_order_cnt_lsb_minus4 Sama seperti di D3D12_VIDEO_ENCODER_SEQUENCE_GOP_STRUCTURE_H264 Hanya jika pic_order_cnt_type == 0
max_num_ref_frames Jumlah maksimum gambar referensi yang digunakan dalam sesi enkode Tidak ada
gaps_in_frame_num_value_allowed_flag 0 Tidak ada
pic_width_in_mbs_minus1 std::ceil(sequenceTargetResolution.Width / 16.0)) - 1; Tidak ada
pic_height_in_map_units_minus1 std::ceil(sequenceTargetResolution.Height / 16.0)) - 1; Tidak ada
frame_mbs_only_flag 0 Tidak ada dukungan interlace
direct_8x8_inference_flag Berdasarkan D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_ADAPTIVE_8x8_TRANSFORM Tidak ada
frame_cropping_flag 0 atau 1 tergantung pada resolusi enkode yang diratakan 16 atau tidak Tidak ada
frame_cropping_rect_left_offset 0 Hanya jika frame_cropping_flag = 1
frame_cropping_rect_right_offset ((pic_width_in_mbs_minus1+1) * 16 - sequenceTargetResolution.Width) / 2 Hanya jika frame_cropping_flag = 1
frame_cropping_rect_top_offset ((pic_height_in_map_units_minus1+1) * 16 - sequenceTargetResolution.Height) / 2 Hanya jika frame_cropping_flag = 1
frame_cropping_rect_bottom_offset 0 Hanya jika frame_cropping_flag = 1
vui_paramenters_present_flag 0 Tidak ada

Parameter Gambar H264 Mengatur nilai yang diharapkan

Elemen sintaks Nilai default yang diharapkan Catatan
pic_parameter_set_id Spesifik pengguna Tidak ada
seq_parameter_set_id Spesifik pengguna Tidak ada
entropy_coding_mode_flag Berdasarkan D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_ENABLE_CABAC_ENCODING Tidak ada
pic_order_present_flag 0 Hanya dukungan untuk pic_cnt_type = 0, 2
num_slice_groups_minus1 0 Tidak ada
num_ref_idx_l1_active_minus1 std::max(static_cast<INT>(pictureControl.List0ReferenceFramesCount) - 1, 0) Tidak ada
num_ref_idx_l0_active_minus1 std::max(static_cast<INT>(pictureControl.List1ReferenceFramesCount) - 1, 0) Tidak ada
weighted_pred_flag 0 Tidak ada
weighted_bipred_idc 0 Tidak ada
pic_init_qp_minus26 0 Tidak ada
pic_init_qs_minus26 0 Tidak ada
chroma_qp_index_offset 0 Tidak ada
deblocking_filter_control_present_flag 1 Tidak ada
constrained_intra_pred_flag Berdasarkan D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_CONSTRAINED_INTRAPREDICTION Tidak ada
redundant_pic_cnt_present_flag 0 Tidak ada
transform_8x8_mode_flag Berdasarkan D3D12_VIDEO_ENCODER_CODEC_CONFIGURATION_H264_FLAG_USE_ADAPTIVE_8x8_TRANSFORM Hanya jika menggunakan profil Tinggi
pic_scaling_matrix_present_flag 0 Tidak ada
second_chroma_qp_index_offset 0 Tidak ada

Persyaratan

   
Klien minimum yang didukung Windows Build 22000
Server minimum yang didukung Windows Build 22000
Header d3d12video.h