@@ -2279,11 +2279,6 @@ bool VulkanVideoParser::DecodePicture(
22792279 h264.stdPictureInfo .flags , &setupReferenceSlot.slotIndex );
22802280 // TODO: Remove it is for debugging only. Reserved fields must be set to "0".
22812281 pout->stdPictureInfo .reserved1 = pCurrFrameDecParams->numGopReferenceSlots ;
2282- assert (!pd->ref_pic_flag || (setupReferenceSlot.slotIndex >= 0 ));
2283- if (setupReferenceSlot.slotIndex >= 0 ) {
2284- setupReferenceSlot.pPictureResource = &pCurrFrameDecParams->dpbSetupPictureResource ;
2285- pCurrFrameDecParams->decodeFrameInfo .pSetupReferenceSlot = &setupReferenceSlot;
2286- }
22872282 if (pCurrFrameDecParams->numGopReferenceSlots ) {
22882283 assert (pCurrFrameDecParams->numGopReferenceSlots <= (int32_t )MAX_DPB_REF_SLOTS);
22892284 for (uint32_t dpbEntryIdx = 0 ; dpbEntryIdx < (uint32_t )pCurrFrameDecParams->numGopReferenceSlots ;
@@ -2299,6 +2294,15 @@ bool VulkanVideoParser::DecodePicture(
22992294 pCurrFrameDecParams->decodeFrameInfo .pReferenceSlots = NULL ;
23002295 pCurrFrameDecParams->decodeFrameInfo .referenceSlotCount = 0 ;
23012296 }
2297+ assert (!pd->ref_pic_flag || (setupReferenceSlot.slotIndex >= 0 ));
2298+ if (setupReferenceSlot.slotIndex >= 0 ) {
2299+ setupReferenceSlot.pPictureResource = &pCurrFrameDecParams->dpbSetupPictureResource ;
2300+ pCurrFrameDecParams->decodeFrameInfo .pSetupReferenceSlot = &setupReferenceSlot;
2301+
2302+ // add the setup slot to the end of referenceSlots
2303+ assert ((uint32_t )pCurrFrameDecParams->numGopReferenceSlots < MAX_DPB_REF_AND_SETUP_SLOTS);
2304+ referenceSlots[pCurrFrameDecParams->numGopReferenceSlots ] = setupReferenceSlot;
2305+ }
23022306
23032307 }
23042308 else if (m_codecType == VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR) {
@@ -2388,11 +2392,6 @@ bool VulkanVideoParser::DecodePicture(
23882392 referenceSlots, pCurrFrameDecParams->pGopReferenceImagesIndexes ,
23892393 &setupReferenceSlot.slotIndex );
23902394
2391- assert (!pd->ref_pic_flag || (setupReferenceSlot.slotIndex >= 0 ));
2392- if (setupReferenceSlot.slotIndex >= 0 ) {
2393- setupReferenceSlot.pPictureResource = &pCurrFrameDecParams->dpbSetupPictureResource ;
2394- pCurrFrameDecParams->decodeFrameInfo .pSetupReferenceSlot = &setupReferenceSlot;
2395- }
23962395
23972396 if (pCurrFrameDecParams->numGopReferenceSlots ) {
23982397 assert (pCurrFrameDecParams->numGopReferenceSlots <= (int32_t )MAX_DPB_REF_SLOTS);
@@ -2410,6 +2409,16 @@ bool VulkanVideoParser::DecodePicture(
24102409 pCurrFrameDecParams->decodeFrameInfo .referenceSlotCount = 0 ;
24112410 }
24122411
2412+ assert (!pd->ref_pic_flag || (setupReferenceSlot.slotIndex >= 0 ));
2413+ if (setupReferenceSlot.slotIndex >= 0 ) {
2414+ setupReferenceSlot.pPictureResource = &pCurrFrameDecParams->dpbSetupPictureResource ;
2415+ pCurrFrameDecParams->decodeFrameInfo .pSetupReferenceSlot = &setupReferenceSlot;
2416+
2417+ // add the setup slot to the end of referenceSlots
2418+ assert ((uint32_t )pCurrFrameDecParams->numGopReferenceSlots < MAX_DPB_REF_AND_SETUP_SLOTS);
2419+ referenceSlots[pCurrFrameDecParams->numGopReferenceSlots ] = setupReferenceSlot;
2420+ }
2421+
24132422 if (m_dumpParserData) {
24142423 for (int32_t i = 0 ; i < HEVC_MAX_DPB_SLOTS; i++) {
24152424 std::cout << " \t dpbIndex: " << i;
@@ -2462,12 +2471,6 @@ bool VulkanVideoParser::DecodePicture(
24622471 pCurrFrameDecParams->pGopReferenceImagesIndexes ,
24632472 &setupReferenceSlot.slotIndex );
24642473
2465- assert (!pd->ref_pic_flag || (setupReferenceSlot.slotIndex >= 0 ));
2466- if (setupReferenceSlot.slotIndex >= 0 ) {
2467- setupReferenceSlot.pPictureResource = &pCurrFrameDecParams->dpbSetupPictureResource ;
2468- pCurrFrameDecParams->decodeFrameInfo .pSetupReferenceSlot = &setupReferenceSlot;
2469- }
2470-
24712474 if (pCurrFrameDecParams->numGopReferenceSlots ) {
24722475 assert (pCurrFrameDecParams->numGopReferenceSlots <= (int32_t )MAX_DPB_REF_SLOTS);
24732476 for (uint32_t dpbEntryIdx = 0 ; dpbEntryIdx < (uint32_t )pCurrFrameDecParams->numGopReferenceSlots ;
@@ -2483,6 +2486,17 @@ bool VulkanVideoParser::DecodePicture(
24832486 pCurrFrameDecParams->decodeFrameInfo .referenceSlotCount = 0 ;
24842487 }
24852488
2489+
2490+ assert (!pd->ref_pic_flag || (setupReferenceSlot.slotIndex >= 0 ));
2491+ if (setupReferenceSlot.slotIndex >= 0 ) {
2492+ setupReferenceSlot.pPictureResource = &pCurrFrameDecParams->dpbSetupPictureResource ;
2493+ pCurrFrameDecParams->decodeFrameInfo .pSetupReferenceSlot = &setupReferenceSlot;
2494+
2495+ // add the setup slot to the end of referenceSlots
2496+ assert ((uint32_t )pCurrFrameDecParams->numGopReferenceSlots < MAX_DPB_REF_AND_SETUP_SLOTS);
2497+ referenceSlots[pCurrFrameDecParams->numGopReferenceSlots ] = setupReferenceSlot;
2498+ }
2499+
24862500 // @review: this field seems only useful for debug display, but since AV1 needs a dword, should probably change the interface.
24872501 // pDecodePictureInfo->videoFrameType = static_cast<uint16_t>(pin->frame_type);
24882502 pDecodePictureInfo->viewId = 0 ; // @review: Doesn't seem to be used in Vulkan?
@@ -2562,14 +2576,6 @@ bool VulkanVideoParser::DecodePicture(
25622576 pCurrFrameDecParams->pGopReferenceImagesIndexes ,
25632577 &setupReferenceSlot.slotIndex );
25642578
2565- assert (!pd->ref_pic_flag || (setupReferenceSlot.slotIndex >= 0 ));
2566- if (setupReferenceSlot.slotIndex >= 0 ) {
2567- pCurrFrameDecParams->dpbSetupPictureResource .codedExtent .width = pin->FrameWidth ;
2568- pCurrFrameDecParams->dpbSetupPictureResource .codedExtent .height = pin->FrameHeight ;
2569- setupReferenceSlot.pPictureResource = &pCurrFrameDecParams->dpbSetupPictureResource ;
2570- pCurrFrameDecParams->decodeFrameInfo .pSetupReferenceSlot = &setupReferenceSlot;
2571- }
2572-
25732579 if (pCurrFrameDecParams->numGopReferenceSlots ) {
25742580 assert (pCurrFrameDecParams->numGopReferenceSlots <= (int32_t )MAX_DPB_REF_SLOTS);
25752581 for (uint32_t dpbEntryIdx = 0 ; dpbEntryIdx < (uint32_t )pCurrFrameDecParams->numGopReferenceSlots ;
@@ -2586,6 +2592,18 @@ bool VulkanVideoParser::DecodePicture(
25862592 pCurrFrameDecParams->decodeFrameInfo .referenceSlotCount = 0 ;
25872593 }
25882594
2595+ assert (!pd->ref_pic_flag || (setupReferenceSlot.slotIndex >= 0 ));
2596+ if (setupReferenceSlot.slotIndex >= 0 ) {
2597+ pCurrFrameDecParams->dpbSetupPictureResource .codedExtent .width = pin->FrameWidth ;
2598+ pCurrFrameDecParams->dpbSetupPictureResource .codedExtent .height = pin->FrameHeight ;
2599+ setupReferenceSlot.pPictureResource = &pCurrFrameDecParams->dpbSetupPictureResource ;
2600+ pCurrFrameDecParams->decodeFrameInfo .pSetupReferenceSlot = &setupReferenceSlot;
2601+
2602+ // add the setup slot to the end of referenceSlots
2603+ assert ((uint32_t )pCurrFrameDecParams->numGopReferenceSlots < MAX_DPB_REF_AND_SETUP_SLOTS);
2604+ referenceSlots[pCurrFrameDecParams->numGopReferenceSlots ] = setupReferenceSlot;
2605+ }
2606+
25892607 // @review: this field seems only useful for debug display, but since AV1 needs a dword, should probably change the interface.
25902608 // pDecodePictureInfo->videoFrameType = static_cast<uint16_t>(pin->frame_type);
25912609 pDecodePictureInfo->viewId = 0 ; // @review: Doesn't seem to be used in Vulkan?
0 commit comments