x264汇编1-帧内插值

53 阅读1分钟

Intra帧内预测

1.16x16水平预测

function predict_16x16_h_neon

    sub         r1, r0, #1 //寄存器r1=r0-1,即对应宏块最左侧紧挨的宏块的内存的值,

    mov         ip, #FDEC_STRIDE //寄存器ip保存立即数FDEC_STRIDE

.rept 8 //循环8次,每次赋值2行

    vld1.8      {d0[]}, [r1], ip //取r1的值,赋值到d0寄存器,, r1+=FDEC_STRIDE

    vmov        d1, d0 //复制d0的值到d1,此时完成

    vld1.8      {d2[]}, [r1], ip //同上,给d2寄存器赋值, r1+=FDEC_STRIDE

    vmov        d3, d2 //同上,以上就给d3赋值,

//这样d0,d1,d2,d3就都保存了两行宏块最左侧紧挨的宏块对应格子的值

    vst1.64     {d0-d1}, [r0,:128], ip //d0-d1线性赋值到r0,r0+=FDEC_STRIDE,第一行完成16x8的赋值

    vst1.64     {d2-d3}, [r0,:128], ip //d2-d3线性赋值到r0,r0+=FDEC_STRIDE ,第二行完成16x8的赋值

.endr //循环结束

    bx          lr //return

endfunc

2.16x16垂直预测

function predict_16x16_v_neon

    sub         r0, r0, #FDEC_STRIDE //寄存器r1=r0-FDEC_STRIDE ,即宏块上面一行紧挨的宏块的一行的值,

    mov         ip, #FDEC_STRIDE

    vld1.64     {d0-d1}, [r0,:128], ip //d0-d1寄存器初始化宏块上方一行的值

.rept 16 //循环16次(行)

    vst1.64     {d0-d1}, [r0,:128], ip //d0-d1的值赋值到r0开始区域(16x8)线性赋值

.endr

    bx          lr //return

endfunc