Skip to content

Commit 2590d75

Browse files
krajunvzlatinski
authored andcommitted
Minor cleanup:
* Cleanup pNext chain of structures that extends VkVideoReferenceSlotInfoKHR. Use `vk::ChainNextVkStruct()` helper function to chain the structures. * Group together pNext chaining of structure that extends VkVideoEncodeInfoKHR in the codec specific EnodeFrameInfo reset methods (eg. VkVideoEncodeFrameInfoH265::Reset()) Signed-off-by: Raju Konda <kraju@nvidia.com>
1 parent 0bb8249 commit 2590d75

File tree

6 files changed

+58
-51
lines changed

6 files changed

+58
-51
lines changed

vk_video_encoder/libs/VkVideoEncoder/VkVideoEncoderAV1.cpp

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -255,15 +255,17 @@ VkResult VkVideoEncoderAV1::ProcessDpb(VkSharedBaseObj<VkVideoEncodeFrameInfo>&
255255
if (encodeFrameInfo->setupImageResource != nullptr) {
256256
assert(setupImageViewPictureResource);
257257
m_dpbAV1->FillStdReferenceInfo((uint8_t) dpbIndx, &pFrameInfo->stdReferenceInfo[numReferenceSlots]);
258-
pFrameInfo->dpbSlotInfo[numReferenceSlots].sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_DPB_SLOT_INFO_KHR;
259-
pFrameInfo->dpbSlotInfo[numReferenceSlots].pNext = nullptr;
260-
pFrameInfo->dpbSlotInfo[numReferenceSlots].pStdReferenceInfo = &pFrameInfo->stdReferenceInfo[numReferenceSlots];
261258

262259
pFrameInfo->referenceSlotsInfo[numReferenceSlots].sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR;
263-
pFrameInfo->referenceSlotsInfo[numReferenceSlots].pNext = &pFrameInfo->dpbSlotInfo[numReferenceSlots];
260+
pFrameInfo->referenceSlotsInfo[numReferenceSlots].pNext = nullptr;
264261
pFrameInfo->referenceSlotsInfo[numReferenceSlots].slotIndex = dpbIndx;
265262
pFrameInfo->referenceSlotsInfo[numReferenceSlots].pPictureResource = setupImageViewPictureResource;
266263

264+
pFrameInfo->dpbSlotInfo[numReferenceSlots].sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_DPB_SLOT_INFO_KHR;
265+
pFrameInfo->dpbSlotInfo[numReferenceSlots].pNext = nullptr;
266+
pFrameInfo->dpbSlotInfo[numReferenceSlots].pStdReferenceInfo = &pFrameInfo->stdReferenceInfo[numReferenceSlots];
267+
vk::ChainNextVkStruct(pFrameInfo->referenceSlotsInfo[numReferenceSlots], pFrameInfo->dpbSlotInfo[numReferenceSlots]);
268+
267269
pFrameInfo->setupReferenceSlotInfo = pFrameInfo->referenceSlotsInfo[numReferenceSlots];
268270
pFrameInfo->encodeInfo.pSetupReferenceSlot = &pFrameInfo->setupReferenceSlotInfo;
269271

@@ -315,26 +317,28 @@ VkResult VkVideoEncoderAV1::ProcessDpb(VkSharedBaseObj<VkVideoEncodeFrameInfo>&
315317
}
316318

317319
m_dpbAV1->FillStdReferenceInfo((uint8_t)dpbIdx, &pFrameInfo->stdReferenceInfo[numReferenceSlots]);
320+
321+
pFrameInfo->dpbImageResources[numReferenceSlots] = dpbImageView;
322+
323+
pFrameInfo->referenceSlotsInfo[numReferenceSlots].sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR;
324+
pFrameInfo->referenceSlotsInfo[numReferenceSlots].pNext = nullptr;
325+
pFrameInfo->referenceSlotsInfo[numReferenceSlots].slotIndex = dpbIdx;
326+
pFrameInfo->referenceSlotsInfo[numReferenceSlots].pPictureResource =
327+
pFrameInfo->dpbImageResources[numReferenceSlots]->GetPictureResourceInfo();
318328

319329
pFrameInfo->dpbSlotInfo[numReferenceSlots].sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_DPB_SLOT_INFO_KHR;
320330
pFrameInfo->dpbSlotInfo[numReferenceSlots].pNext = nullptr;
321331
pFrameInfo->dpbSlotInfo[numReferenceSlots].pStdReferenceInfo = &pFrameInfo->stdReferenceInfo[numReferenceSlots];
332+
vk::ChainNextVkStruct(pFrameInfo->referenceSlotsInfo[numReferenceSlots], pFrameInfo->dpbSlotInfo[numReferenceSlots]);
322333

323334
if (isIntraRefreshFrame) {
324335
pFrameInfo->referenceIntraRefreshInfo[numReferenceSlots].sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_INTRA_REFRESH_INFO_KHR;
336+
pFrameInfo->referenceIntraRefreshInfo[numReferenceSlots].pNext = nullptr;
325337
pFrameInfo->referenceIntraRefreshInfo[numReferenceSlots].dirtyIntraRefreshRegions =
326338
m_dpbAV1->GetDirtyIntraRefreshRegions((int8_t)dpbIdx);
327-
328-
pFrameInfo->dpbSlotInfo[numReferenceSlots].pNext = &pFrameInfo->referenceIntraRefreshInfo[numReferenceSlots];
339+
vk::ChainNextVkStruct(pFrameInfo->referenceSlotsInfo[numReferenceSlots], pFrameInfo->referenceIntraRefreshInfo[numReferenceSlots]);
329340
}
330341

331-
pFrameInfo->referenceSlotsInfo[numReferenceSlots].sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR;
332-
pFrameInfo->referenceSlotsInfo[numReferenceSlots].pNext = &pFrameInfo->dpbSlotInfo[numReferenceSlots];
333-
pFrameInfo->referenceSlotsInfo[numReferenceSlots].slotIndex = dpbIdx;
334-
pFrameInfo->dpbImageResources[numReferenceSlots] = dpbImageView;
335-
pFrameInfo->referenceSlotsInfo[numReferenceSlots].pPictureResource =
336-
pFrameInfo->dpbImageResources[numReferenceSlots]->GetPictureResourceInfo();
337-
338342
if (refNameMinus1 == pFrameInfo->stdPictureInfo.primary_ref_frame) {
339343
primaryRefCdfOnly = false;
340344
}
@@ -404,18 +408,20 @@ VkResult VkVideoEncoderAV1::ProcessDpb(VkSharedBaseObj<VkVideoEncodeFrameInfo>&
404408
} else {
405409
// reference itself is not present. Add it to the referenceSlotInfo and udpate referenceNameSlotIndices
406410
m_dpbAV1->FillStdReferenceInfo((uint8_t)dpbIdx, &pFrameInfo->stdReferenceInfo[numReferenceSlots]);
407-
408-
pFrameInfo->dpbSlotInfo[numReferenceSlots].sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_DPB_SLOT_INFO_KHR;
409-
pFrameInfo->dpbSlotInfo[numReferenceSlots].pNext = nullptr;
410-
pFrameInfo->dpbSlotInfo[numReferenceSlots].pStdReferenceInfo = &pFrameInfo->stdReferenceInfo[numReferenceSlots];
411+
412+
pFrameInfo->dpbImageResources[numReferenceSlots] = dpbImageView;
411413

412414
pFrameInfo->referenceSlotsInfo[numReferenceSlots].sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR;
413-
pFrameInfo->referenceSlotsInfo[numReferenceSlots].pNext = &pFrameInfo->dpbSlotInfo[numReferenceSlots];
415+
pFrameInfo->referenceSlotsInfo[numReferenceSlots].pNext = nullptr;
414416
pFrameInfo->referenceSlotsInfo[numReferenceSlots].slotIndex = dpbIdx;
415-
pFrameInfo->dpbImageResources[numReferenceSlots] = dpbImageView;
416417
pFrameInfo->referenceSlotsInfo[numReferenceSlots].pPictureResource =
417418
pFrameInfo->dpbImageResources[numReferenceSlots]->GetPictureResourceInfo();
418419

420+
pFrameInfo->dpbSlotInfo[numReferenceSlots].sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_DPB_SLOT_INFO_KHR;
421+
pFrameInfo->dpbSlotInfo[numReferenceSlots].pNext = nullptr;
422+
pFrameInfo->dpbSlotInfo[numReferenceSlots].pStdReferenceInfo = &pFrameInfo->stdReferenceInfo[numReferenceSlots];
423+
vk::ChainNextVkStruct(pFrameInfo->referenceSlotsInfo[numReferenceSlots], pFrameInfo->dpbSlotInfo[numReferenceSlots]);
424+
419425
assert(pFrameInfo->pictureInfo.referenceNameSlotIndices[pFrameInfo->stdPictureInfo.primary_ref_frame] == -1);
420426
pFrameInfo->pictureInfo.referenceNameSlotIndices[pFrameInfo->stdPictureInfo.primary_ref_frame] = dpbIdx;
421427

vk_video_encoder/libs/VkVideoEncoder/VkVideoEncoderAV1.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,11 @@ class VkVideoEncoderAV1 : public VkVideoEncoder
6666
}
6767

6868
virtual void Reset(bool releaseResources = true) {
69-
70-
pictureInfo.pNext = nullptr;
71-
7269
// Reset the base first
7370
VkVideoEncodeFrameInfo::Reset(releaseResources);
7471

7572
// After resetting the base structure parameters, start building the pNext chain again
73+
pictureInfo.pNext = nullptr;
7674
encodeInfo.pNext = &pictureInfo;
7775
}
7876

vk_video_encoder/libs/VkVideoEncoder/VkVideoEncoderH264.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -379,23 +379,25 @@ VkResult VkVideoEncoderH264::ProcessDpb(VkSharedBaseObj<VkVideoEncodeFrameInfo>&
379379

380380
m_dpb264->FillStdReferenceInfo(slotIndex, &pFrameInfo->stdReferenceInfo[numReferenceSlots]);
381381

382+
pFrameInfo->referenceSlotsInfo[numReferenceSlots].sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR;
383+
pFrameInfo->referenceSlotsInfo[numReferenceSlots].pNext = nullptr;
384+
pFrameInfo->referenceSlotsInfo[numReferenceSlots].slotIndex = slotIndex;
385+
pFrameInfo->referenceSlotsInfo[numReferenceSlots].pPictureResource =
386+
pFrameInfo->dpbImageResources[numReferenceSlots]->GetPictureResourceInfo();
387+
382388
pFrameInfo->stdDpbSlotInfo[numReferenceSlots].sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_DPB_SLOT_INFO_KHR;
389+
pFrameInfo->stdDpbSlotInfo[numReferenceSlots].pNext = nullptr;
383390
pFrameInfo->stdDpbSlotInfo[numReferenceSlots].pStdReferenceInfo = &pFrameInfo->stdReferenceInfo[numReferenceSlots];
391+
vk::ChainNextVkStruct(pFrameInfo->referenceSlotsInfo[numReferenceSlots], pFrameInfo->stdDpbSlotInfo[numReferenceSlots]);
384392

385393
if (isIntraRefreshFrame) {
386394
pFrameInfo->referenceIntraRefreshInfo[numReferenceSlots].sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_INTRA_REFRESH_INFO_KHR;
395+
pFrameInfo->referenceIntraRefreshInfo[numReferenceSlots].pNext = nullptr;
387396
pFrameInfo->referenceIntraRefreshInfo[numReferenceSlots].dirtyIntraRefreshRegions =
388397
m_dpb264->GetDirtyIntraRefreshRegions(slotIndex);
389-
390-
pFrameInfo->stdDpbSlotInfo[numReferenceSlots].pNext = &pFrameInfo->referenceIntraRefreshInfo[numReferenceSlots];
398+
vk::ChainNextVkStruct(pFrameInfo->referenceSlotsInfo[numReferenceSlots], pFrameInfo->referenceIntraRefreshInfo[numReferenceSlots]);
391399
}
392400

393-
pFrameInfo->referenceSlotsInfo[numReferenceSlots].sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR;
394-
pFrameInfo->referenceSlotsInfo[numReferenceSlots].pNext = &pFrameInfo->stdDpbSlotInfo[numReferenceSlots];
395-
pFrameInfo->referenceSlotsInfo[numReferenceSlots].slotIndex = slotIndex;
396-
pFrameInfo->referenceSlotsInfo[numReferenceSlots].pPictureResource =
397-
pFrameInfo->dpbImageResources[numReferenceSlots]->GetPictureResourceInfo();
398-
399401
numReferenceSlots++;
400402
assert(numReferenceSlots <= ARRAYSIZE(pFrameInfo->referenceSlotsInfo));
401403
}

vk_video_encoder/libs/VkVideoEncoder/VkVideoEncoderH264.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,11 @@ class VkVideoEncoderH264 : public VkVideoEncoder {
7979
};
8080

8181
virtual void Reset(bool releaseResources = true) {
82-
83-
pictureInfo.pNext = nullptr;
84-
8582
// Reset the base first
8683
VkVideoEncodeFrameInfo::Reset(releaseResources);
8784

8885
// After resetting the base structure parameters, start building the pNext chain again
86+
pictureInfo.pNext = nullptr;
8987
encodeInfo.pNext = &pictureInfo;
9088

9189
// Clear and check state

vk_video_encoder/libs/VkVideoEncoder/VkVideoEncoderH265.cpp

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -264,29 +264,31 @@ VkResult VkVideoEncoderH265::ProcessDpb(VkSharedBaseObj<VkVideoEncodeFrameInfo>&
264264

265265
bool refPicAvailable = m_dpb.GetRefPicture(dpbIndex, pFrameInfo->dpbImageResources[numReferenceSlots]);
266266
assert(refPicAvailable);
267-
if (!refPicAvailable) {
268-
return VK_ERROR_INITIALIZATION_FAILED;
269-
}
267+
if (!refPicAvailable) {
268+
return VK_ERROR_INITIALIZATION_FAILED;
269+
}
270270

271271
m_dpb.FillStdReferenceInfo(dpbIndex, &pFrameInfo->stdReferenceInfo[numReferenceSlots]);
272272

273+
pFrameInfo->referenceSlotsInfo[numReferenceSlots].sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR;
274+
pFrameInfo->referenceSlotsInfo[numReferenceSlots].pNext = nullptr;
275+
pFrameInfo->referenceSlotsInfo[numReferenceSlots].slotIndex = dpbIndex;
276+
pFrameInfo->referenceSlotsInfo[numReferenceSlots].pPictureResource =
277+
pFrameInfo->dpbImageResources[numReferenceSlots]->GetPictureResourceInfo();
278+
273279
pFrameInfo->stdDpbSlotInfo[numReferenceSlots].sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_KHR;
280+
pFrameInfo->stdDpbSlotInfo[numReferenceSlots].pNext = nullptr;
274281
pFrameInfo->stdDpbSlotInfo[numReferenceSlots].pStdReferenceInfo = &pFrameInfo->stdReferenceInfo[numReferenceSlots];
282+
vk::ChainNextVkStruct(pFrameInfo->referenceSlotsInfo[numReferenceSlots], pFrameInfo->stdDpbSlotInfo[numReferenceSlots]);
275283

276284
if (isIntraRefreshFrame) {
277285
pFrameInfo->referenceIntraRefreshInfo[numReferenceSlots].sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_INTRA_REFRESH_INFO_KHR;
286+
pFrameInfo->referenceIntraRefreshInfo[numReferenceSlots].pNext = nullptr;
278287
pFrameInfo->referenceIntraRefreshInfo[numReferenceSlots].dirtyIntraRefreshRegions =
279288
m_dpb.GetDirtyIntraRefreshRegions(dpbIndex);
280-
281-
pFrameInfo->stdDpbSlotInfo[numReferenceSlots].pNext = &pFrameInfo->referenceIntraRefreshInfo[numReferenceSlots];
289+
vk::ChainNextVkStruct(pFrameInfo->referenceSlotsInfo[numReferenceSlots], pFrameInfo->referenceIntraRefreshInfo[numReferenceSlots]);
282290
}
283291

284-
pFrameInfo->referenceSlotsInfo[numReferenceSlots].sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR;
285-
pFrameInfo->referenceSlotsInfo[numReferenceSlots].pNext = &pFrameInfo->stdDpbSlotInfo[numReferenceSlots];
286-
pFrameInfo->referenceSlotsInfo[numReferenceSlots].slotIndex = dpbIndex;
287-
pFrameInfo->referenceSlotsInfo[numReferenceSlots].pPictureResource =
288-
pFrameInfo->dpbImageResources[numReferenceSlots]->GetPictureResourceInfo();
289-
290292
numReferenceSlots++;
291293
assert(numReferenceSlots <= ARRAYSIZE(pFrameInfo->referenceSlotsInfo));
292294
}
@@ -303,17 +305,20 @@ VkResult VkVideoEncoderH265::ProcessDpb(VkSharedBaseObj<VkVideoEncodeFrameInfo>&
303305
if (!refPicAvailable) {
304306
return VK_ERROR_INITIALIZATION_FAILED;
305307
}
306-
m_dpb.FillStdReferenceInfo(dpbIndex, &pFrameInfo->stdReferenceInfo[numReferenceSlots]);
307308

308-
pFrameInfo->stdDpbSlotInfo[numReferenceSlots].sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_KHR;
309-
pFrameInfo->stdDpbSlotInfo[numReferenceSlots].pStdReferenceInfo = &pFrameInfo->stdReferenceInfo[numReferenceSlots];
309+
m_dpb.FillStdReferenceInfo(dpbIndex, &pFrameInfo->stdReferenceInfo[numReferenceSlots]);
310310

311311
pFrameInfo->referenceSlotsInfo[numReferenceSlots].sType = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_INFO_KHR;
312-
pFrameInfo->referenceSlotsInfo[numReferenceSlots].pNext = &pFrameInfo->stdDpbSlotInfo[numReferenceSlots];
312+
pFrameInfo->referenceSlotsInfo[numReferenceSlots].pNext = nullptr;
313313
pFrameInfo->referenceSlotsInfo[numReferenceSlots].slotIndex = dpbIndex;
314314
pFrameInfo->referenceSlotsInfo[numReferenceSlots].pPictureResource =
315315
pFrameInfo->dpbImageResources[numReferenceSlots]->GetPictureResourceInfo();
316316

317+
pFrameInfo->stdDpbSlotInfo[numReferenceSlots].sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_KHR;
318+
pFrameInfo->stdDpbSlotInfo[numReferenceSlots].pNext = nullptr;
319+
pFrameInfo->stdDpbSlotInfo[numReferenceSlots].pStdReferenceInfo = &pFrameInfo->stdReferenceInfo[numReferenceSlots];
320+
vk::ChainNextVkStruct(pFrameInfo->referenceSlotsInfo[numReferenceSlots], pFrameInfo->stdDpbSlotInfo[numReferenceSlots]);
321+
317322
numReferenceSlots++;
318323
assert(numReferenceSlots <= ARRAYSIZE(pFrameInfo->referenceSlotsInfo));
319324
}

vk_video_encoder/libs/VkVideoEncoder/VkVideoEncoderH265.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,11 @@ class VkVideoEncoderH265 : public VkVideoEncoder {
7676
};
7777

7878
virtual void Reset(bool releaseResources = true) {
79-
80-
pictureInfo.pNext = nullptr;
81-
8279
// Reset the base first
8380
VkVideoEncodeFrameInfo::Reset(releaseResources);
8481

8582
// After resetting the base structure parameters, start building the pNext chain again
83+
pictureInfo.pNext = nullptr;
8684
encodeInfo.pNext = &pictureInfo;
8785

8886
// Clear and check state

0 commit comments

Comments
 (0)