HI3516A stride的理解.

结论:跨度stride尽量设置为16,32,或者64,这样避免出对齐问题;

            跨度越大,实际增加的buffer也大一些;


 return (CEILING_2_POWER(stSize.u32Width, u32AlignWidth) * \
            CEILING_2_POWER(stSize.u32Height,u32AlignWidth) * \
           ((PIXEL_FORMAT_YUV_SEMIPLANAR_422 == enPixFmt)?2:1.5));


#define CEILING_2_POWER(x,a)     ( ((x) + ((a) - 1) ) & ( ~((a) - 1) ) )


上面的返回值实际就是单个缓冲块的大小,我们假设pic_size为720P(即1280*720),计算下面的return返回值:
<假设stride为16>

宽度上的:1295 & (~15) = 101 0000 1111
                                                   &111 1111 0000
                                           ——————————
                                                      101 0000 0000 = 1280


高度上的:735 & (-15) = (1011010000)b = (720)d

<假设stride为64>
宽度上的依然不变,为1280;
高度上的:768,实际缓冲buffer增大了;

你可能感兴趣的:(Linux_ipc)