Qualcom GPU enforce to use BT.709, Studio range (16-235)
This commit is contained in:
@@ -388,16 +388,24 @@ bool MediaCodecSurfaceManager::CreateVulkanImage(void* vk_device, void* vk_insta
|
||||
|
||||
ycbcrConversionCreateInfo.format = vulkan_format;
|
||||
|
||||
// Use MediaCodec suggested YCbCr model and range for all devices
|
||||
ycbcrConversionCreateInfo.ycbcrModel = static_cast<VkSamplerYcbcrModelConversion>(ahb_format_props.suggestedYcbcrModel);
|
||||
ycbcrConversionCreateInfo.ycbcrRange = static_cast<VkSamplerYcbcrRange>(ahb_format_props.suggestedYcbcrRange);
|
||||
LogInfo(" Using MediaCodec suggested YCbCr model and range");
|
||||
// WORKAROUND: Qualcomm MediaCodec may suggest incorrect YCbCr model for AV1
|
||||
// Force BT.709 + Studio range on Qualcomm devices
|
||||
if (is_qualcomm_gpu) {
|
||||
ycbcrConversionCreateInfo.ycbcrModel = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709; // BT.709
|
||||
ycbcrConversionCreateInfo.ycbcrRange = VK_SAMPLER_YCBCR_RANGE_ITU_NARROW; // Studio range (16-235)
|
||||
LogInfo(" FORCED BT.709 + Studio range (Qualcomm workaround)");
|
||||
LogInfo(" MediaCodec suggested model: " + std::to_string(ahb_format_props.suggestedYcbcrModel) + " (ignored)");
|
||||
LogInfo(" MediaCodec suggested range: " + std::to_string(ahb_format_props.suggestedYcbcrRange) + " (ignored)");
|
||||
} else {
|
||||
ycbcrConversionCreateInfo.ycbcrModel = static_cast<VkSamplerYcbcrModelConversion>(ahb_format_props.suggestedYcbcrModel);
|
||||
ycbcrConversionCreateInfo.ycbcrRange = static_cast<VkSamplerYcbcrRange>(ahb_format_props.suggestedYcbcrRange);
|
||||
LogInfo(" Using MediaCodec suggested YCbCr model and range");
|
||||
}
|
||||
|
||||
// Log color space settings
|
||||
LogInfo("YCbCr conversion:");
|
||||
LogInfo(" MediaCodec suggested model: " + std::to_string(ahb_format_props.suggestedYcbcrModel));
|
||||
LogInfo(" MediaCodec suggested range: " + std::to_string(ahb_format_props.suggestedYcbcrRange));
|
||||
LogInfo(" Using MediaCodec suggested color space settings");
|
||||
LogInfo(" YcbcrModel: " + std::to_string(ycbcrConversionCreateInfo.ycbcrModel));
|
||||
LogInfo(" YcbcrRange: " + std::to_string(ycbcrConversionCreateInfo.ycbcrRange));
|
||||
|
||||
// Log component mapping from MediaCodec
|
||||
LogInfo(" MediaCodec suggested components:");
|
||||
|
||||
Reference in New Issue
Block a user