Fix using 16 bits per pixel component - now it supports read and write of up to 2 bytes pel data
This commit is contained in:
1 parent
735b6b8efb
commit
1167ed653d
6 files changed
+106
-103
No files matched your search
+21
-15
@@ -285,18 +285,16 @@ Void PlaYUVerFrame::frameFromBuffer( Byte *Buff, UInt64 uiBuffSize )
|
||||
|
||||
for( i = 0; i < CHROMASHIFT( m_uiHeight, ratioH ) * CHROMASHIFT( m_uiWidth, ratioW ); i++ )
|
||||
{
|
||||
*pTmpPel = 0;
|
||||
for( b = 0; b < bytesPixel; b++ )
|
||||
*pTmpPel = *pTmpBuff;
|
||||
for( b = 1; b < bytesPixel; b++ )
|
||||
{
|
||||
*pTmpPel = ( *pTmpPel << ( m_iBitsPel - 8 * b ) );
|
||||
*pTmpPel += *pTmpBuff++;
|
||||
pTmpBuff++;
|
||||
*pTmpPel |= ( *pTmpBuff << ( 8 * b ) );
|
||||
}
|
||||
pTmpBuff--;
|
||||
pTmpPel++;
|
||||
pTmpBuff += step;
|
||||
}
|
||||
}
|
||||
|
||||
m_bHasRGBPel = false;
|
||||
m_bHasHistogram = false;
|
||||
}
|
||||
@@ -308,14 +306,14 @@ Void PlaYUVerFrame::frameToBuffer( Byte *output_buffer )
|
||||
Byte* pTmpBuff;
|
||||
Pel* pTmpPel;
|
||||
Int ratioH, ratioW, step;
|
||||
UInt i, ch;
|
||||
UInt i, ch, b;
|
||||
|
||||
ppBuff[0] = output_buffer;
|
||||
for( Int i = 1; i < MAX_NUMBER_PLANES; i++ )
|
||||
{
|
||||
ratioW = i > 1 ? m_pcPelFormat->log2ChromaWidth : 0;
|
||||
ratioH = i > 1 ? m_pcPelFormat->log2ChromaHeight : 0;
|
||||
ppBuff[i] = ppBuff[i - 1] + CHROMASHIFT( m_uiHeight, ratioH ) * CHROMASHIFT( m_uiWidth, ratioW );
|
||||
ppBuff[i] = ppBuff[i - 1] + CHROMASHIFT( m_uiHeight, ratioH ) * CHROMASHIFT( m_uiWidth, ratioW ) * bytesPixel;
|
||||
}
|
||||
|
||||
for( ch = 0; ch < m_pcPelFormat->numberChannels; ch++ )
|
||||
@@ -329,7 +327,13 @@ Void PlaYUVerFrame::frameToBuffer( Byte *output_buffer )
|
||||
|
||||
for( i = 0; i < CHROMASHIFT( m_uiHeight, ratioH ) * CHROMASHIFT( m_uiWidth, ratioW ); i++ )
|
||||
{
|
||||
*pTmpBuff = *pTmpPel++;
|
||||
*pTmpBuff = ( *pTmpPel & 0x00FF );
|
||||
for( b = 1; b < bytesPixel; b++ )
|
||||
{
|
||||
pTmpBuff++;
|
||||
*pTmpBuff = ( *pTmpPel >> ( 8 * b ) ) & 0x00FF;
|
||||
}
|
||||
pTmpPel++;
|
||||
pTmpBuff += step;
|
||||
}
|
||||
}
|
||||
@@ -340,7 +344,6 @@ Void PlaYUVerFrame::fillRGBBuffer()
|
||||
{
|
||||
if( m_bHasRGBPel )
|
||||
return;
|
||||
UInt bytesPixel = ( m_iBitsPel - 1 ) / 8 + 1;
|
||||
Int iR, iG, iB;
|
||||
UInt* pARGB = ( UInt* )m_pcARGB32;
|
||||
if( m_pcPelFormat->colorSpace == COLOR_GRAY )
|
||||
@@ -348,8 +351,8 @@ Void PlaYUVerFrame::fillRGBBuffer()
|
||||
Pel* pY = m_pppcInputPel[LUMA][0];
|
||||
for( UInt i = 0; i < m_uiHeight * m_uiWidth; i++ )
|
||||
{
|
||||
iR = *pY++;
|
||||
iG = *pY++;
|
||||
iR = *pY;
|
||||
iG = *pY;
|
||||
iB = *pY++;
|
||||
*pARGB++ = PEL_RGB( iR, iG, iB );
|
||||
}
|
||||
@@ -394,11 +397,14 @@ Void PlaYUVerFrame::fillRGBBuffer()
|
||||
pARGB = pARGBLine;
|
||||
for( x = 0; x < m_uiWidth >> m_pcPelFormat->log2ChromaWidth; x++ )
|
||||
{
|
||||
iU = ( *pU++ ) >> shiftBits;
|
||||
iV = ( *pV++ ) >> shiftBits;
|
||||
iU = *pU++;
|
||||
iU >>= shiftBits;
|
||||
iV = *pV++;
|
||||
iV >>= shiftBits;
|
||||
for( j = 0; j < ( 1 << m_pcPelFormat->log2ChromaWidth ); j++ )
|
||||
{
|
||||
iY = *pY++ >> shiftBits;
|
||||
iY = *pY++;
|
||||
iY >>= shiftBits;
|
||||
YUV2RGB( iY, iU, iV, iR, iG, iB );
|
||||
*pARGB++ = PEL_RGB( iR, iG, iB );
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user