如何利用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;
}
相关推荐
吃好睡好便好5 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
仰泳之鹅6 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
x_yeyue8 小时前
三角形数
笔记·算法·数论·组合数学
念何架构之路9 小时前
Go语言加密算法
数据结构·算法·哈希算法
AI科技星9 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
失去的青春---夕阳下的奔跑9 小时前
560. 和为 K 的子数组
数据结构·算法·leetcode
黎阳之光10 小时前
黎阳之光:以视频孪生重构智慧医院信息化,打造高标项目核心竞争力
大数据·人工智能·物联网·算法·数字孪生
丷丩10 小时前
三级缓存下MVT地图瓦片服务性能优化策略
算法·缓存·性能优化·gis·geoai-up
m0_6294947310 小时前
LeetCode 热题 100-----25.回文链表
数据结构·算法·leetcode·链表
ʚ希希ɞ ྀ12 小时前
单词拆分----dp
算法