⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ycbcr444.c

📁 jpeg图像文件软件解码器的arm版本的源代码程序
💻 C
字号:
///////////////////////////////////////////////////////////////////////////////
//
//  YCbCr444.c
//
//  DESCRIPTION
//       Accepts the MCU blocks available in 4:4:4 format. Convert them to the
//       specified formats:
//           1. RGB32
//         2. RGB24
//         3. RGB565
//         4. RGB555
//
//
///////////////////////////////////////////////////////////////////////////////


#include "YCbCr444.h"

#if    SUPPORT_YUV444

#if SUPPORT_RGB32
/////////////////////////////////////////////////////////////////////////////
// NAME  
//            YCbCr444ToRGB32
//
// DESCRIPTION
//            Convert YCbCr444 format to RGB32 format
//
// INPUTS   
//            imageBlocks  - pointer to YUV buffers
//            decodedImage - pointer to output image structure 
// 
// OUTPUTS  
//            decodedImage - store output in output image structure        
//
// RETURN VALUE
//          Always returns JPEG_OK    
//           
/////////////////////////////////////////////////////////////////////////////
int YCbCr444ToRGB32
(
    OP_UINT8        *imageBlocks, 
    JPEGFieldDec    *decodedImage
)
{
    int         i; 
    int         j; 
    int         k;
    OP_UINT8    *pY;
    OP_UINT8    *pCb; 
    OP_UINT8    *pCr;
    OP_UINT8    *destLine;
    OP_UINT8    y11;
    OP_UINT8    y12; 
    OP_UINT8    y13; 
    OP_UINT8    y14;
    OP_UINT8    Cb11;
    OP_UINT8    Cb12; 
    OP_UINT8    Cb13; 
    OP_UINT8    Cb14;
    OP_UINT8    Cr11;
    OP_UINT8    Cr12; 
    OP_UINT8    Cr13; 
    OP_UINT8    Cr14;
    OP_UINT32   *id1;
    int         fieldRowDist;

    pY  = imageBlocks;
    pCb = pY + BLOCK_AREA;
    pCr = pCb + BLOCK_AREA;

    fieldRowDist = decodedImage->fieldRowDist;
    destLine = decodedImage->mcuBuf;
    k = ((OP_UINT32)(decodedImage->mcuBufRowEnd - decodedImage->mcuBuf)) >> 2;
    if(k > 8)
    {
        k = 8;
    }
    k = 8 - k;

    // 8 rows per block
    for (i = 8; i > 0; i --)
    {
        id1 = (OP_UINT32 *) destLine;

        // two iterations per row
        for (j = 2; j > 0; j --)
        {
            Cb11 = *pCb++;
            Cb12 = *pCb++;
            Cb13 = *pCb++;
            Cb14 = *pCb++;
            
            Cr11 = *pCr++;
            Cr12 = *pCr++;
            Cr13 = *pCr++;
            Cr14 = *pCr++;
            
            y11 = *pY++;
            y12 = *pY++;
            y13 = *pY++;
            y14 = *pY++;
            
            // RGB
            if(j * 4 > k)
            {
                *id1 ++ = GetR(y11, Cr11, 0) | (GetG(y11, Cr11, Cb11, 0) << 8) |
                        (GetB(y11, Cb11, 0) << 16) | 0xff000000L;
            }

            // RGB
            if(j * 4 - 1 > k)
            {
                *id1 ++ = GetR(y12, Cr12, 0) | (GetG(y12, Cr12, Cb12, 0) << 8) |
                        (GetB(y12, Cb12, 0) << 16) | 0xff000000L;
            }

            // RGB
            if(j * 4 - 2 > k)
            {
                 *id1 ++ = GetR(y13, Cr13, 0) | (GetG(y13, Cr13, Cb13, 0) << 8) |
                        (GetB(y13, Cb13, 0) << 16) | 0xff000000L;
            }

            // RGB
            if(j * 4 - 3 > k)
            {
                 *id1 ++ = GetR(y14, Cr14, 0) | (GetG(y14, Cr14, Cb14, 0) << 8) |
                        (GetB(y14, Cb14, 0) << 16) | 0xff000000L;
            }
          }

        destLine += fieldRowDist;
    }

    decodedImage->mcuBuf += 32;

    return JPEG_OK;
}
#endif

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -