EDSDK设置kEdsPropID_ImageQuality失败,请求排查原因
EDSDK设置kEdsPropID_ImageQuality失败的排查思路
问题背景
使用EDSDK时,设置kEdsPropID_Evf_OutputDevice属性可成功执行,代码如下:
EdsUInt32 device; if (err == EDS_ERR_OK) { // 获取当前输出设备 err = EdsGetPropertyData(camera, kEdsPropID_Evf_OutputDevice, 0, sizeof(device), &device); } if (err == EDS_ERR_OK) { // 将PC设为当前输出设备 device |= kEdsEvfOutputDevice_PC; // 写入相机 err = EdsSetPropertyData(camera, kEdsPropID_Evf_OutputDevice, 0, sizeof(device), &device); }
但设置kEdsPropID_ImageQuality属性时执行失败,相关代码如下:
if (err == EDS_ERR_OK) { EdsUInt32 ImageQuality; switch (GLOBAL->getCameraImageQuality()) { case 0: ImageQuality = EdsImageQuality_SJF; break; case 1: ImageQuality = EdsImageQuality_MJF; break; case 2: ImageQuality = EdsImageQuality_LJF; break; default: break; } err = EdsSetPropertyData(camera, kEdsPropID_ImageQuality, 0, sizeof(ImageQuality), &ImageQuality); }
询问是否是调用位置存在错误?
可能的原因及排查步骤
1. 调用位置的相机状态限制
调用EdsSetPropertyData设置图像质量时,相机必须处于可修改参数的状态:
- 不能处于拍摄流程中(如对焦、快门触发、照片存储中)
- 部分相机在实时取景(Evf)激活状态下,无法修改图像质量属性,需要先调用
EdsSetEvfOutputDevice关闭实时取景,再尝试设置 - 对比成功的
kEdsPropID_Evf_OutputDevice设置场景,确认两者是否在相同相机状态下执行(比如Evf设置是在实时取景启动前,而图像质量设置是在启动后)
2. 属性值的设备兼容性
不同相机支持的图像质量枚举值可能不同:
EdsImageQuality_SJF/MJF/LJF(小/中/大JPEG)并非所有相机都支持,部分机型可能只支持特定的组合值(如RAW+JPEG)- 先调用
EdsGetPropertyDesc获取当前相机kEdsPropID_ImageQuality的支持范围,确认你设置的值在允许列表内:EdsPropertyDesc desc; err = EdsGetPropertyDesc(camera, kEdsPropID_ImageQuality, &desc); // 遍历desc.pPropDesc数组,查看相机支持的所有图像质量值
3. 参数传递的正确性
- 部分相机对
kEdsPropID_ImageQuality的参数类型要求并非EdsUInt32,可能是EdsUInt16。可以先调用EdsGetPropertyData获取当前图像质量值,检查返回值的实际大小是否与你设置的sizeof(ImageQuality)匹配
4. 相机模式与权限
- 确认相机处于PC控制模式(USB连接后,相机屏幕显示PC连接状态)
- 部分相机在自动模式下不允许修改图像质量,需要切换到M/A/S/P等手动模式
5. 错误码定位
不要忽略err的具体返回值,打印或调试查看错误码(如EDS_ERR_DEVICE_BUSY、EDS_ERR_INVALID_PARAMETER、EDS_ERR_NOT_SUPPORTED等),根据错误码直接定位问题根源
总结
调用位置确实可能是问题之一(比如相机状态不允许修改),但也需要结合参数兼容性、相机模式、错误码等因素综合排查。建议优先获取具体错误码,再针对性处理。
内容的提问来源于stack exchange,提问作者长脸乔帮主
相关产品推荐
相关产品推荐

