diff -r 951a5db380a0 -r d87d32eab1a9 videoeditorengine/vedengine/videoprocessor/src/Yuv2rgb16.cpp --- a/videoeditorengine/vedengine/videoprocessor/src/Yuv2rgb16.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,163 +0,0 @@ -/* -* Copyright (c) 2010 Ixonos Plc. -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - Initial contribution -* -* Contributors: -* Ixonos Plc -* -* Description: -* Implementation of class CYuv2Rgb16. -* YUV to EColor64K colorspace converter concrete classes. -* -*/ - - - -#include "yuv2rgb16.h" - -// --------------------------------------------------------- -// CYuv2Rgb16::CYuv2Rgb16() -// Standard C++ constructor. -// --------------------------------------------------------- -// -CYuv2Rgb16::CYuv2Rgb16() -{ - iWidth = iHeight = 0; -} - -// --------------------------------------------------------- -// CYuv2Rgb16::~CYuv2Rgb16() -// Destructor -// --------------------------------------------------------- -// -CYuv2Rgb16::~CYuv2Rgb16() -{ -} - - -// --------------------------------------------------------- -// CYuv2Rgb16::ConstructL() -// Symbian 2nd phase constructor can leave. -// --------------------------------------------------------- -// -void CYuv2Rgb16::ConstructL(TUint aWidth, TUint aHeight, TUint /*aMaxWidth*/, TUint /*aMaxHeight*/) -{ - iWidth = aWidth; - iHeight = aHeight; -} - -// --------------------------------------------------------- -// CYuv2Rgb16::Convert() -// Converts a YUV frame to a EColor64K frame -// --------------------------------------------------------- -// -void CYuv2Rgb16::Convert(const TUint8 *aYBuf, const TUint8 *aUBuf, - const TUint8 *aVBuf, - TUint aBufWidth, TUint aBufHeight, - TUint8 *aTarget, TUint aTargetScanlineLength) -{ - - - TUint cols; - TUint rows = iHeight; - - __ASSERT_ALWAYS((aBufWidth >= iWidth) && (aBufHeight >= iHeight), - User::Invariant()); - - // Convert all rows, two at a time - while ( rows ) - { - // Convert all pixels in this row, two at a time - cols = iWidth; - - TUint8* target1 = aTarget; - TUint8* target2 = aTarget + aTargetScanlineLength; - const TUint8* YPtr1 = aYBuf; - const TUint8* YPtr2 = aYBuf + aBufWidth; - const TUint8* UPtr = aUBuf; - const TUint8* VPtr = aVBuf; - - TUint y, u, v; - TInt rDiff, gDiff, bDiff; - TInt r, g, b; - - while ( cols ) - { - y = *(YPtr1)++; - u = *(UPtr)++ - 128; - v = *(VPtr)++ - 128; - - rDiff = UvToRDiff(v, u); - gDiff = UvToGDiff(v, u); - bDiff = UvToBDiff(v, u); - - // Convert upper left pixel - r = (TInt)y + rDiff; - r = r<0 ? 0 : r>255 ? 0xF800 : (r<<8)&0xF800; - g = (TInt)y - gDiff; - g = g<0 ? 0 : g>255 ? 0x07E0 : (g<<3)&0x07E0; - b = (TInt)y + bDiff; - b = b<0 ? 0 : b>255 ? 0x001F : (b>>3)&0x001F; - - // Write the pixel in RGB format - *(TUint16*)target1 = (TUint16)(r | g | b); - target1 += 2; - - // Convert upper right pixel - y = *(YPtr1)++; - - r = (TInt)y + rDiff; - r = r<0 ? 0 : r>255 ? 0xF800 : (r<<8)&0xF800; - g = (TInt)y - gDiff; - g = g<0 ? 0 : g>255 ? 0x07E0 : (g<<3)&0x07E0; - b = (TInt)y + bDiff; - b = b<0 ? 0 : b>255 ? 0x001F : (b>>3)&0x001F; - - *(TUint16*)target1 = (TUint16)(r | g | b); - target1 += 2; - - // Convert lower left pixel - y = *(YPtr2)++; - - r = (TInt)y + rDiff; - r = r<0 ? 0 : r>255 ? 0xF800 : (r<<8)&0xF800; - g = (TInt)y - gDiff; - g = g<0 ? 0 : g>255 ? 0x07E0 : (g<<3)&0x07E0; - b = (TInt)y + bDiff; - b = b<0 ? 0 : b>255 ? 0x001F : (b>>3)&0x001F; - - *(TUint16*)target2 = (TUint16)(r | g | b); - target2 += 2; - - // Convert lower right pixel - y = *(YPtr2)++; - - r = (TInt)y + rDiff; - r = r<0 ? 0 : r>255 ? 0xF800 : (r<<8)&0xF800; - g = (TInt)y - gDiff; - g = g<0 ? 0 : g>255 ? 0x07E0 : (g<<3)&0x07E0; - b = (TInt)y + bDiff; - b = b<0 ? 0 : b>255 ? 0x001F : (b>>3)&0x001F; - - *(TUint16*)target2 = (TUint16)(r | g | b); - target2 += 2; - - // Next two pixels - cols -= 2; - } - - // Next rows - rows -= 2; - aYBuf += 2*aBufWidth; - aUBuf += aBufWidth/2; - aVBuf += aBufWidth/2; - aTarget += 2*aTargetScanlineLength; - } -}