一、核心功能
-
视频帧适配:根据输出需求调整输入视频帧的分辨率和帧率
-
分辨率缩放:通过智能比例计算实现像素数优化
-
帧率控制:通过动态丢帧实现帧率限制
-
方向感知处理:独立处理横屏/竖屏视频的适配需求
-
对齐约束:确保输出分辨率满足源端和接收端的对齐要求
-
动态适应:运行时根据需求变化实时调整适配策略
二、核心算法原理
分辨率缩放算法(FindScale函数):
-
目标驱动:在不超过max_pixels的前提下接近target_pixels
-
比例因子:交替使用3/4和2/3缩放因子生成最佳比例
-
智能起点:根据输入分辨率选择2/3或4/4作为起始比例
-
最优选择:遍历所有可能比例,选择最接近目标像素数的方案
-
像素计算:scale_pixel_count = (num²/denom²) * input_pixels
帧率控制算法:
-
双限制机制:取max_framerate_request_和output_format_request_.max_fps的最小值
-
时间戳跟踪:FramerateController根据时间间隔决定是否丢帧
-
动态调整:帧率限制可在运行时动态更新
三、关键数据结构
// 分数表示法(用于分辨率缩放)
struct Fraction {
int numerator; // 分子
int denominator; // 分母
void DivideByGcd(); // 约分方法
int scale_pixel_count(int input_pixels); // 像素计算
};
// 输出格式请求
struct OutputFormatRequest {
absl::optional<std::pair<int, int>> target_landscape_aspect_ratio; // 横屏宽高比
absl::optional<int> max_landscape_pixel_count; // 横屏最大像素
absl::optional<std::pair<int, int>> target_portrait_aspect_ratio; // 竖屏宽高比
absl::optional<int> max_portrait_pixel_count; // 竖屏最大像素
absl::optional<int> max_fps; // 最大帧率
};
// 视频适配器核心类
class VideoAdapter {
// 状态跟踪
int frames_in_, frames_out_, fra

最低0.47元/天 解锁文章
409

被折叠的 条评论
为什么被折叠?



