zoukankan      html  css  js  c++  java
  • YUV422转RGB24

    使用mplayer可以直接播放YUV原始数据文件

    int DeckLinkCaptureDelegate::convert_yuv_to_rgb_pixel(int y, int u, int v)
    {
            unsigned int pixel32 = 0;
            unsigned char *pixel = (unsigned char *)&pixel32;
            int r, g, b;
            r = y + (1.370705 * (v-128));
            g = y - (0.698001 * (v-128)) - (0.337633 * (u-128));
            b = y + (1.732446 * (u-128));
            if(r > 255) r = 255;
            if(g > 255) g = 255;
            if(b > 255) b = 255;
            if(r < 0) r = 0;
            if(g < 0) g = 0;
            if(b < 0) b = 0;
            pixel[0] = r ;
            pixel[1] = g ;
            pixel[2] = b ;
            return pixel32;
    }
    
    int DeckLinkCaptureDelegate::convert_yuv_to_rgb_buffer(unsigned char *yuv, unsigned char *rgb, unsigned int width, unsigned int height)
    {
            unsigned int in, out = 0;
            unsigned int pixel_16;
            unsigned char pixel_24[3];
            unsigned int pixel32;
            int y0, u, y1, v;
    
            for(in = 0; in < width * height * 2; in += 4)
            {
                    pixel_16 =
                                    yuv[in + 3] << 24 |
                                    yuv[in + 2] << 16 |
                                    yuv[in + 1] <<  8 |
                                    yuv[in + 0];
                    y0 = (pixel_16 & 0x000000ff);
                    u  = (pixel_16 & 0x0000ff00) >>  8;
                    y1 = (pixel_16 & 0x00ff0000) >> 16;
                    v  = (pixel_16 & 0xff000000) >> 24;
                    pixel32 = convert_yuv_to_rgb_pixel(y0, u, v);
                    pixel_24[0] = (pixel32 & 0x000000ff);
                    pixel_24[1] = (pixel32 & 0x0000ff00) >> 8;
                    pixel_24[2] = (pixel32 & 0x00ff0000) >> 16;
                    rgb[out++] = pixel_24[0];
                    rgb[out++] = pixel_24[1];
                    rgb[out++] = pixel_24[2];
                    pixel32 = convert_yuv_to_rgb_pixel(y1, u, v);
                    pixel_24[0] = (pixel32 & 0x000000ff);
                    pixel_24[1] = (pixel32 & 0x0000ff00) >> 8;
                    pixel_24[2] = (pixel32 & 0x00ff0000) >> 16;
                    rgb[out++] = pixel_24[0];
                    rgb[out++] = pixel_24[1];
                    rgb[out++] = pixel_24[2];
            }
            return 0;
    
    }
    mrgb = (unsigned char*)malloc(1280 * 720 * 3 * sizeof(char));
    mImage = new QImage(mrgb, 1280, 720, QImage::Format_RGB888);
    convert_yuv_to_rgb_buffer((uchar*)frameBytes,mrgb,1280, 720);
    mImage->loadFromData((uchar*)mrgb, 1280 * 720 * 3 * sizeof(char));
    bool bsave = mImage->save("/home/johnson/2.bmp","bmp");
  • 相关阅读:
    9.17 HTML CSS
    9.16
    9.15
    9.14
    9.13
    9.12
    9.11
    9.10
    9.9
    9.8
  • 原文地址:https://www.cnblogs.com/jck34/p/3898569.html
Copyright © 2011-2022 走看看