如何利用Lv值实现三级降帧

目录

一、核心逻辑(

[二、5 种帧率 → 精简为 3 级](#二、5 种帧率 → 精简为 3 级)

[三、LV 阈值划分](#三、LV 阈值划分)

四、代码实现


一、核心逻辑

亮度越暗 → LV 越小 → 帧率越低 亮度越亮 → LV 越大 → 帧率越高

三级降帧就是:

  1. 高亮度:高帧率(30fps)
  2. 中亮度:中帧率(20/25fps)
  3. 低亮度:低帧率(10/8fps)

二、5 种帧率 → 精简为 3 级

三级档位定义(最常用、最稳定)

  • 等级 3:高亮 → 30fps
  • 等级 2:中亮 → 20fps / 25fps
  • 等级 1:低亮 → 10fps / 8fps

三、LV 阈值划分

你的 LV 范围:0 ~ 19(+6 偏置后)

  1. LV ≥ 12.0 → 等级 3 → 30fps
  2. 6.0 ≤ LV < 12.0 → 等级 2 → 20/25fps
  3. LV < 6.0 → 等级 1 → 10/8fps

阈值可自由微调,逻辑不变。

滞回完美防抖动

  • 升高帧率:阈值 + 滞回
  • 降低帧率:阈值 − 滞回不会在阈值附近反复跳变。

四、代码实现

cpp 复制代码
#include <stdint.h>
#include <stdio.h>

// ==================== 核心配置 ====================
#define Q12_SCALE         4096       // Q12 定点格式 2^12
#define LV_OFFSET         6          // LV 偏置,确保全正数

// ==================== 三级帧率定义 ====================
typedef enum {
    FPS_8FPS     = 0,    // 低亮度
    FPS_20FPS    = 1,    // 中亮度
    FPS_30FPS    = 2,    // 高亮度
    FPS_DEFAULT  = FPS_30FPS
} FPS_LEVEL_e;

// ==================== 【可调参数】LV 阈值(浮点,方便调试) ====================
// LV 范围:0 ~ 19.0(已 +6 偏置)
#define LEVEL_HIGH_TO_MID    12.0f   // LV < 12 → 30→20
#define LEVEL_MID_TO_LOW     6.0f    // LV < 6  → 20→8
#define HYSTERESIS_VAL       0.5f    // 滞回宽度(防抖)

// ==================== 自动转 Q12 定点(无需手动计算) ====================
#define TO_Q12(val)          ((int32_t)((val) * Q12_SCALE))

static const int32_t THRESH_HIGH_MID  = TO_Q12(LEVEL_HIGH_TO_MID);
static const int32_t THRESH_MID_LOW   = TO_Q12(LEVEL_MID_TO_LOW);
static const int32_t HYST            = TO_Q12(HYSTERESIS_VAL);

// ==================== 优化版:三级降帧 + 滞回防抖 ====================
FPS_LEVEL_e auto_frame_control(int32_t lv_q12)
{
    static FPS_LEVEL_e cur_level = FPS_DEFAULT;  // 静态保存当前状态

    switch (cur_level)
    {
        // 当前:30fps(高亮)
        case FPS_30FPS:
            if (lv_q12 < THRESH_HIGH_MID - HYST)
                cur_level = FPS_20FPS;
            break;

        // 当前:20fps(中亮)
        case FPS_20FPS:
            if (lv_q12 >= THRESH_HIGH_MID + HYST)
                cur_level = FPS_30FPS;
            else if (lv_q12 < THRESH_MID_LOW - HYST)
                cur_level = FPS_8FPS;
            break;

        // 当前:8fps(低亮)
        case FPS_8FPS:
            if (lv_q12 >= THRESH_MID_LOW + HYST)
                cur_level = FPS_20FPS;
            break;

        default:
            cur_level = FPS_DEFAULT;
            break;
    }
    return cur_level;
}

// ==================== 帧率输出 ====================
void set_target_fps(FPS_LEVEL_e level)
{
    switch(level)
    {
        case FPS_30FPS: printf("FPS = 30\n"); break;
        case FPS_20FPS: printf("FPS = 20\n"); break;
        case FPS_8FPS:  printf("FPS = 8\n");  break;
        default:        printf("FPS = 30\n");
    }
}

// ==================== 调用示例 ====================
int main(void)
{
    // 传入 LUT 输出的 Q12 格式 LV(全正数)
    int32_t current_lv_q12 = TO_Q12(9.5f);

    // 自动判断等级
    FPS_LEVEL_e level = auto_frame_control(current_lv_q12);

    // 输出帧率
    set_target_fps(level);

    return 0;
}
相关推荐
罗西的思考1 天前
【OpenClaw具身硬件】MiniClaw 阅读笔记---(1)基础
人工智能·算法·机器学习
蛋先生DX1 天前
大模型参数存储格式揭秘:BF不是男朋友
深度学习·算法·llm
爱跳舞的烤冷面1 天前
自学嵌入式第22天(数据结构——哈希)
数据结构·算法·哈希算法
猎嘤一号1 天前
博弈论(Game Theory)的理论、算法与工程
人工智能·算法·安全·博弈论
月光船幽幽1 天前
影子模式下保护 logits 不被修改
人工智能·python·算法
马拉AI1 天前
腾讯开源 Agent 记忆系统,AI“换对话就忘”的问题有了新解法(附安装使用教程)
人工智能·算法·开源·科研
地平线开发者1 天前
征程6工具链模型X86推理方式说明
算法
地平线开发者1 天前
【征程6】校准量化中HistogramObserver解析
算法
OuO-21 天前
笔试强训 Day 34:ISBN 号码、kotori 和迷宫、矩阵最长递增路径
java·算法·矩阵
程序喵大人1 天前
【C++进阶】STL算法与函数对象 - 04 find、count和any_of把查询写成意图
开发语言·c++·算法