HEVC-Transform Skip技术

Transform Skip

简介

背景:
HEVC为了提高屏幕内容编码的效率,采用了TSM(Transform Skip Mode)技术。研究表明,由于屏幕视频内容的各项异性特征,对于文本、图形、色调单一的背景等区域,如果不做频域变换,而直接对预测残差编码,效果会更好。
原理:
在人造序列(如动画片、游戏视频等)中,图像呈平缓区域无变化、边界区域剧烈变化的趋势,预测之后的残差与 自然图像有明显的区别。这些残差数量较少,但值很大。经过变换,这些残差会形成大量的高频信息,导致出现大量冗余。transform skip技术在编码端决定是否进行变换,在上述现象发生时不进行变换,从而使得人造序列的压缩率得到了极大地提升。

X265中实现

帧间4x4以及帧内的NxN(也是4x4的块),如果开启TransformSkip的开关并且使用transform时的cbf不为0,则亮度以及色度块都会进行判断,即将使用变换与RDO-cost与不使用变换的RDO-cost做比较,最终选择最优的模式。
Transform Skip虽然是跳过变换模块,但是仍然要对残差进行处理,再进行量化的操作。
处理的代码如下:

void cpy2Dto1D_shl(int16_t* dst, const int16_t* src, intptr_t srcStride, int shift)
{
    X265_CHECK(((intptr_t)dst & 15) == 0, "dst alignment error\n");
    X265_CHECK((((intptr_t)src | (srcStride * sizeof(*src))) & 15) == 0 || size == 4, "src alignment error\n");
    X265_CHECK(shift >= 0, "invalid shift\n");

    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < size; j++)
            dst[j] = src[j] << shift;

        src += srcStride;
        dst += size;
    }
}

同理,在执行完反量化后,虽然不需要执行反变换,但是仍需要对数据做处理后才能还原出残差值,处理代码如下:

void cpy1Dto2D_shr(int16_t* dst, const int16_t* src, intptr_t dstStride, int shift)
{
    X265_CHECK((((intptr_t)dst | (dstStride * sizeof(*dst))) & 15) == 0 || size == 4, "dst alignment error\n");
    X265_CHECK(((intptr_t)src & 15) == 0, "src alignment error\n");
    X265_CHECK(shift > 0, "invalid shift\n");

    int16_t round = 1 << (shift - 1);
    for (int i = 0; i < size; i++)
    {
        for (int j = 0; j < size; j++)
            dst[j] = (src[j] + round) >> shift;

        src += size;
        dst += dstStride;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sheldonma

感谢大佬赏饭

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值