Qualcom GPU enforce to use BT.709, Studio range (16-235)

This commit is contained in:
2025-11-20 08:42:14 +09:00
parent fee79a45a1
commit 1571123a5e

View File

@@ -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:");