如何利用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;
}
相关推荐
昵称小白4 小时前
复杂度分析方法
算法
科研前沿4 小时前
2026 数字孪生前沿科技:全景迭代报告 —— 镜像视界生成式孪生(Generative DT)技术白皮书
大数据·人工智能·科技·算法·音视频·空间计算
学涯乐码堂主6 小时前
有趣的“打擂台算法”
c++·算法·青少年编程·gesp
Tutankaaa6 小时前
知识竞赛题库设计全攻略
人工智能·算法
WolfGang0073217 小时前
代码随想录算法训练营 Day50 | 图论 part08
数据结构·算法·图论
aini_lovee9 小时前
多目标粒子群优化(MOPSO)双适应度函数MATLAB实现
人工智能·算法·matlab
yong99909 小时前
图像融合与拼接:完整MATLAB工具箱
算法·计算机视觉·matlab
春风不语5059 小时前
深入理解主成分分析(PCA)
算法
apollowing9 小时前
启发式算法WebApp实验室:从搜索策略到群体智能的能力进阶(二十二)
算法·启发式算法·web app
晚枫歌F9 小时前
最小堆定时器
数据结构·算法