@@ -153,7 +153,9 @@ NriEnum(VideoEncodeFrameType, uint8_t,
153153);
154154
155155NriEnum (VideoEncodeRateControlMode , uint8_t ,
156- CQP
156+ CQP ,
157+ CBR ,
158+ VBR
157159);
158160
159161NriEnum (VideoAV1ReferenceName , uint8_t ,
@@ -286,6 +288,14 @@ NriStruct(VideoDecodePictureStates) {
286288 bool releaseAfterDecode ; // if true, caller should record decodeWrite -> afterDecode on the video decode queue
287289};
288290
291+ NriStruct (VideoEncodePictureStates ) {
292+ Nri (AccessLayoutStage ) encodeRead ; // state required before CmdEncodeVideo reads the source picture
293+ Nri (AccessLayoutStage ) encodeWrite ; // state required before CmdEncodeVideo writes the reconstructed picture
294+ Nri (AccessLayoutStage ) afterEncode ; // optional state to transition to on the video encode queue after CmdEncodeVideo
295+ Nri (AccessLayoutStage ) graphicsBefore ; // state to use as "before" when the graphics queue consumes the reconstructed picture
296+ bool releaseAfterEncode ; // if true, caller should record encodeWrite -> afterEncode on the video encode queue
297+ };
298+
289299NriStruct (VideoH264SequenceParameterSetDesc ) {
290300 Nri (VideoH264SequenceParameterSetBits ) flags ;
291301 uint8_t profileIdc ;
@@ -318,9 +328,9 @@ NriStruct(VideoH264PictureParameterSetDesc) {
318328};
319329
320330NriStruct (VideoH264SessionParametersDesc ) {
321- NriOptional const NriPtr (VideoH264SequenceParameterSetDesc ) sequenceParameterSets ; // if provided, must include "sequenceParameterSetNum" entries
331+ const NriPtr (VideoH264SequenceParameterSetDesc ) sequenceParameterSets ;
322332 uint32_t sequenceParameterSetNum ;
323- NriOptional const NriPtr (VideoH264PictureParameterSetDesc ) pictureParameterSets ; // if provided, must include "pictureParameterSetNum" entries
333+ const NriPtr (VideoH264PictureParameterSetDesc ) pictureParameterSets ;
324334 uint32_t pictureParameterSetNum ;
325335 NriOptional uint32_t maxSequenceParameterSetNum ; // defaults to "sequenceParameterSetNum"
326336 NriOptional uint32_t maxPictureParameterSetNum ; // defaults to "pictureParameterSetNum"
@@ -330,7 +340,6 @@ NriStruct(VideoH265ProfileTierLevelDesc) {
330340 Nri (VideoH265ProfileTierLevelBits ) flags ;
331341 uint8_t generalProfileIdc ;
332342 uint8_t generalLevelIdc ;
333- uint16_t reserved ;
334343};
335344
336345NriStruct (VideoH265DecPicBufMgrDesc ) {
@@ -352,7 +361,6 @@ NriStruct(VideoH265ShortTermRefPicSetDesc) {
352361 Nri (VideoH265ShortTermRefPicSetBits ) flags ;
353362 uint8_t numNegativePics ;
354363 uint8_t numPositivePics ;
355- uint8_t reserved ;
356364 uint32_t deltaIdxMinus1 ;
357365 uint16_t useDeltaFlag ;
358366 uint16_t absDeltaRpsMinus1 ;
@@ -372,7 +380,6 @@ NriStruct(VideoH265VideoParameterSetDesc) {
372380 Nri (VideoH265VideoParameterSetBits ) flags ;
373381 uint8_t videoParameterSetId ;
374382 uint8_t maxSubLayersMinus1 ;
375- uint16_t reserved ;
376383 uint32_t numUnitsInTick ;
377384 uint32_t timeScale ;
378385 uint32_t numTicksPocDiffOneMinus1 ;
@@ -397,8 +404,6 @@ NriStruct(VideoH265SequenceParameterSetDesc) {
397404 uint8_t log2DiffMaxMinLumaTransformBlockSize ;
398405 uint8_t maxTransformHierarchyDepthInter ;
399406 uint8_t maxTransformHierarchyDepthIntra ;
400- uint8_t numShortTermRefPicSets ;
401- uint8_t numLongTermRefPicsSps ;
402407 uint8_t pcmSampleBitDepthLumaMinus1 ;
403408 uint8_t pcmSampleBitDepthChromaMinus1 ;
404409 uint8_t log2MinPcmLumaCodingBlockSizeMinus3 ;
@@ -407,10 +412,12 @@ NriStruct(VideoH265SequenceParameterSetDesc) {
407412 uint32_t confWinRightOffset ;
408413 uint32_t confWinTopOffset ;
409414 uint32_t confWinBottomOffset ;
415+ const NriPtr (VideoH265ShortTermRefPicSetDesc ) shortTermRefPicSets ;
416+ uint8_t numShortTermRefPicSets ;
417+ uint8_t numLongTermRefPicsSps ;
410418 Nri (VideoH265ProfileTierLevelDesc ) profileTierLevel ;
411419 Nri (VideoH265DecPicBufMgrDesc ) decPicBufMgr ;
412420 NriOptional const NriPtr (VideoH265ScalingListsDesc ) scalingLists ;
413- NriOptional const NriPtr (VideoH265ShortTermRefPicSetDesc ) shortTermRefPicSets ; // if provided, must include "numShortTermRefPicSets" entries
414421 NriOptional const NriPtr (VideoH265LongTermRefPicsSpsDesc ) longTermRefPicsSps ;
415422};
416423
@@ -431,18 +438,17 @@ NriStruct(VideoH265PictureParameterSetDesc) {
431438 uint8_t log2ParallelMergeLevelMinus2 ;
432439 uint8_t tileColumnNumMinus1 ;
433440 uint8_t tileRowNumMinus1 ;
434- uint8_t reserved ;
435441 uint16_t columnWidthMinus1 [19 ];
436442 uint16_t rowHeightMinus1 [21 ];
437443 NriOptional const NriPtr (VideoH265ScalingListsDesc ) scalingLists ;
438444};
439445
440446NriStruct (VideoH265SessionParametersDesc ) {
441- NriOptional const NriPtr (VideoH265VideoParameterSetDesc ) videoParameterSets ; // if provided, must include "videoParameterSetNum" entries
447+ const NriPtr (VideoH265VideoParameterSetDesc ) videoParameterSets ;
442448 uint32_t videoParameterSetNum ;
443- NriOptional const NriPtr (VideoH265SequenceParameterSetDesc ) sequenceParameterSets ; // if provided, must include "sequenceParameterSetNum" entries
449+ const NriPtr (VideoH265SequenceParameterSetDesc ) sequenceParameterSets ;
444450 uint32_t sequenceParameterSetNum ;
445- NriOptional const NriPtr (VideoH265PictureParameterSetDesc ) pictureParameterSets ; // if provided, must include "pictureParameterSetNum" entries
451+ const NriPtr (VideoH265PictureParameterSetDesc ) pictureParameterSets ;
446452 uint32_t pictureParameterSetNum ;
447453 NriOptional uint32_t maxVideoParameterSetNum ; // defaults to "videoParameterSetNum"
448454 NriOptional uint32_t maxSequenceParameterSetNum ; // defaults to "sequenceParameterSetNum"
@@ -517,7 +523,6 @@ NriStruct(VideoH264ReferenceDesc) {
517523
518524NriStruct (VideoH264DecodeReferenceDesc ) {
519525 Nri (VideoH264DecodeReferenceBits ) flags ;
520- uint8_t reserved ;
521526 uint16_t frameNum ;
522527 uint32_t slot ;
523528 int32_t topFieldOrderCount ;
@@ -532,10 +537,10 @@ NriStruct(VideoH264DecodePictureDesc) {
532537 uint16_t idrPictureId ;
533538 int32_t topFieldOrderCount ;
534539 int32_t bottomFieldOrderCount ;
535- NriOptional const uint32_t * sliceOffsets ; // if provided, must include "sliceOffsetNum" entries
540+ const uint32_t * sliceOffsets ;
536541 uint32_t sliceOffsetNum ;
537542 uint32_t referenceSlot ; // used when "flags" includes REFERENCE; falls back to VideoDecodeDesc::dstSlot when zero
538- NriOptional const NriPtr (VideoH264DecodeReferenceDesc ) references ; // if provided, must include "referenceNum" entries
543+ const NriPtr (VideoH264DecodeReferenceDesc ) references ;
539544 uint32_t referenceNum ;
540545};
541546
@@ -555,11 +560,10 @@ NriStruct(VideoH265DecodePictureDesc) {
555560 uint8_t pictureParameterSetId ;
556561 int32_t pictureOrderCount ;
557562 uint8_t numDeltaPocsOfRefRpsIdx ;
558- uint8_t reserved ;
559563 uint16_t numBitsForShortTermRefPicSetInSlice ;
560- NriOptional const uint32_t * sliceSegmentOffsets ; // if provided, must include "sliceSegmentOffsetNum" entries
564+ const uint32_t * sliceSegmentOffsets ;
561565 uint32_t sliceSegmentOffsetNum ;
562- NriOptional const NriPtr (VideoH265ReferenceDesc ) references ; // if provided, must include "referenceNum" entries
566+ const NriPtr (VideoH265ReferenceDesc ) references ;
563567 uint32_t referenceNum ;
564568};
565569
@@ -568,8 +572,15 @@ NriStruct(VideoEncodeRateControlDesc) {
568572 uint8_t qpI ;
569573 uint8_t qpP ;
570574 uint8_t qpB ;
575+ NriOptional uint8_t qpMin ;
576+ NriOptional uint8_t qpMax ;
571577 uint32_t frameRateNumerator ;
572578 uint32_t frameRateDenominator ;
579+ uint64_t targetBitrate ; // CBR target bitrate, or VBR average bitrate
580+ NriOptional uint64_t maxBitrate ; // VBR peak bitrate; defaults to "targetBitrate"
581+ NriOptional uint64_t maxFrameBitSize ;
582+ NriOptional uint32_t virtualBufferSizeMs ;
583+ NriOptional uint32_t initialVirtualBufferSizeMs ;
573584};
574585
575586NriStruct (VideoEncodePictureDesc ) {
@@ -583,8 +594,7 @@ NriStruct(VideoEncodePictureDesc) {
583594NriStruct (VideoH264PictureDesc ) {
584595 uint8_t sequenceParameterSetId ;
585596 uint8_t pictureParameterSetId ;
586- uint16_t reserved ;
587- NriOptional const NriPtr (VideoH264ReferenceDesc ) references ; // if provided, must include "referenceNum" entries
597+ const NriPtr (VideoH264ReferenceDesc ) references ;
588598 uint32_t referenceNum ;
589599};
590600
@@ -604,7 +614,6 @@ NriStruct(VideoAV1TileLayoutDesc) {
604614 uint8_t tileSizeBytesMinus1 ;
605615 uint8_t uniformSpacing ;
606616 uint16_t contextUpdateTileId ;
607- uint16_t reserved ;
608617 NriOptional const uint16_t * miColumnStarts ; // if provided, must include "columnNum + 1" entries
609618 NriOptional const uint16_t * miRowStarts ; // if provided, must include "rowNum + 1" entries
610619 NriOptional const uint16_t * widthInSuperblocksMinus1 ; // if provided, must include "columnNum" entries
@@ -622,7 +631,6 @@ NriStruct(VideoAV1QuantizationDesc) {
622631 uint8_t qmV ;
623632 uint8_t usingQmatrix ;
624633 uint8_t diffUvDelta ;
625- uint8_t reserved [2 ];
626634};
627635
628636NriStruct (VideoAV1LoopFilterDesc ) {
@@ -633,7 +641,6 @@ NriStruct(VideoAV1LoopFilterDesc) {
633641 uint8_t updateModeDelta ;
634642 int8_t refDeltas [8 ];
635643 int8_t modeDeltas [2 ];
636- uint8_t reserved [2 ];
637644};
638645
639646NriStruct (VideoAV1CdefDesc ) {
@@ -645,15 +652,13 @@ NriStruct(VideoAV1CdefDesc) {
645652
646653NriStruct (VideoAV1SegmentationDesc ) {
647654 uint8_t featureEnabled [8 ];
648- uint8_t reserved [8 ];
649655 int16_t featureData [8 ][8 ];
650656};
651657
652658NriStruct (VideoAV1LoopRestorationDesc ) {
653659 uint8_t frameRestorationType [3 ];
654660 uint8_t lrUnitShift ;
655661 uint8_t lrUvShift ;
656- uint8_t reserved [3 ];
657662};
658663
659664NriStruct (VideoAV1GlobalMotionDesc ) {
@@ -718,7 +723,7 @@ NriStruct(VideoAV1PictureDesc) {
718723 NriOptional const NriPtr (VideoAV1LoopRestorationDesc ) loopRestoration ;
719724 NriOptional const NriPtr (VideoAV1GlobalMotionDesc ) globalMotion ;
720725 NriOptional const uint8_t * orderHints ; // if provided, must include 8 entries
721- NriOptional const NriPtr (VideoAV1ReferenceDesc ) references ; // if provided, must include "referenceNum" DPB snapshot entries
726+ const NriPtr (VideoAV1ReferenceDesc ) references ;
722727 uint32_t referenceNum ;
723728};
724729
@@ -728,7 +733,6 @@ NriStruct(VideoAV1DecodeTileDesc) {
728733 uint16_t row ;
729734 uint16_t column ;
730735 uint8_t anchorFrame ;
731- uint8_t reserved [3 ];
732736};
733737
734738NriStruct (VideoAV1DecodePictureDesc ) {
@@ -759,9 +763,9 @@ NriStruct(VideoAV1DecodePictureDesc) {
759763 NriOptional const NriPtr (VideoAV1GlobalMotionDesc ) globalMotion ;
760764 NriOptional const NriPtr (VideoAV1FilmGrainDesc ) filmGrain ;
761765 NriOptional const uint8_t * orderHints ; // if provided, must include 8 entries
762- NriOptional const NriPtr (VideoAV1DecodeTileDesc ) tiles ; // if provided, must include "tileNum" entries
766+ const NriPtr (VideoAV1DecodeTileDesc ) tiles ;
763767 uint32_t tileNum ;
764- NriOptional const NriPtr (VideoAV1ReferenceDesc ) references ; // if provided, must include "referenceNum" DPB snapshot entries
768+ const NriPtr (VideoAV1ReferenceDesc ) references ;
765769 uint32_t referenceNum ;
766770};
767771
@@ -771,10 +775,10 @@ NriStruct(VideoDecodeDesc) {
771775 Nri (VideoBitstreamRange ) bitstream ;
772776 NriPtr (VideoPicture ) dstPicture ;
773777 NriOptional NriPtr (VideoPicture ) setupPicture ; // if provided, used as the reconstructed/DPB setup reference instead of "dstPicture"
774- NriOptional const NriPtr (VideoReference ) references ; // if provided, must include "referenceNum" entries
778+ const NriPtr (VideoReference ) references ;
775779 uint32_t referenceNum ;
776780 uint32_t dstSlot ;
777- NriOptional const NriPtr (VideoDecodeArgument ) arguments ; // if provided, must include "argumentNum" entries
781+ const NriPtr (VideoDecodeArgument ) arguments ;
778782 uint32_t argumentNum ;
779783 NriOptional const NriPtr (VideoH264DecodePictureDesc ) h264PictureDesc ;
780784 NriOptional const NriPtr (VideoH265DecodePictureDesc ) h265PictureDesc ;
@@ -836,12 +840,12 @@ NriStruct(VideoEncodeDesc) {
836840 uint64_t metadataOffset ;
837841 NriOptional NriPtr (Buffer ) resolvedMetadata ; // If provided, contains "VideoEncodeFeedback" after execution.
838842 uint64_t resolvedMetadataOffset ;
839- NriOptional const NriPtr (VideoReference ) references ; // if provided, must include "referenceNum" entries
843+ const NriPtr (VideoReference ) references ;
840844 uint32_t referenceNum ;
841845 uint32_t reconstructedSlot ;
842846 NriOptional const NriPtr (VideoH264PictureDesc ) h264PictureDesc ;
843847 NriOptional const NriPtr (VideoAV1PictureDesc ) av1PictureDesc ;
844- NriOptional const NriPtr (VideoH265ReferenceDesc ) h265ReferenceDescs ; // if provided, must include "referenceNum" entries
848+ const NriPtr (VideoH265ReferenceDesc ) h265ReferenceDescs ;
845849};
846850
847851// Threadsafe: no
@@ -857,6 +861,8 @@ NriStruct(VideoInterface) {
857861 void (NRI_CALL * DestroyVideoPicture ) (NriPtr (VideoPicture ) videoPicture );
858862 // Returns backend-specific states for explicit caller-recorded decode picture barriers.
859863 Nri (Result ) (NRI_CALL * GetVideoDecodePictureStates ) (const NriRef (VideoPicture ) videoPicture , NriOut NriRef (VideoDecodePictureStates ) states );
864+ // Returns backend-specific states for explicit caller-recorded encode picture barriers.
865+ Nri (Result ) (NRI_CALL * GetVideoEncodePictureStates ) (const NriRef (VideoPicture ) videoPicture , NriOut NriRef (VideoEncodePictureStates ) states );
860866 // Serializes H.264 SPS/PPS or H.265 VPS/SPS/PPS parameter sets to Annex-B bytes.
861867 // Pass "dst = nullptr" to query the required byte size in "writtenSize".
862868 Nri (Result ) (NRI_CALL * WriteVideoAnnexBParameterSets ) (NriRef (VideoAnnexBParameterSetsDesc ) annexBParameterSetsDesc );
0 commit comments