Commit d50734d 1 parent 41a88df commit d50734d Copy full SHA for d50734d
File tree 6 files changed +13
-0
lines changed
vk_video_encoder/libs/VkVideoEncoder
6 files changed +13
-0
lines changed Original file line number Diff line number Diff line change @@ -618,6 +618,8 @@ struct EncoderConfig : public VkVideoRefCountBase {
618
618
virtual int8_t InitDpbCount () { return 16 ; };
619
619
620
620
virtual bool InitRateControl ();
621
+
622
+ virtual uint8_t GetMaxBFrameCount () { return 0 ;}
621
623
};
622
624
623
625
// Create codec configuration for H.264 encoder
Original file line number Diff line number Diff line change @@ -369,6 +369,7 @@ VkResult EncoderConfigH264::InitDeviceCapabilities(const VulkanDeviceContext* vk
369
369
std::cout << " \t\t\t " << " maxExtent: " << videoCapabilities.maxCodedExtent .width << " x " << videoCapabilities.maxCodedExtent .height << std::endl;
370
370
std::cout << " \t\t\t " << " maxDpbSlots: " << videoCapabilities.maxDpbSlots << std::endl;
371
371
std::cout << " \t\t\t " << " maxActiveReferencePictures: " << videoCapabilities.maxActiveReferencePictures << std::endl;
372
+ std::cout << " \t\t\t " << " maxBPictureL0ReferenceCount: " << h264EncodeCapabilities.maxBPictureL0ReferenceCount << std::endl;
372
373
}
373
374
374
375
return VK_SUCCESS;
Original file line number Diff line number Diff line change @@ -184,6 +184,8 @@ struct EncoderConfigH264 : public EncoderConfig {
184
184
// 2. First h.264 determine the rate control parameters
185
185
virtual bool InitRateControl ();
186
186
187
+ virtual uint8_t GetMaxBFrameCount () { return h264EncodeCapabilities .maxBPictureL0ReferenceCount ; }
188
+
187
189
bool GetRateControlParameters (VkVideoEncodeRateControlInfoKHR * rcInfo ,
188
190
VkVideoEncodeRateControlLayerInfoKHR * pRcLayerInfo ,
189
191
VkVideoEncodeH264RateControlInfoKHR * rcInfoH264 ,
Original file line number Diff line number Diff line change @@ -89,6 +89,7 @@ VkResult EncoderConfigH265::InitDeviceCapabilities(const VulkanDeviceContext* vk
89
89
std::cout << " \t\t\t " << " maxExtent: " << videoCapabilities.maxCodedExtent .width << " x " << videoCapabilities.maxCodedExtent .height << std::endl;
90
90
std::cout << " \t\t\t " << " maxDpbSlots: " << videoCapabilities.maxDpbSlots << std::endl;
91
91
std::cout << " \t\t\t " << " maxActiveReferencePictures: " << videoCapabilities.maxActiveReferencePictures << std::endl;
92
+ std::cout << " \t\t\t " << " maxBPictureL0ReferenceCount: " << h265EncodeCapabilities.maxBPictureL0ReferenceCount << std::endl;
92
93
}
93
94
94
95
return VK_SUCCESS;
Original file line number Diff line number Diff line change @@ -158,6 +158,8 @@ struct EncoderConfigH265 : public EncoderConfig {
158
158
// 2. First h.265 determine the rate control parameters
159
159
virtual bool InitRateControl ();
160
160
161
+ virtual uint8_t GetMaxBFrameCount () { return h265EncodeCapabilities .maxBPictureL0ReferenceCount ; }
162
+
161
163
bool GetRateControlParameters (VkVideoEncodeRateControlInfoKHR * rcInfo ,
162
164
VkVideoEncodeRateControlLayerInfoKHR * pRcLayerInfo ,
163
165
VkVideoEncodeH265RateControlInfoKHR * rcInfoH265 ,
Original file line number Diff line number Diff line change @@ -359,6 +359,11 @@ VkResult VkVideoEncoder::InitEncoder(VkSharedBaseObj<EncoderConfig>& encoderConf
359
359
// specific GOP structure. For example it may not support B-frames.
360
360
// gopStructure.Init() should be called after encoderConfig->InitDeviceCapabilities().
361
361
m_encoderConfig->gopStructure .Init (m_encoderConfig->numFrames );
362
+ if (encoderConfig->GetMaxBFrameCount () < m_encoderConfig->gopStructure .GetConsecutiveBFrameCount ()) {
363
+ std::cout << " Max consecutive B frames: " << (uint32_t )encoderConfig->GetMaxBFrameCount () << " lower than the configured one: " << (uint32_t )m_encoderConfig->gopStructure .GetConsecutiveBFrameCount () << std::endl;
364
+ std::cout << " Fallback to the max value: " << (uint32_t )m_encoderConfig->gopStructure .GetConsecutiveBFrameCount () << std::endl;
365
+ m_encoderConfig->gopStructure .SetConsecutiveBFrameCount (encoderConfig->GetMaxBFrameCount ());
366
+ }
362
367
std::cout << std::endl << " GOP frame count: " << (uint32_t )m_encoderConfig->gopStructure .GetGopFrameCount ();
363
368
std::cout << " , IDR period: " << (uint32_t )m_encoderConfig->gopStructure .GetIdrPeriod ();
364
369
std::cout << " , Consecutive B frames: " << (uint32_t )m_encoderConfig->gopStructure .GetConsecutiveBFrameCount ();
You can’t perform that action at this time.
0 commit comments