@@ -204,7 +204,8 @@ VkResult VkVideoEncoderAV1::ProcessDpb(VkSharedBaseObj<VkVideoEncodeFrameInfo>&
204204 (1 << STD_VIDEO_AV1_REFERENCE_NAME_ALTREF_FRAME));
205205 }
206206 }
207- StdVideoAV1ReferenceName refName = m_dpbAV1->AssignReferenceFrameType (pFrameInfo->gopPosition .pictureType , flags, pFrameInfo->bIsReference );
207+ const bool isReference = m_encoderConfig->gopStructure .IsFrameReference (encodeFrameInfo->gopPosition );
208+ StdVideoAV1ReferenceName refName = m_dpbAV1->AssignReferenceFrameType (pFrameInfo->gopPosition .pictureType , flags, isReference);
208209 InitializeFrameHeader (&m_stateAV1.m_sequenceHeader , pFrameInfo, refName);
209210 if (!pFrameInfo->bShowExistingFrame ) {
210211 m_dpbAV1->SetupReferenceFrameGroups (pFrameInfo->gopPosition .pictureType , pFrameInfo->stdPictureInfo .frame_type , pFrameInfo->picOrderCntVal );
@@ -470,22 +471,7 @@ VkResult VkVideoEncoderAV1::EncodeFrame(VkSharedBaseObj<VkVideoEncodeFrameInfo>&
470471{
471472 VkVideoEncodeFrameInfoAV1* pFrameInfo = GetEncodeFrameInfoAV1 (encodeFrameInfo);
472473
473- assert (encodeFrameInfo);
474- assert (m_encoderConfig);
475- assert (encodeFrameInfo->srcEncodeImageResource );
476-
477- pFrameInfo->videoSession = m_videoSession;
478- pFrameInfo->videoSessionParameters = m_videoSessionParameters;
479-
480- encodeFrameInfo->frameEncodeInputOrderNum = m_encodeInputFrameNum++;
481-
482- // GetPositionInGOP() method returns display position of the picture relative to last key frame picture.
483- bool isIdr = m_encoderConfig->gopStructure .GetPositionInGOP (m_gopState,
484- encodeFrameInfo->gopPosition ,
485- (encodeFrameInfo->frameEncodeInputOrderNum == 0 ),
486- uint32_t (m_encoderConfig->numFrames - encodeFrameInfo->frameEncodeInputOrderNum ));
487- if (isIdr) {
488- assert (encodeFrameInfo->gopPosition .pictureType == VkVideoGopStructure::FRAME_TYPE_IDR);
474+ if (encodeFrameInfo->gopPosition .pictureType == VkVideoGopStructure::FRAME_TYPE_IDR) {
489475 VkResult result = EncodeVideoSessionParameters (encodeFrameInfo);
490476 if (result != VK_SUCCESS) {
491477 return result;
@@ -494,14 +480,12 @@ VkResult VkVideoEncoderAV1::EncodeFrame(VkSharedBaseObj<VkVideoEncodeFrameInfo>&
494480
495481 encodeFrameInfo->picOrderCntVal = encodeFrameInfo->gopPosition .inputOrder ;
496482
497- pFrameInfo->bIsKeyFrame = (encodeFrameInfo->gopPosition .pictureType == VkVideoGopStructure::FRAME_TYPE_IDR);
498- pFrameInfo->bIsReference = m_encoderConfig->gopStructure .IsFrameReference (encodeFrameInfo->gopPosition );
499483 pFrameInfo->bShowExistingFrame = false ;
500484 pFrameInfo->bOverlayFrame = false ;
501485 if (encodeFrameInfo->gopPosition .pictureType == VkVideoGopStructure::FRAME_TYPE_B) {
502486 m_numBFramesToEncode++;
503487 }
504- if (pFrameInfo-> bIsKeyFrame ) {
488+ if (encodeFrameInfo-> gopPosition . pictureType == VkVideoGopStructure::FRAME_TYPE_IDR ) {
505489 assert (encodeFrameInfo->picOrderCntVal == 0 );
506490 m_lastKeyFrameOrderHint = encodeFrameInfo->picOrderCntVal ;
507491 }
@@ -527,21 +511,10 @@ VkResult VkVideoEncoderAV1::EncodeFrame(VkSharedBaseObj<VkVideoEncodeFrameInfo>&
527511 pFrameInfo->encodeInfo .srcPictureResource .imageViewBinding = pSrcPictureResource->imageViewBinding ;
528512 pFrameInfo->encodeInfo .srcPictureResource .baseArrayLayer = pSrcPictureResource->baseArrayLayer ;
529513
530- pFrameInfo->qualityLevel = m_encoderConfig->qualityLevel ;
531-
532514 // if (encodeFrameInfo->frameEncodeInputOrderNum == 0) {
533515 // pFrameInfo->encodeInfo.flags |= VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR;
534516 // }
535517
536- VkDeviceSize size = GetBitstreamBuffer (encodeFrameInfo->outputBitstreamBuffer );
537- assert ((size > 0 ) && (encodeFrameInfo->outputBitstreamBuffer != nullptr ));
538- if ((size == 0 ) || (encodeFrameInfo->outputBitstreamBuffer == nullptr )) {
539- return VK_ERROR_INITIALIZATION_FAILED;
540- }
541- pFrameInfo->encodeInfo .dstBuffer = encodeFrameInfo->outputBitstreamBuffer ->GetBuffer ();
542-
543- pFrameInfo->encodeInfo .dstBufferOffset = 0 ;
544-
545518 if (m_rateControlInfo.rateControlMode == VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DISABLED_BIT_KHR) {
546519 switch (encodeFrameInfo->gopPosition .pictureType ) {
547520 case VkVideoGopStructure::FRAME_TYPE_IDR:
@@ -564,52 +537,30 @@ VkResult VkVideoEncoderAV1::EncodeFrame(VkSharedBaseObj<VkVideoEncodeFrameInfo>&
564537 }
565538 }
566539
567- if (m_sendControlCmd == true ) {
568- HandleCtrlCmd (encodeFrameInfo);
569- }
570-
571- if (m_encoderConfig->enableQpMap ) {
572- ProcessQpMap (encodeFrameInfo);
573- }
574-
575- const bool isIntraRefreshFrame = m_encoderConfig->gopStructure .IsIntraRefreshFrame (encodeFrameInfo->gopPosition );
576- if (m_encoderConfig->enableIntraRefresh && isIntraRefreshFrame) {
577- FillIntraRefreshInfo (encodeFrameInfo);
578- }
579-
580- EnqueueFrame (encodeFrameInfo, pFrameInfo->bIsKeyFrame , pFrameInfo->bIsReference );
581-
582540 return VK_SUCCESS;
583541}
584542
585- VkResult VkVideoEncoderAV1::HandleCtrlCmd (VkSharedBaseObj<VkVideoEncodeFrameInfo>& encodeFrameInfo)
543+ VkResult VkVideoEncoderAV1::CodecHandleRateControlCmd (VkSharedBaseObj<VkVideoEncodeFrameInfo>& encodeFrameInfo)
586544{
587545 VkVideoEncodeFrameInfoAV1* pFrameInfo = GetEncodeFrameInfoAV1 (encodeFrameInfo);
588546
589- // Save the RateControlCmd request
590- const bool sendRateControlCmd = m_sendRateControlCmd;
591- // Call the base class first to cover the bases
592- VkVideoEncoder::HandleCtrlCmd (encodeFrameInfo);
593-
594547 // Fill-in the codec-specific parts next
595- if (sendRateControlCmd) {
596- for (uint32_t layerIndx = 0 ; layerIndx < ARRAYSIZE (m_stateAV1.m_rateControlLayersInfoAV1 ); layerIndx++) {
597- pFrameInfo->rateControlLayersInfoAV1 [layerIndx] = m_stateAV1.m_rateControlLayersInfoAV1 [layerIndx];
598- pFrameInfo->rateControlLayersInfoAV1 [layerIndx].sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_RATE_CONTROL_LAYER_INFO_KHR;
599- pFrameInfo->rateControlLayersInfo [layerIndx].pNext = &pFrameInfo->rateControlLayersInfoAV1 [layerIndx];
600- }
601-
602- pFrameInfo->rateControlInfoAV1 = m_stateAV1.m_rateControlInfoAV1 ;
603- pFrameInfo->rateControlInfoAV1 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_RATE_CONTROL_INFO_KHR;
604- pFrameInfo->rateControlInfoAV1 .temporalLayerCount = m_encoderConfig->gopStructure .GetTemporalLayerCount ();
548+ for (uint32_t layerIndx = 0 ; layerIndx < ARRAYSIZE (m_stateAV1.m_rateControlLayersInfoAV1 ); layerIndx++) {
549+ pFrameInfo->rateControlLayersInfoAV1 [layerIndx] = m_stateAV1.m_rateControlLayersInfoAV1 [layerIndx];
550+ pFrameInfo->rateControlLayersInfoAV1 [layerIndx].sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_RATE_CONTROL_LAYER_INFO_KHR;
551+ pFrameInfo->rateControlLayersInfo [layerIndx].pNext = &pFrameInfo->rateControlLayersInfoAV1 [layerIndx];
552+ }
605553
606- if ( pFrameInfo->pControlCmdChain != nullptr ) {
607- pFrameInfo->rateControlInfoAV1 .pNext = pFrameInfo-> pControlCmdChain ;
608- }
554+ pFrameInfo->rateControlInfoAV1 = m_stateAV1. m_rateControlInfoAV1 ;
555+ pFrameInfo->rateControlInfoAV1 .sType = VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_RATE_CONTROL_INFO_KHR ;
556+ pFrameInfo-> rateControlInfoAV1 . temporalLayerCount = m_encoderConfig-> gopStructure . GetTemporalLayerCount ();
609557
610- pFrameInfo->pControlCmdChain = (VkBaseInStructure*)&pFrameInfo->rateControlInfoAV1 ;
558+ if (pFrameInfo->pControlCmdChain != nullptr ) {
559+ pFrameInfo->rateControlInfoAV1 .pNext = pFrameInfo->pControlCmdChain ;
611560 }
612561
562+ pFrameInfo->pControlCmdChain = (VkBaseInStructure*)&pFrameInfo->rateControlInfoAV1 ;
563+
613564 return VK_SUCCESS;
614565}
615566
0 commit comments