• YUV420 转 RGB 测试


    逐像素浮点运算转换的,很慢,目测 1080p 只有 12fps 左右

    sws_scale(img_convert_context, (const unsigned char *const *)p_frame->data, p_frame->linesize, 0, p_codec_context->height,
    						  p_frame_yuv->data, p_frame_yuv->linesize);
    
    // SDL_UpdateYUVTexture(sdl_texture, &sdl_rect,
    // 					 p_frame_yuv->data[0], p_frame_yuv->linesize[0],
    // 					 p_frame_yuv->data[1], p_frame_yuv->linesize[1],
    // 					 p_frame_yuv->data[2], p_frame_yuv->linesize[2]);
    
    size_t image_h = p_codec_context->height;
    size_t image_w = p_codec_context->width;
    
    Image image(image_w, image_h);
    
    for (int y = 0; y < image_h; y++)
    {
        for (int x = 0; x < image_w; x++)
        {
            int y2 = y / 2;
            int x2 = x / 2;
    
            uint8_t Y = p_frame_yuv->data[0][y * p_frame_yuv->linesize[0] + x];
            uint8_t Cb = p_frame_yuv->data[1][y2 * p_frame_yuv->linesize[1] + x2];
            uint8_t Cr = p_frame_yuv->data[2][y2 * p_frame_yuv->linesize[2] + x2];
    
            uint8_t R = Y + 1.402 * (Cr - 128);
            uint8_t G = Y - 0.34414 * (Cb - 128) - 0.71414 * (Cr - 128);
            uint8_t B = Y + 1.772 * (Cb - 128);
    
            image.Set(x, y, {R, G, B});
        }
    }
    
    uint8_t *pixels = new uint8_t[image_h * image_w * 4];
    for (int y = 0; y < image_h; y++)
    {
        for (int x = 0; x < image_w; x++)
        {
            vec3 vec = image.Get(x, y);
    
            uint8_t r = vec.x;
            uint8_t g = vec.y;
            uint8_t b = vec.z;
    
            pixels[y * image_w * 4 + x * 4 + 0] = 0;
            pixels[y * image_w * 4 + x * 4 + 1] = b;
            pixels[y * image_w * 4 + x * 4 + 2] = g;
            pixels[y * image_w * 4 + x * 4 + 3] = r;
        }
    }
    
    SDL_UpdateTexture(sdl_texture, &sdl_rect, pixels, image_w * 4);
    
    delete[] pixels;
    
    SDL_RenderClear(sdl_renderer);
    SDL_RenderCopy(sdl_renderer, sdl_texture, NULL, &sdl_rect);
    SDL_RenderPresent(sdl_renderer);
    // SDL_Delay(10);
    
    
  • 相关阅读:
    linux tar 压缩解压缩
    JS获取图片上传地址
    ipython notebook
    docker build lnmp(未完成。。。)
    centos6.7 install chrome
    centos6.6 install
    centos 安装mysqldb 记录
    centos emacs安装
    第三周-第08章节-Python3.5-文件修改详解
    第三周-第06章节-Python3.5-文件读与写详解
  • 原文地址:https://www.cnblogs.com/mollnn/p/14445998.html
Copyright © 2020-2023  润新知