Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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
C++ 优化YUY2到I420的转换_C++_Video_Optimization - Fatal编程技术网

C++ 优化YUY2到I420的转换

C++ 优化YUY2到I420的转换,c++,video,optimization,C++,Video,Optimization,我正在编写一个以x264为编码器的视频会议应用程序。我从网络摄像头接收YUY2原始帧,然后根据x264的要求将其转换为I420。问题是-我自己编写了转换算法,但速度不是很快(占整个CPU时间的20%,数据由分析器提供)。我怎样才能使它更快?这是我的密码: int YUY2ToI420(BYTE *in, BYTE *out){ long pixels = _width * _height; long macropixels = pixels / 2; // macropixel

我正在编写一个以x264为编码器的视频会议应用程序。我从网络摄像头接收YUY2原始帧,然后根据x264的要求将其转换为I420。问题是-我自己编写了转换算法,但速度不是很快(占整个CPU时间的20%,数据由分析器提供)。我怎样才能使它更快?这是我的密码:

int YUY2ToI420(BYTE *in, BYTE *out){

    long pixels = _width * _height;
    long macropixels = pixels / 2; // macropixel count
    // new size will be w * h * 3/2 -> 12 bits per pixel 4:2:0

    long mpx_per_row = info.biWidth / 2;

    // for each macropixel
    for (int i = 0, ci = 0; i < macropixels; i++){ // ci is chroma index
        // get macropixel address, order is Y0 U0 Y1 V0
        BYTE *mpAddress = in + i * 4;

        // copy luma data
        out[i * 2] = mpAddress[0];
        out[i * 2 + 1] = mpAddress[2];

        // copy chroma data - we skip odd rows because of 4:2:0 sampling
        long row_number = i / mpx_per_row;
        if (row_number % 2 == 0) {
            out[pixels + ci] = mpAddress[1]; // shift by Y vector
            out[pixels + pixels / 4 + ci] = mpAddress[3]; // shift by Y and U vector
            ci++;
        }
    }

    return pixels * 12 / 8; // I420
}
int YUY2ToI420(字节*in,字节*out){
长像素=_宽度*_高度;
长宏观像素=像素/2;//宏观像素计数
//新大小将为w*h*3/2->12位/像素4:2:0
每行长mpx\u=info.biWidth/2;
//对于每个宏观像素
对于(inti=0,ci=0;i
我强烈建议您使用ffmpeg项目中的sws\U比例。它具有针对大多数CPU和颜色格式的优化功能。我相信你也可以使用opencv,但我没有使用它的第一手经验