diff -r 951a5db380a0 -r e0b5df5c0969 videoeditorengine/vedengine/GenManip/src/DisplayChain.cpp --- a/videoeditorengine/vedengine/GenManip/src/DisplayChain.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,530 +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: -* -*/ - - -//----IMAAMI---- -//************************************************************************* -// -//Version 1.00 -// -//Contains: -// CDisplayChain -// Image processing class implementing -// display specific image processing: -// - Scaling to display size with pan support -// - IETD - display specific color contrast enhancement -// - Sharpening -// - Display feature compensation by simple color management -// - Dithering -// -//History: -// 30.10.2003 version 1.00 created using existing IMAAMI algorithms -//************************************************************************* - -#include -#include "DisplayChain.h" - - -/* ------------------------------------------------------------------------------ - - Constructor - - Default constructor, initializes member variables to initial values - - Return Values: none - ------------------------------------------------------------------------------ -*/ -CDisplayChain::CDisplayChain() -{ - // This function is intentionally left blank. -} - - - - -/* ------------------------------------------------------------------------------ - - NewLC - - Factory function to instantiate the class. - This function leaves the class pointer to the cleanup stack - May leave with KErrNoMemory if no memory available - - Return Values: CDisplayChain* self: pointer to the class instance - ------------------------------------------------------------------------------ -*/ -CDisplayChain* CDisplayChain::NewLC() -{ - CDisplayChain* self = new (ELeave) CDisplayChain(); - CleanupStack::PushL(self); - self->ConstructL(); - return self; -} - - - - -/* ------------------------------------------------------------------------------ - - CDCIetd - - NewL - - Factory function to instantiate the class. - May leave with KErrNoMemory if no memory available - - Return Values: CDisplayChain* self: pointer to the class instance - ------------------------------------------------------------------------------ -*/ -CDisplayChain* CDisplayChain::NewL() -{ - CDisplayChain* self = CDisplayChain::NewLC(); - CleanupStack::Pop(); - return self; -} - - - - - -/* ------------------------------------------------------------------------------ - - CDCIetd - - ConstructL - - Second phase constructor. Does nothing at the moment - - Return Values: none - - ----------------------------------------------------------------------------- -*/ -void CDisplayChain::ConstructL() -{ - // Create objects for ImaamiImageChain - DigitalZoomPtr = CDCDigitalZoom::NewL(); - CleanupStack::PushL(DigitalZoomPtr); - - SharpeningPtr = DCSharpening::NewL(); - CleanupStack::PushL(SharpeningPtr); - - DitheringPtr = CDCDithering::NewL(); - CleanupStack::PushL(DitheringPtr); - - IetdPtr = CDCIetd::NewL(); - CleanupStack::PushL(IetdPtr); - - ColorManagementPtr = CDCColorManagement::NewL(); - CleanupStack::PushL(ColorManagementPtr); - - - TInt i; //Index - - //As default image is just opened to be processed - Parameters.FirstOpening = ETrue; - - //Get current processing parameters from processing objects - DigitalZoomPtr->GetParameters(&Parameters.DZParameters); - IetdPtr->GetParams(&Parameters.IETDParameters); - SharpeningPtr->GetParameters(&Parameters.SharpeningParameters); - ColorManagementPtr->GetParameters(&Parameters.ColorManagementParameters); - - //Here the parameters can be read for example from a text file or from the registers, etc. - //if (!ReadFileL()) - { - //Set default parameter values - //(Defined in DCInit.h) - //---------------------------- - - //Set each processing ON/OFF - Parameters.DigitalZoomON = DZ; - Parameters.DitheringON = DITHER; - Parameters.ColorManagementON = ETrue; //CM; - Parameters.IetdON = IETD; - Parameters.SharpeningON = SHARP; - - //DigitalZoom - DigitalZoomPtr->GetParameters(&Parameters.DZParameters); - Parameters.DZParameters.sizeX = DZsizeX; - Parameters.DZParameters.sizeY = DZsizeY; - Parameters.DZParameters.scaleX = DZscaleX; - Parameters.DZParameters.scaleY = DZscaleY; - Parameters.DZParameters.allShiftX = DZallX; - Parameters.DZParameters.allShiftY = DZallY; - Parameters.DZParameters.newShiftX = DZnewX; - Parameters.DZParameters.newShiftY = DZnewY; - - //IETD - Parameters.IETDParameters.aStretchLimit = StretchLimit; - Parameters.IETDParameters.aBlackPixels = BlackPixels; - Parameters.IETDParameters.aWhitePixels = WhitePixels; - Parameters.IETDParameters.aSaturationGain = SaturationGain; - Parameters.IETDParameters.aBitLimit = BitLimit; - Parameters.IETDParameters.aWBC = WBC; - Parameters.IETDParameters.aDBC = DBC; - - //Sharpening - Parameters.SharpeningParameters.SHARP_GAIN = SharpGain; - Parameters.SharpeningParameters.SHARP_DZONE = SharpDZone; - Parameters.SharpeningParameters.SHARP_OVER = SharpOver; - - //Color Management (fill LUTs and matrix) - for(i=0;i<256;i++) - { - Parameters.ColorManagementParameters.GammaR[i] = CMGammaR[i]; - } - - for(i=0;i<256;i++) - { - Parameters.ColorManagementParameters.GammaG[i] = CMGammaG[i]; - } - - for(i=0;i<256;i++) - { - Parameters.ColorManagementParameters.GammaB[i] = CMGammaB[i]; - } - - for(i=0;i<256;i++) - { - Parameters.ColorManagementParameters.TRCR[i] = CMTRCR[i]; - } - - for(i=0;i<256;i++) - { - Parameters.ColorManagementParameters.TRCG[i] = CMTRCG[i]; - } - - for(i=0;i<256;i++) - { - Parameters.ColorManagementParameters.TRCB[i] = CMTRCB[i]; - } - - for(i=0;i<9;i++) - { - Parameters.ColorManagementParameters.Matrix[i] = CMMatrix[i]; - } - - } - - //Set the default parameters - IetdPtr->SetParams(&Parameters.IETDParameters); - SharpeningPtr->SetParameters(&Parameters.SharpeningParameters); - ColorManagementPtr->SetParameters(&Parameters.ColorManagementParameters); - - CleanupStack::Pop(5); //Processing objects -} - - - - -/* ------------------------------------------------------------------------------ - - CDCIetd - - Destructor - - Deletes the allocated memory - - Return Values: none - ------------------------------------------------------------------------------ -*/ -CDisplayChain::~CDisplayChain() -{ - //Delete processing objects - delete DigitalZoomPtr; - delete SharpeningPtr; - delete DitheringPtr; - delete IetdPtr; - delete ColorManagementPtr; -} - - - -/* ------------------------------------------------------------------------------ - - ProcessL - - Process image referenced by InBitmap (modify aTargetBitmap). - If scaling is not used aTargetBitmap is processed directly. - - May leave with KErrNoMemory if no memory available - - Return Values: none - ------------------------------------------------------------------------------ -*/ -void CDisplayChain::ProcessL(const CFbsBitmap* InBitmap, CFbsBitmap* aTargetBitmap) -{ - - //CHECK! pan check needed only when DZ is ON - //Scaling - if (Parameters.DigitalZoomON) - { - // refine the zooming parameters based on input data - TSize inSize = InBitmap->SizeInPixels(); - TSize outSize = aTargetBitmap->SizeInPixels(); - Parameters.DZParameters.sizeX = outSize.iWidth; - Parameters.DZParameters.sizeY = outSize.iHeight; - Parameters.DZParameters.scaleX = (TReal)outSize.iWidth/(TReal)inSize.iWidth; - Parameters.DZParameters.scaleY = (TReal)outSize.iHeight/(TReal)inSize.iHeight; - - //If the image is tried to pan over the image borders, bound to the borders - if (Parameters.DZParameters.allShiftX < (-InBitmap->SizeInPixels().iWidth/2 * Parameters.DZParameters.scaleX + aTargetBitmap->SizeInPixels().iWidth/2)) - { - Parameters.DZParameters.allShiftX = (TInt)((-InBitmap->SizeInPixels().iWidth/2)*Parameters.DZParameters.scaleX + aTargetBitmap->SizeInPixels().iWidth/2); - } - - if (Parameters.DZParameters.allShiftX > (InBitmap->SizeInPixels().iWidth/2 * Parameters.DZParameters.scaleX - aTargetBitmap->SizeInPixels().iWidth/2)) - { - Parameters.DZParameters.allShiftX = (TInt)((InBitmap->SizeInPixels().iWidth/2)*Parameters.DZParameters.scaleX - aTargetBitmap->SizeInPixels().iWidth/2); - } - - if (Parameters.DZParameters.allShiftY < (-InBitmap->SizeInPixels().iHeight/2 * Parameters.DZParameters.scaleY + aTargetBitmap->SizeInPixels().iHeight/2)) - { - Parameters.DZParameters.allShiftY = (TInt)((-InBitmap->SizeInPixels().iHeight/2)*Parameters.DZParameters.scaleY + aTargetBitmap->SizeInPixels().iHeight/2); - } - - if (Parameters.DZParameters.allShiftY > (InBitmap->SizeInPixels().iHeight/2 * Parameters.DZParameters.scaleY - aTargetBitmap->SizeInPixels().iHeight/2)) - { - Parameters.DZParameters.allShiftY = (TInt)((InBitmap->SizeInPixels().iHeight/2)*Parameters.DZParameters.scaleY - aTargetBitmap->SizeInPixels().iHeight/2); - } - - DigitalZoomPtr->SetParameters(&Parameters.DZParameters); - DigitalZoomPtr->ProcessL(InBitmap, aTargetBitmap); - } - - //IETD - if (Parameters.IetdON) - { - if (Parameters.FirstOpening) - { - IetdPtr->Analyze(*aTargetBitmap); - Parameters.FirstOpening = EFalse; - } - //Set parameters is needed if default values can change (read from file etc.) - //IetdPtr->SetParams(&Parameters.IETDParameters); - IetdPtr->ProcessL(*aTargetBitmap); - } - - //Sharpening - if (Parameters.SharpeningON) - { - //Set parameters is needed if default values can change (read from file etc.) - //SharpeningPtr->SetParameters(&Parameters.SharpeningParameters); - SharpeningPtr->ProcessL(aTargetBitmap); - } - - //ColorManagement - if (Parameters.ColorManagementON) - { - //Set parameters is needed if default values can change (read from file etc.) - //ColorManagementPtr->SetParameters(&Parameters.ColorManagementParameters); - ColorManagementPtr->ProcessL(aTargetBitmap); - } - - //Dithering - if (Parameters.DitheringON) - { - DitheringPtr->ProcessL(*aTargetBitmap); - } -} - - - - -/* ------------------------------------------------------------------------------ - - SetParams - - Set processing parameters - - Return Values: none - ------------------------------------------------------------------------------ -*/ -void CDisplayChain::SetParameters(DisplayChainParams* params) -{ - //Copy parameter struct - Parameters = *params; -} - - - -/* ------------------------------------------------------------------------------ - - GetParams - - Get current processing parameters - - Return Values: none - ------------------------------------------------------------------------------ -*/ -void CDisplayChain::GetParameters(DisplayChainParams* params) -{ - //Copy parameter struct - *params = Parameters; -} - - -/* ------------------------------------------------------------------------------ - - ReadFileL - - Example function for reading processing parameters from file - - Return Values: none - ------------------------------------------------------------------------------ -TBool CDisplayChain::ReadFileL() -{ - - FILE *fp; - TInt i,j,data; - TUint8 data_uchar; - TReal data_real; - - // Open for read (will fail if file does not exist) - if((fp = fopen("e:\\DisplayChain.txt","r"))==NULL ) - { - if((fp = fopen("c:\\DisplayChain.txt","r"))==NULL ) - { - //AfxMessageBox("CMData.txt was not opened"); - return EFalse; - } - } - - //Digital Zoom - fscanf(fp,"%d",&data); - Parameters.DigitalZoomON = data; - - //Ietd - fscanf(fp,"%d",&data); - Parameters.IetdON = data; - - fscanf(fp,"%d",&data_uchar); - Parameters.IETDParameters.aWhitePixels = data_uchar; - - fscanf(fp,"%d",&data_uchar); - Parameters.IETDParameters.aBlackPixels = data_uchar; - - fscanf(fp,"%d",&data_uchar); - Parameters.IETDParameters.aStretchLimit = data_uchar; - - fscanf(fp,"%d",&data_uchar); - Parameters.IETDParameters.aSaturationGain = data_uchar; - - fscanf(fp,"%d",&data_uchar); - Parameters.IETDParameters.aBitLimit = data_uchar; - - fscanf(fp,"%d",&data_uchar); - Parameters.IETDParameters.aWBC = data_uchar; - - fscanf(fp,"%d",&data_uchar); - Parameters.IETDParameters.aDBC = data_uchar; - - //Sharpening - fscanf(fp,"%d",&data); - Parameters.SharpeningON = data; - - fscanf(fp,"%d",&data); - Parameters.SharpeningParameters.SHARP_OVER = data; - - fscanf(fp,"%d",&data); - Parameters.SharpeningParameters.SHARP_DZONE = data; - - //fscanf(fp,"%f",&data_real); - fscanf(fp,"%d",&data); - data_real = ((TReal)data)/65536; - Parameters.SharpeningParameters.SHARP_GAIN = data_real; - - //Dithering - fscanf(fp,"%d",&data); - Parameters.DitheringON = data; - - //ColorManagement - fscanf(fp,"%d",&data); - Parameters.ColorManagementON = data; - - for(i=0;i<256;i++) - { - fscanf(fp,"%d",&data); - Parameters.ColorManagementParameters.GammaR[i]=data; - } - - for(i=0;i<256;i++) - { - fscanf(fp,"%d",&data); - Parameters.ColorManagementParameters.GammaG[i]=data; - } - - for(i=0;i<256;i++) - { - fscanf(fp,"%d",&data); - Parameters.ColorManagementParameters.GammaB[i]=data; - } - - for(i=0;i<256;i++) - { - fscanf(fp,"%d",&data); - Parameters.ColorManagementParameters.TRCR[i]=data; - } - - for(i=0;i<256;i++) - { - fscanf(fp,"%d",&data); - Parameters.ColorManagementParameters.TRCG[i]=data; - } - - for(i=0;i<256;i++) - { - fscanf(fp,"%d",&data); - Parameters.ColorManagementParameters.TRCB[i]=data; - } - - - for(i=0;i<3;i++) - { - for(j=0;j<3;j++) - { - fscanf(fp,"%d",&data); - Parameters.ColorManagementParameters.Matrix [3*i+j]=data; - } - } - - - // Close stream - fclose(fp); - - return ETrue; -} -*/ -//----IMAAMI----