AVS中访问色度分量时的stride问题

2 篇文章 0 订阅

在AVS编码器中写代码的时候经常会访问亮度色度分量的原始值、预测值、重构值、残差值等,这时候就需要用到stride以访问到正确的内存空间。亮度分量没什么好说的,一般都可以根据相关的结构体获取得到亮度分量的stride,而色度分量的stride有些时候并不能直接获取到,于是乎,写代码的时候,考虑到色度分量与亮度分量是1:2的关系,我理所当然的认为stride也是这样的。然而,事实证明,想当然是没有好下场的……

在AVS编码器中,要想访问色度分量的相关像素值,其stride并不是stride>>1,而是stride本身。这是为什么呢?我在编码器中跟了一下存放色度分量的预测值的代码,发现YUV三个分量的存放于获取并不是我想的那样,而是如下图所示:


所以,若想访问U1色度块,则需要获取到指向其左上角像素的内存地址p_chroma,及其width和height(亮度分量的一半),逐行访问像素值,当一行的像素值访问结束之后,内存地址p_chroma=p_chroma+Stride可得到下一行行首的内存地址。图示就可以看出,访问色度分量的时候并不是使用stride>>1的,主要是由于其YUV分量的存放方式导致。

其实,只要仔细看代码了就很容易明白,这次犯错还是因为想当然,没有深入到代码中去理解代码。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值