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存储的像素结构,下节单独分析