--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imagingandcamerafws/imagingfws/ImageProcessor/src/imageprocessoroverlay.cpp Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,446 @@
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "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:
+//
+// Description:
+//
+
+#include <imageprocessor/imageprocessoroverlayintf.h>
+#include <imageprocessor/imageprocessoroverlay.h>
+#include "imageprocessorimpl.h"
+#include <imageprocessor/imageprocessor.h>
+
+#include <imageframe.h>
+
+namespace ImageProcessor
+ {
+
+TOverlay::TOverlay(Plugin::MOverlay& aOverlayImpl, CImageProcessorImpl& aImageProcessorImpl)
+: iIsActive(EFalse),
+ iIsInputSet(EFalse),
+ iImageProcessorImpl(aImageProcessorImpl),
+ iOverlayImpl(aOverlayImpl),
+ iReserved(0)
+ {
+ }
+
+/**
+Gets the supported overlay image formats.
+
+@param aFormats
+ The supported formats of ImageProcessor of the overlay image.
+*/
+EXPORT_C void TOverlay::SupportedInputFormatsL(RArray<TUid>& aFormats) const
+ {
+ aFormats = iImageProcessorImpl.OverlayInputFormatsL();
+ }
+
+/**
+Gets the supported overlay image sub formats.
+
+@param aFormat
+ The supported format of ImageProcessor of the overlay image.
+
+@param aSubFormats
+ The supported sub formats of ImageProcessor of the overlay image.
+*/
+EXPORT_C void TOverlay::SupportedInputSubFormatsL(TUid aFormat, RArray<TUid>& aSubFormats) const
+ {
+ iOverlayImpl.SupportedInputSubFormatsL(aFormat, aSubFormats);
+ }
+
+/**
+Gets the supported overlay image frame formats.
+
+@param aFormats
+ The supported formats of overlay image of ImageProcessor.
+*/
+EXPORT_C void TOverlay::SupportedInputImageFrameFormatsL(RArray<TUid>& aFormats) const
+ {
+ aFormats = iImageProcessorImpl.OverlayInputImageFrameFormatsL();
+ }
+
+/**
+Gets the supported overlay image display modes.
+
+@param aDisplayModes
+ The supported display modes of overlay image of ImageProcessor.
+*/
+EXPORT_C void TOverlay::SupportedInputDisplayModesL(RArray<TDisplayMode>& aDisplayModes) const
+ {
+ aDisplayModes = iImageProcessorImpl.OverlayInputDisplayModesL();
+ }
+
+/**
+Specifies the file name and format of the overlay image. The input must be set only once and
+after the BeginL() is done. So, the SetInputL() must be called only once between BeginL()
+and EndL().
+
+@param aFilename
+ The file name of the overlay image.
+@param aFormat
+ The format of the overlay image.
+@param aSubFormat
+ The sub format of the overlay image. Currently is not supported, shoud set to KNullUid.
+
+@leave KErrNotReady
+ BeginL() hasn't been called to create overlay.
+
+@leave KErrNotSupported
+ The aSubFormat is not NULL.
+
+@leave KErrArgument
+ The file name length is longer than KMaxFileName.
+
+@leave Other
+ A range of system wide error codes.
+*/
+EXPORT_C void TOverlay::SetInputL(const TDesC& aFilename, const TUid& aFormat, const TUid& aSubFormat)
+ {
+ iOverlayImpl.SetInputL(aFilename, aFormat, aSubFormat);
+ iImageProcessorImpl.ResetOverlayDrmInput();
+ iIsInputSet = ETrue;
+ }
+
+/**
+Specifies the file pointer and format of the overlay image. The input must be set only once and
+after the BeginL() is done. So, the SetInputL() must be called only once between BeginL()
+and EndL().
+
+@param aFile
+ The pointer to the file of the overlay image.
+@param aFormat
+ The format of the overlay image.
+@param aSubFormat
+ The sub format of the overlay image. Currently is not supported, shoud set to KNullUid.
+
+@leave KErrNotSupported
+ Always. Current this function is not supported.
+*/
+EXPORT_C void TOverlay::SetInputL(RFile& aFile, const TUid& aFormat, const TUid& aSubFormat)
+ {
+ iOverlayImpl.SetInputL(aFile, aFormat, aSubFormat);
+ iImageProcessorImpl.ResetOverlayDrmInput();
+ iIsInputSet = ETrue;
+ }
+
+/**
+Specifies the file pointer and format of the overlay image which is a DRM protected content source.
+The input must be set only once and after the BeginL() is done. So, the SetInputL() must be called
+only once between BeginL() and EndL().
+
+@param aDrmFile
+ The pointer to the DRM file of the overlay image.
+@param aFormat
+ The format of the overlay image.
+@param aSubFormat
+ The sub format of the overlay image. Currently is not supported, shoud set to KNullUid.
+
+@leave KErrNotSupported
+ Always. Current this function is not supported.
+*/
+EXPORT_C void TOverlay::SetInputL(TMMSource& aDrmFile, const TUid& aFormat, const TUid& aSubFormat)
+ {
+ CImageProcessorDrmInput* drmInput = CImageProcessorDrmInput::NewL(aDrmFile);
+
+ CleanupStack::PushL(drmInput);
+ iOverlayImpl.SetInputL(*(drmInput->Buffer()), aFormat, aSubFormat);
+ CleanupStack::Pop(drmInput);
+
+ iImageProcessorImpl.ResetOverlayDrmInput();
+ iImageProcessorImpl.SetOverlayDrmInput(drmInput);
+ iIsInputSet = ETrue;
+ }
+
+/**
+Specifies the buffer pointer and format of the overlay image. The input must be set only once and
+after the BeginL() is done. So, the SetInputL() must be called only once between BeginL()
+and EndL().
+
+@param aBuffer
+ The pointer to the buffer of the overlay image.
+@param aFormat
+ The format of the overlay image.
+@param aSubFormat
+ The sub format of the overlay image. Currently is not supported, shoud set to KNullUid.
+
+@leave KErrNotReady
+ BeginL() hasn't been called to create the overlay.
+
+@leave KErrNotSupported
+ The aSubFormat is not NULL.
+
+@leave Other
+ A range of system wide error codes.
+*/
+EXPORT_C void TOverlay::SetInputL(const TDesC8& aBuffer, const TUid& aFormat, const TUid& aSubFormat)
+ {
+ if (aBuffer.Size() == 0)
+ {
+ User::Leave(KErrArgument);
+ }
+
+ iOverlayImpl.SetInputL(aBuffer, aFormat, aSubFormat);
+ iImageProcessorImpl.ResetOverlayDrmInput();
+ iIsInputSet = ETrue;
+ }
+
+/**
+Specifies the bitmap and mask of the overlay image.
+Source bitmap must not be deleted or changed during lifetime of TOverlay instance.
+The input must be set only once and after the BeginL() is done. So, the SetInputL() must be called
+only once between BeginL() and EndL().
+
+@param aBitmap
+ The pointer to the bitmap of the overlay image.
+@param aMask
+ The mask of the overlay image. Currently not supported, mush be NULL.
+
+@leave KErrNotReady
+ BeginL() hasn't been called to create the overlay.
+
+@leave KErrNotSupported
+ The aMask is not NULL.
+
+@leave Other
+ A range of system wide error codes.
+*/
+EXPORT_C void TOverlay::SetInputL(const CFbsBitmap& aBitmap, const CFbsBitmap* aMask)
+ {
+ if (aBitmap.SizeInPixels() == TSize(0,0))
+ {
+ User::Leave(KErrArgument);
+ }
+
+ if(aBitmap.Handle()!=0 && aBitmap.ExtendedBitmapType()!=KNullUid)
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+ if(aMask!=NULL && aMask->Handle()!=0 && aMask->ExtendedBitmapType()!=KNullUid)
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+ if ((aMask != NULL) && (aMask->SizeInPixels() == TSize(0,0)))
+ {
+ User::Leave(KErrArgument);
+ }
+
+ iOverlayImpl.SetInputL(aBitmap, aMask);
+ iImageProcessorImpl.ResetOverlayDrmInput();
+ iIsInputSet = ETrue;
+ }
+
+/**
+Specifies the binary image data of the overlay image.
+Source image frame buffer must not be deleted or changed during lifetime of TOverlay instance.
+The input must be set only once and after the BeginL() is done. So, the SetInputL() must be called
+only once between BeginL() and EndL().
+
+@param aPixelBuffer
+ The CImageFrame type pointer of the overlay image.
+
+@leave KErrNotReady
+ BeginL() hasn't been called to create the overlay.
+
+@leave Other
+ A range of system wide error codes.
+*/
+EXPORT_C void TOverlay::SetInputL(const CImageFrame& aPixelBuffer)
+ {
+ if (aPixelBuffer.FrameSizeInPixels() == TSize(0,0))
+ {
+ User::Leave(KErrArgument);
+ }
+
+ iOverlayImpl.SetInputL(aPixelBuffer);
+ iImageProcessorImpl.ResetOverlayDrmInput();
+ iIsInputSet = ETrue;
+ }
+
+/**
+First step of the three stages overlay BeginL()/SetL()/EndL().
+The state of the ImageProcessor is set to EEffectActive.
+
+@leave KErrNotReady
+ The state of the ImageProcessor is not EInitialized or overlay is already begun.
+
+@leave Other
+ A range of system wide error codes.
+*/
+EXPORT_C void TOverlay::BeginL()
+ {
+ __ASSERT_ALWAYS(((iImageProcessorImpl.State() == CImgProcessor::EInitialized) && !iIsActive), User::Leave(KErrNotReady));
+ iOverlayImpl.BeginL();
+ iImageProcessorImpl.SetStateL(CImgProcessor::EEffectActive);
+ iIsActive = ETrue;
+ }
+
+/**
+Second step of the three stages overlay BeginL()/SetL()/EndL().
+Specifies the size, geometric centre position and angle of the overlay image.
+
+@param aSize
+ The size of the overlay image.
+@param aPosition
+ The position of the overlay image geometric centre.
+@param aAngle
+ The angle of the overlay image.
+@leave KErrNotReady
+ BeginL() hasn't been called to create the overlay.
+@leave KErrArgument
+ Width or height of aSize is less than 0.
+@leave KErrArgument
+ aSize does not preserve aspect ratio and the plugin implementation
+ supports scaling with aspect ratio preserved only.
+@leave Other
+ A range of system wide error codes.
+*/
+EXPORT_C void TOverlay::SetL(const TSize &aSize, const TPoint &aPosition, TReal32 aAngle)
+ {
+ __ASSERT_ALWAYS(iIsActive, User::Leave(KErrNotReady));
+ __ASSERT_ALWAYS(((aSize.iWidth > 0) && (aSize.iHeight > 0)), User::Leave(KErrArgument));
+ iOverlayImpl.SetL(aSize, aPosition, aAngle);
+ }
+
+/**
+Second step of the three stages overlay BeginL()/SetL()/EndL().
+Specifies the scale, geometric centre position and angle of the overlay image.
+
+@param aScaleX
+ The scale of the overlay image width.
+@param aScaleY
+ The scale of the overlay image height.
+@param aPosition
+ The position of the overlay image geometric centre.
+@param aAngle
+ The angle of the overlay image.
+@leave KErrArgument
+ Scale is less than 0 or equal to 0
+@leave KErrArgument
+ aScaleX and aScaleY are not equal and the plugin implementation supports scaling with
+ aspect ratio preserved only.
+@leave KErrNotReady
+ BeginL() hasn't been called to create the overlay.
+@leave Other
+ A range of system wide error codes.
+*/
+EXPORT_C void TOverlay::SetL(TReal32 aScaleX, TReal32 aScaleY, const TPoint &aPosition, TReal32 aAngle)
+ {
+ __ASSERT_ALWAYS(iIsActive, User::Leave(KErrNotReady));
+ __ASSERT_ALWAYS(((aScaleX > 0) && (aScaleY > 0)), User::Leave(KErrArgument));
+ iOverlayImpl.SetL(aScaleX, aScaleY, aPosition, aAngle);
+ }
+
+/**
+Last step of the three stages overlay BeginL()/SetL()/EndL().
+The state of the ImageProcessor is set to EInitialized.
+
+@leave KErrNotReady
+ BeginL() hasn't been called to create the overlay.
+
+@leave Other
+ A range of system wide error codes.
+*/
+EXPORT_C void TOverlay::EndL()
+ {
+ __ASSERT_ALWAYS(((iImageProcessorImpl.State() == CImgProcessor::EEffectActive) &&
+ (iIsActive) &&
+ (iIsInputSet) &&
+ (iImageProcessorImpl.IsInputSet())), User::Leave(KErrNotReady));
+
+
+ iOverlayImpl.EndL();
+ iImageProcessorImpl.SetStateL(CImgProcessor::EInitialized);
+ iIsActive = EFalse;
+ iIsInputSet = EFalse;
+ iImageProcessorImpl.AppendOverlayDrmInputL();
+ }
+
+/**
+Resets the overlay parameters and state.
+
+@leave Other
+ A range of system wide error codes.
+*/
+EXPORT_C void TOverlay::ResetL()
+ {
+ if (iIsActive)
+ {
+ EndL();
+ iImageProcessorImpl.UndoL();
+ }
+
+ iImageProcessorImpl.ResetOverlayDrmInput();
+ iIsInputSet = EFalse;
+
+ iOverlayImpl.ResetL();
+ }
+
+/**
+Gets the geometric centre position of the overlay image.
+
+@return The position of the overlay image geometric centre.
+
+@leave Other
+ A range of system wide error codes.
+*/
+EXPORT_C TPoint TOverlay::PositionL() const
+ {
+ return iOverlayImpl.PositionL();
+ }
+
+/**
+Gets the size of the overlay image.
+
+@return The size of the overlay image.
+
+@leave Other
+ A range of system wide error codes.
+*/
+EXPORT_C TSize TOverlay::SizeL() const
+ {
+ return iOverlayImpl.SizeL();
+ }
+
+/**
+Gets the angle of the overlay image.
+
+@return The angle of the overlay image.
+
+@leave Other
+ A range of system wide error codes.
+*/
+EXPORT_C TReal32 TOverlay::AngleL() const
+ {
+ return iOverlayImpl.AngleL();
+ }
+
+/**
+Gets the scale of the overlay image.
+
+@param aScaleX
+ The scale of the overlay image width.
+@param aScaleY
+ The scale of the overlay image height.
+
+@leave Other
+ A range of system wide error codes.
+*/
+EXPORT_C void TOverlay::GetScaleL(TReal32& aScaleX, TReal32& aScaleY) const
+ {
+ iOverlayImpl.GetScaleL(aScaleX, aScaleY);
+ }
+
+ }//namespace ImageProcessor
+
+//EOF