【Camera专题】Sprd-Camera帧率fps的计算及拍照闪红问题的解决

本文深入探讨了展讯平台摄像头在视频通话和特定光照条件下遇到的帧率及色彩问题。作者详细解释了如何通过调整帧长和曝光参数解决10帧固定帧率下的功耗优化,以及在黄色或夕阳环境下拍照时瞬间闪红的现象。通过对sensor的深入研究,提供了有效的解决方案。

吐槽

换了新公司,一上来就面对两个比较棘手的问题,2个问题都是拖了几个月没有解决,跟展讯那边沟通迟迟没有解决方案。

原本是做MTK平台的,到了这边需要做展讯平台和高通平台。

证明能力的时候到了!

一周用来熟悉展讯Camera驱动,2个问题基本在加班跟源码,3天左右找到解决方案!

事实上还是有些成就感,毕竟,一来面对的是新平台,另外特别是第二个问题,展讯拖了几个月都没有解决办法。

废话少说,本篇知识点:

平台:Sprd-展讯平台

知识点

  • 1.帧率的计算方式
  • 2.跳帧解决拍照过程的瞬间闪红问题

问题1:视频通话下,固定帧率为10帧,优化功耗,不影响拍照出帧数。

难点:

1.区分是视频通话还是camera正常使用。

因为视频通话和正常使用相机调用的都是camera preivew进行预览。

  解决方案:
  1.在上层进行区分:
    联系微聊APP厂商在接听通话时,往底层发送一条msg(复杂,不可取
<think>好的,我现在需要帮助用户理解他们遇到的错误信息:“sprd-apcpu-dvfs: get cluster 0 'sprd,voltage-step' value error”。首先,我得拆解这个错误信息的各个部分,看看每个部分可能代表什么。 首先,“sprd-apcpu-dvfs”应该是指某个与动态电压频率调整(DVFS)相关的模块或驱动,特别是针对展讯(Spreadtrum,SPRD)的AP(应用处理器)的CPU部分。DVFS是调节处理器电压和频率以平衡性能和功耗的技术,这在移动设备中很常见。 接下来,“get cluster 0”可能指的是处理器中的集群0。现代多核处理器通常将核心分成不同的集群,比如高性能集群和高效能集群。集群0可能是指其中一个特定的集群,比如高性能核心所在的集群。 然后是“sprd,voltage-step”,这看起来像是设备树(Device Tree)中的一个属性。设备树在Linux内核中被用来描述硬件配置,特别是在嵌入式系统和ARM架构中。这里的“sprd,voltage-step”可能用于定义电压调节的步进值,即调整电压时的最小单位或步骤。 错误信息的关键在于“value error”,也就是说在尝试获取这个属性值时出现了问题。可能的原因有几个: 1. **设备树配置错误**:设备树中可能没有正确配置“sprd,voltage-step”属性,或者属性值格式不正确。例如,该属性可能被遗漏,或者数据类型不符合驱动程序的预期(比如应该是整数但写成了字符串)。 2. **驱动兼容性问题**:设备树中的配置可能与当前使用的内核版本或驱动程序不兼容。例如,新版本的驱动可能要求不同的属性名称或格式,而旧设备树未更新导致解析失败。 3. **硬件支持问题**:可能硬件本身不支持该属性指定的电压步进,或者存在硬件缺陷导致无法正确读取该参数。 接下来,我需要考虑可能的解决方法。根据常见的内核和设备树问题,通常的解决步骤包括: - **检查设备树源文件(DTS)**:查看对应集群(cluster 0)的设备树节点,确认是否存在“sprd,voltage-step”属性,并且其值符合预期。可能需要确保属性名称正确,没有拼写错误,且值的类型正确(例如u32整数)。 - **验证内核版本和驱动兼容性**:确认使用的内核版本是否与设备树配置兼容。有时候,旧版内核可能不支持新添加的属性,或者新版驱动需要不同的配置方式。 - **查阅文档或源码**:查看展讯提供的相关文档,或者直接阅读内核驱动源码,了解“sprd,voltage-step”属性的具体要求和用法。这有助于确认是否正确使用了该属性。 - **调试和日志分析**:启用更详细的内核日志(比如动态调试或增加打印信息),查看在解析设备树属性时的具体错误,比如是否属性不存在,或者值超出范围等。 另外,用户可能是在进行内核定制或移植时遇到这个问题,特别是在移植到新硬件或更新内核版本时。这时候,参考官方示例或类似平台的设备树配置可能会有帮助。 总结来说,这个错误通常指向设备树配置的问题,需要检查相关节点和属性是否正确设置。如果用户有访问设备树的条件,应该优先检查这部分内容。如果属性确实存在且格式正确,那么可能需要进一步检查驱动代码,看是否存在解析逻辑的问题,或者是否需要其他相关属性的配合。`</think>"sprd-apcpu-dvfs: get cluster 0 'sprd,voltage-step' value error"` 是 Linux 内核或驱动层的一个错误提示,通常与 **展讯(Spreadtrum, SPRD)芯片平台**的 **动态电压频率调节(DVFS)模块** 相关。以下是关键信息解析和可能的原因: --- ### **错误含义** 1. **模块来源**:`sprd-apcpu-dvfs` - 这是展讯芯片中管理 CPU 动态电压/频率调节(DVFS)的驱动模块,负责根据负载调整 CPU 的电压和频率以优化功耗。 2. **错误触发点**:`cluster 0` - 现代 CPU 通常采用多集群设计(如大小核架构),`cluster 0` 指代第一个 CPU 集群(通常是高性能核心集群)。 3. **关键属性**:`sprd,voltage-step` - 这是设备树(Device Tree)中定义的属性,用于配置电压调节的步长值(如每次调整电压的最小单位)。 4. **错误类型**:`value error` - 驱动在尝试从设备树中读取 `sprd,voltage-step` 属性时,发现其值不合法或无法解析。 --- ### **可能原因** 1. **设备树配置错误** - **缺失属性**:设备树中未为 `cluster 0` 定义 `sprd,voltage-step` 属性。 - **格式错误**:属性值类型不符合预期(如应为整数但写成了字符串),或值超出允许范围(如负数或过大值)。 - **路径错误**:属性被错误地定义在非目标节点下(如错误地放在父节点而非 CPU 集群节点中)。 2. **驱动与设备树不兼容** - 内核或 DVFS 驱动版本更新后,对设备树属性的要求发生变化(如属性名修改、值单位调整),但设备树未同步更新。 3. **硬件限制** - 芯片或 PMIC(电源管理芯片)不支持指定的电压步长值,导致驱动无法应用该配置。 --- ### **解决方法** #### 1. **检查设备树配置** - 定位到 `cluster 0` 对应的设备树节点(通常位于 `sprd,cpu-cluster` 或类似节点),确认是否存在 `sprd,voltage-step` 属性。 - 示例正确配置: ```dts cpu_cluster0: cluster@0 { compatible = "sprd,xxx-cluster"; sprd,voltage-step = <10000>; // 假设步长为 10mV // ...其他属性 }; ``` - 验证属性值是否为合法整数(如 `<10000>` 表示 10mV 步长)。 #### 2. **对照文档或参考设计** - 查阅展讯提供的芯片参考手册或 DVFS 驱动文档,确认 `sprd,voltage-step` 的格式和取值范围。 - 参考官方示例设备树(如 SDK 中的 `.dts` 文件),确保配置一致。 #### 3. **内核调试** - 启用内核动态调试(如 `dyndbg`)或添加 `printk` 日志,观察驱动解析设备树属性的过程。 - 检查是否有其他相关错误(如电压表配置错误、PMIC 通信失败)。 #### 4. **更新驱动或内核** - 如果问题由版本不匹配引起,尝试升级内核或 DVFS 驱动到与硬件匹配的版本。 --- ### **扩展知识** - **DVFS 工作原理**:通过动态调整 CPU 频率和电压,在高负载时提升性能,低负载时降低功耗。`voltage-step` 决定了电压调整的粒度。 - **设备树的作用**:在嵌入式 Linux 中,设备树以 `.dts` 文件形式描述硬件配置,供驱动读取。属性错误会导致驱动初始化失败。 如果提供更多上下文(如设备树片段、内核版本),可进一步定位问题
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值