Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 自定义数组排序(YUYV->;YUV422P)_Arrays_Algorithm_Optimization_Image Processing_Sorting - Fatal编程技术网

Arrays 自定义数组排序(YUYV->;YUV422P)

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+

我正在尝试从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需要在一起

我正在努力使这一部分尽可能高效,并且花费最少的时间

以下是我迄今为止所做的工作:

    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来加速它,同时在多个像素上执行很多操作