Use struture Pixel to define pixel values
This commit is contained in:
1 parent
a98aa68221
commit
8f50a6d1b9
4 files changed
+101
-10
No files matched your search
@@ -85,7 +85,9 @@ PlaYUVerFrame::~PlaYUVerFrame()
|
||||
free_mem3Dpel( m_pppcRGBPel );
|
||||
}
|
||||
|
||||
static inline void yuvToRgb( int iY, int iU, int iV, int &iR, int &iG, int &iB )
|
||||
|
||||
template<typename T>
|
||||
Void yuvToRgb( T iY, T iU, T iV, T &iR, T &iG, T &iB )
|
||||
{
|
||||
iR = iY + 1402 * iV / 1000;
|
||||
iG = iY - ( 101004 * iU + 209599 * iV ) / 293500;
|
||||
@@ -106,6 +108,14 @@ static inline void yuvToRgb( int iY, int iU, int iV, int &iR, int &iG, int &iB )
|
||||
iB = 255;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Void rgbToyuv( T iR, T iG, T iB, T &iY, T &iU, T &iV )
|
||||
{
|
||||
iY = 0;
|
||||
iU = 0;
|
||||
iV = 0;
|
||||
}
|
||||
|
||||
Void PlaYUVerFrame::YUV420toRGB()
|
||||
{
|
||||
Int iY, iU, iV, iR, iG, iB;
|
||||
@@ -253,6 +263,63 @@ UInt64 PlaYUVerFrame::getBytesPerFrame()
|
||||
return 0;
|
||||
}
|
||||
|
||||
Pixel PlaYUVerFrame::ConvertPixel( Pixel sInputPixel, ColorSpace eOutputSpace )
|
||||
{
|
||||
Pixel sOutputPixel = {COLOR_INVALID,0,0,0};
|
||||
|
||||
if( sInputPixel.color_space == eOutputSpace )
|
||||
return sInputPixel;
|
||||
|
||||
if( eOutputSpace == COLOR_RGB )
|
||||
{
|
||||
yuvToRgb( sInputPixel.Luma, sInputPixel.ChromaU, sInputPixel.ChromaU,
|
||||
sOutputPixel.ColorR, sOutputPixel.ColorG, sOutputPixel.ColorB );
|
||||
}
|
||||
if( eOutputSpace == COLOR_YUV )
|
||||
{
|
||||
rgbToyuv( sInputPixel.ColorR, sInputPixel.ColorG, sInputPixel.ColorB,
|
||||
sOutputPixel.Luma, sOutputPixel.ChromaU, sOutputPixel.ChromaU );
|
||||
}
|
||||
return sOutputPixel;
|
||||
}
|
||||
|
||||
|
||||
Pixel PlaYUVerFrame::getPixelValue(const QPoint &pos, ColorSpace space)
|
||||
{
|
||||
Pixel pixel_value;
|
||||
switch( m_iPixelFormat )
|
||||
{
|
||||
case YUV420:
|
||||
pixel_value.color_space = COLOR_YUV;
|
||||
pixel_value.Luma = m_pppcInputPel[LUMA][pos.y()][pos.x()];
|
||||
pixel_value.ChromaU = m_pppcInputPel[CHROMA_U][pos.y()>>1][pos.x()>>1];
|
||||
pixel_value.ChromaV = m_pppcInputPel[CHROMA_V][pos.y()>>1][pos.x()>>1];
|
||||
break;
|
||||
case YUV422:
|
||||
pixel_value.color_space = COLOR_YUV;
|
||||
pixel_value.Luma = m_pppcInputPel[LUMA][pos.y()][pos.x()];
|
||||
pixel_value.ChromaU = m_pppcInputPel[CHROMA_U][pos.y()][pos.x()>>1];
|
||||
pixel_value.ChromaV = m_pppcInputPel[CHROMA_V][pos.y()][pos.x()>>1];
|
||||
break;
|
||||
case YUV400:
|
||||
pixel_value.color_space = COLOR_YUV;
|
||||
pixel_value.Luma = m_pppcInputPel[LUMA][pos.y()][pos.x()];
|
||||
pixel_value.ChromaU = 0;
|
||||
pixel_value.ChromaV = 0;
|
||||
break;
|
||||
case RGB:
|
||||
pixel_value.color_space = COLOR_RGB;
|
||||
pixel_value.ColorR = m_pppcInputPel[COLOR_R][pos.y()][pos.x()];
|
||||
pixel_value.ColorG = m_pppcInputPel[COLOR_G][pos.y()][pos.x()];
|
||||
pixel_value.ColorB = m_pppcInputPel[COLOR_B][pos.y()][pos.x()];
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
ConvertPixel( pixel_value, space );
|
||||
return pixel_value;
|
||||
}
|
||||
|
||||
Pel PlaYUVerFrame::getPixelValueFromYUV(const QPoint &pos, YUVcomponent color)
|
||||
{
|
||||
return m_pppcInputPel[color][0][pos.y()*m_uiWidth+pos.x()];
|
||||
|
||||
Reference in new issue
Block a user