x264 8x8 水平预测汇编分析

发布于:2024-04-09 ⋅ 阅读:(144) ⋅ 点赞:(0)

C 语言代码

void s264_predict_8x8_h_c( pixel *src, pixel edge[36] )

{

    PREDICT_8x8_LOAD_LEFT

#define ROW(y) MPIXEL_X4( src+y*FDEC_STRIDE+0 ) =\

               MPIXEL_X4( src+y*FDEC_STRIDE+4 ) = PIXEL_SPLAT_X4( l##y );

    ROW(0); ROW(1); ROW(2); ROW(3); ROW(4); ROW(5); ROW(6); ROW(7);//每一行签一个像素flap整行

#undef ROW

}

//uint8_t *src, uint8_t edge[36] 

//参数 两个 1 原始像素, 2 边缘像素 8x8的四边? 4*9 = 36?

function predict_8x8_h_neon, export=1

    mov         x7,  #FDEC_STRIDE //32 bytes

    ld1        {v16.16b}, [x1] //edge读16字节到 v16

    dup         v0.8b, v16.b[14] //b[14] 这个字节 横向拷贝给v0 的8字节,第0行的 首个字节 

    dup         v1.8b, v16.b[13] //同上 第1 行首个字节

    st1        {v0.8b}, [x0], x7 // 存储到内存中,也就是把8个字节存入src 然后src += 32

    dup         v2.8b, v16.b[12] //第2 行首个字节

    st1        {v1.8b}, [x0], x7 // 存储到内存中,也就是把8个字节存入src 然后src += 32

    dup         v3.8b, v16.b[11] //第3 行首个字节

    st1        {v2.8b}, [x0], x7 //存储到内存中,也就是把8个字节存入src 然后src += 32

    dup         v4.8b, v16.b[10] //第4 行首个字节

    st1        {v3.8b}, [x0], x7 //存储到内存中,也就是把8个字节存入src 然后src += 32

    dup         v5.8b, v16.b[9] //第5 行首个字节

    st1        {v4.8b}, [x0], x7 //存储到内存中,也就是把8个字节存入src 然后src += 32

    dup         v6.8b, v16.b[8] //第6 行首个字节

    st1        {v5.8b}, [x0], x7 //存储到内存中,也就是把8个字节存入src 然后src += 32

    dup         v7.8b, v16.b[7] //第7 行首个字节

    st1        {v6.8b}, [x0], x7 //存储到内存中,也就是把8个字节存入src 然后src += 32

    st1        {v7.8b}, [x0], x7 //存储到内存中,也就是把8个字节存入src 然后src += 32

    ret

endfunc

edge存储像素结构下节单独分析


网站公告

今日签到

点亮在社区的每一天
去签到