Condividi tramite


struttura D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION_0082_0 (d3d12umddi.h)

La struttura D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION_0082_0 descrive le modifiche nelle immagini di riferimento come operazioni di memoria come tupla di un identificatore di operazione e i parametri associati necessari per l'operazione.

Sintassi

typedef struct D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION_0082_0 {
  UCHAR memory_management_control_operation;
  UINT  difference_of_pic_nums_minus1;
  UINT  long_term_pic_num;
  UINT  long_term_frame_idx;
  UINT  max_long_term_frame_idx_plus1;
} D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_REFERENCE_PICTURE_MARKING_OPERATION_0082_0;

Members

memory_management_control_operation

Operazione di controllo da applicare per influire sullo stato di contrassegno dell'immagine di riferimento. I valori validi dell'operazione seguono.

Valore Descrizione
0 Termina memory_management_control_operation ciclo di elementi della sintassi.
1 Contrassegnare un'immagine di riferimento a breve termine come "inutilizzata per riferimento".
2 Contrassegnare un'immagine di riferimento a lungo termine come "inutilizzata per riferimento".
3 Contrassegnare un'immagine di riferimento a breve termine come "usata per riferimento a lungo termine" e assegnarvi un indice frame a lungo termine.
4 Specificare l'indice di frame a lungo termine massimo e contrassegnare tutte le immagini di riferimento a lungo termine con indici di frame a lungo termine maggiori del valore massimo come "inutilizzato per riferimento".
5 Contrassegnare tutte le immagini di riferimento come "inutilizzate per riferimento" e impostare la variabile MaxLongTermFrameIdx su "nessun indice frame a lungo termine".
6 Contrassegnare l'immagine corrente come "usata per riferimento a lungo termine" e assegnarvi un indice frame a lungo termine.

difference_of_pic_nums_minus1

Questo membro viene usato con memory_management_control_operation uguale a 3 o 1 per assegnare un indice frame a lungo termine a un'immagine di riferimento a breve termine o per contrassegnare un'immagine di riferimento a breve termine come "inutilizzata per riferimento". Quando il memory_management_control_operation associato viene elaborato dal processo di decodifica, il numero di immagine risultante derivato da difference_of_pic_nums_minus1 deve essere un numero di immagine assegnato a una delle immagini di riferimento contrassegnate come "utilizzate per riferimento" e non precedentemente assegnate a un indice di frame a lungo termine.

long_term_pic_num

Questo membro viene usato con memory_management_control_operation uguale a 2 per contrassegnare un'immagine di riferimento a lungo termine come "inutilizzata per riferimento". Quando il memory_management_control_operation associato viene elaborato dal processo di decodifica, long_term_pic_num deve essere uguale a un numero di immagine a lungo termine assegnato a una delle immagini di riferimento attualmente contrassegnate come "utilizzate per riferimento a lungo termine".

long_term_frame_idx

Questo membro viene usato con memory_management_control_operation uguale a 3 o 6 per assegnare un indice frame a lungo termine a un'immagine. Quando il memory_management_control_operation associato viene elaborato dal processo di decodifica, il valore di long_term_frame_idx deve essere compreso nell'intervallo compreso tra 0 e MaxLongTermFrameIdx, inclusi.

max_long_term_frame_idx_plus1

Il valore meno 1 specifica il valore massimo dell'indice frame a lungo termine consentito per le immagini di riferimento a lungo termine (fino alla ricezione di un altro valore di max_long_term_frame_idx_plus1). Il valore di max_long_term_frame_idx_plus1 deve essere compreso nell'intervallo compreso tra 0 e max_num_ref_frames, inclusi.

Commenti

La variabile MaxLongTermFrameIdx è derivata come segue:

  • Se max_long_term_frame_idx_plus1 è uguale a 0, MaxLongTermFrameIdx è impostato su "nessun indice di frame a lungo termine".
  • Se max_long_term_frame_idx_plus1 è maggiore di 0, MaxLongTermFrameIdx è impostato su max_long_term_frame_idx_plus1 − 1.

L'operazione di contrassegnare il frame corrente come riferimento a breve termine viene data da un flag presente nella struttura D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_FLAGS_0080 con i valori PictureOrderCountNumber e FrameDecodingOrderNumber corrispondenti indicati nella struttura del controllo immagine associato.

La variabile max_num_ref_frames è indicata dalla capacità massima del buffer immagine decodificato (DPB).

Si noti che per contrassegnare un fotogramma IDR (InstantAneOus Decoder Refresh) come riferimento a lungo termine, il meccanismo esplicito proposto consiste nel contrassegnarlo come riferimento a breve termine, impostando D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_FLAG_0080_USED_AS_REFERENCE_PICTURE quando si chiama EncodeFrame per il frame IDR e successivamente promuovendolo come frame di riferimento a lungo termine usando l'operazione di gestione della memoria '3' per contrassegnare un'immagine di riferimento a breve termine come "usata per riferimento a lungo termine" e assegnare un elemento indice frame a lungo termine.

In alternativa, se si codifica un frame IDR e si imposta adaptive_ref_pic_marking_mode_flag = 1, il driver presuppone che il client stia tentando di impostare l'intestazione della sezione H264 long_term_reference_flag e lo farà nel bitstream di output per la chiamata EncodeFrame .

Per altre informazioni sul processo di contrassegno delle immagini, vedere la specifica H.264, sezione 8.2.5.4 "Processo di contrassegno immagine di riferimento decodificato per il controllo della memoria adattiva".

Per informazioni generali, vedere Codifica video D3D12 .

Requisiti

Requisito Valore
Client minimo supportato Windows 11 (WDDM 3.0)
Intestazione d3d12umddi.h

Vedi anche

D3D12DDI_VIDEO_ENCODER_PICTURE_CONTROL_CODEC_DATA_H264_0082_0

PFND3D12DDI_VIDEO_ENCODE_FRAME_0082_0