📄 ycbcr444.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 + -