SVT-AV1源码分析函数 svt_av1_cost_coeffs_txb

一 函数作用说明

svt_av1_cost_coeffs_txb 用于计算变换块(Transform Block, TXB)中量化系数的码率失真成本(Rate - Distortion Cost).

该函数在视频编码 如AV1 的模式决策,阶段被调用,目的是评估当前变换块编码的比特率和失真的权衡,从而选择最佳的模式。

参数说明:

// Note: don't call this function when eob is 0.

uint64_t svt_av1_cost_coeffs_txb(

struct ModeDecisionContext *ctx, //模式决策上下文,包含编码参数,中间计算结果,概率模型,量化参数,以及算法控制标志

uint8_t allow_update_cdf,//是否允许更新上下文自适应二进制算数编码CABAC的概率模型,CDF,通常为0

FRAME_CONTEXT *ec_ctx,//帧级别的熵编码上下文,存储符号的概率分别模型,用于比特率估算。

struct ModeDecisionCandidateBuffer *cand_bf, //候选模式缓冲区,存储当前候选模式的数据 比如量化系数,预测模式等

const TranLow *const qcoeff,//量化后的变换系数数组指针

uint16_t eob,//变换块的非零系数结束为止End of Block 即最后一个非零系数的索引

PlaneType plane_type, //通道类型,Y/UV

TxSize transform_size, //变换村村,

TxType transform_type,//变换类型 DCT, ADST等

int16_t txb_skip_ctx, //变换块是否跳过上下文索引,用于熵编码概率模型的选择

int16_t dc_sign_ctx, //DC系数符号上下文索引,用于熵编码概率模型的选择

Bool reduced_transform_set_flag //是否使用简化的变换集

)

1.1 初始化上下文

根据plane_type 和transform_size 获取对应的熵编码概率模型(CDF表)

确定是否需要跳过当前块的编码 通过txb_skip_ctx 上下文

1.2 计算跳过块的代价

若块中所有系数均为零(eob == 0) ,直接计算跳过块的比特率成本。

1.3 计算非跳过块的代价

DC系数处理,

计算DC系数的符号Sign和幅值 的编码成本。

AC系数处理

逆扫描通过扫描顺序表 遍历所有非零AC系数,计算每一点的

幅值编码成本(包括二进制化,旁路编码)

符号编码成本(仅对非零系数)

EOB 位置编码

编码ROB位置的额外比特开销。

1.4 码率失真

结合量化系数失真(通常预计算并存储在cand_bf中)和比特率成本,生成最终的码率失真代价

RDCost = lambda * rate + Distortion

1.5 更新概率模型

若allow_update_cdf为1,根据实际编码结果更新 CDF 表,以提升后续符号的编码效率。

CDF:表示符号的概率累积分布表,例如,某个二进制符号的概率模型可能初始化为{0.5,0.5} 但是随着编码数据的变化,CDF会逐步更新为{0.3,0.7}等。

二 函数源码分析

uint64_t svt_av1_cost_coeffs_txb(

struct ModeDecisionContext *ctx,

uint8_t allow_update_cdf,

FRAME_CONTEXT *ec_ctx,

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值