Arrays 自定义数组排序(YUYV->;YUV422P)
我正在尝试从YUYV格式到YUV422p格式进行排序和数组。阵列当前看起来像: [y1][cb1][y2][cr1][y3][cb2][y4][cr2][y5][cb3][y6][cr3][y7][cb4][y8][cr4]…[yn][cbn+1/2][yn+1][crn+1/2] 我需要将其排序为: [y1][y2][y3][y4][y5][y6][y7][y8][yn][yn+1]、[cb1][cb2][cb3][cb4][cbn+1/2]、[cr1][cr2][cr3][cr4][crn+1/2] 所有y需要在一起,所有cb需要在一起,所有cr需要在一起 我正在努力使这一部分尽可能高效,并且花费最少的时间 以下是我迄今为止所做的工作:Arrays 自定义数组排序(YUYV->;YUV422P),arrays,algorithm,optimization,image-processing,sorting,Arrays,Algorithm,Optimization,Image Processing,Sorting,我正在尝试从YUYV格式到YUV422p格式进行排序和数组。阵列当前看起来像: [y1][cb1][y2][cr1][y3][cb2][y4][cr2][y5][cb3][y6][cr3][y7][cb4][y8][cr4]…[yn][cbn+1/2][yn+1][crn+1/2] 我需要将其排序为: [y1][y2][y3][y4][y5][y6][y7][y8][yn][yn+1]、[cb1][cb2][cb3][cb4][cbn+1/2]、[cr1][cr2][cr3][cr4][crn+
inline const void YUYV_to_YUV422P_1280x960( char* yuyv, char* yuv422p)
{
const unsigned int height = 960;
const unsigned int width = 1280;
int loopCount1 = height*width/2;
int loopCount2 = height*width;
char* yComponent = yuv422p;
char* cbComponent = yuv422p + loopCount2;
char* crComponent = yuv422p + loopCount1 + loopCount2;
int i;
for( i = (loopCount1 - 1); i != 0; --i )
{
cbComponent[ i ] = yuyv[ i*4 + 1 ];
crComponent[ i ] = yuyv[ i*4 + 3 ];
}
for( i = (loopCount2 -1); i != 0; --i )
{
yComponent[ i ] = yuyv[ i*2 ];
}
}
关于如何提高效率和速度的任何想法,请让我知道。建议总是测量它,然后决定它是否足够快。如果你在3GHz的PC上这样做,节省几微秒会有什么影响 通常在这类任务中,内存I/O是有限的,因此编写它以获得最佳缓存性能非常重要。根据图像和硬件的大小,最好一次处理一行图像,以便在缓存中输入和输出图像行 如果你有一个现代化的CPU,你可以用SSE2来加速它,同时在多个像素上执行很多操作