diff -r 000000000000 -r 5752a19fdefe imaging/imagingfws/src/imageframebody.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imaging/imagingfws/src/imageframebody.cpp Wed Aug 25 12:29:52 2010 +0300 @@ -0,0 +1,443 @@ +// Copyright (c) 2005-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 "imageframebody.h" +#include "ImageClientMain.h" + +/** +Destructor for CImageFrame::CBody class. +*/ +CImageFrame::CBody::~CBody() + { + delete iFormat; + delete iLayout; + } + +/** +Returns the format of the CImageFrame::CBody. + +@return A const reference to the TFrameFormatBase object which describes the CImageFrame::CBody object format. +*/ +const TFrameFormatBase& CImageFrame::CBody::FrameFormat() const + { + return *iFormat; + } + +/** +Set the format of the CImageFrame::CBody. + +@param aFormat + A const reference to TFrameFormatBase object used to set CImageFrame::CBody format. +*/ +void CImageFrame::CBody::SetFrameFormatL(const TFrameFormatBase& aFormat) + { + if (iFormat!=NULL) + { + delete iFormat; + iFormat = NULL; + } + iFormat = static_cast(aFormat.DuplicateL()); + } + +/** +Returns the layout of the CImageFrame::CBody associated image data. + +@return A const reference to TFrameLayoutBase which describes CImageFrame::CBody object particular layout. +*/ +const TFrameLayoutBase& CImageFrame::CBody::FrameLayout() const + { + return *iLayout; + } + +/** +Set the layout of the CImageFrame::CBody associated image data. + +@param aFrameLayout + A const reference to TFrameLayoutBase object used to set CImageFrame::CBody layout. + +@leave KErrNoMemory. +*/ +void CImageFrame::CBody::SetFrameLayoutL(const TFrameLayoutBase& aFrameLayout) + { + if (iLayout!=NULL) + { + delete iLayout; + iLayout = NULL; + } + iLayout = static_cast(aFrameLayout.DuplicateL()); + } + +/** +Returns the size in pixels of the image the CImageFrame::CBody refers to. + +@return image size in pixels. +*/ +const TSize& CImageFrame::CBody::FrameSizeInPixels() const + { + return iFrameSize; + } + +/** +Set the size in pixels of the image CImageFrame::CBody refers to. + +@param aFrameSize + A const reference to TSize used to set CImageFrame::CBody format. +*/ +void CImageFrame::CBody::SetFrameSizeInPixels(const TSize& aFrameSize) + { + iFrameSize = aFrameSize; + } + +/** +Provides a writable TDes8 reference to the data buffer. +Suitable both for reading and writing. + +@return writable TDes8 reference. +*/ +TDes8& CImageFrame::CBody::Data() + { + return iBufferPtr; + } + +/** +Provides a TDesC8 reference to the data buffer. +Suitable for reading of the data only. + +@return const TDesC8 reference. +*/ +const TDesC8& CImageFrame::CBody::Data() const + { + return iBufferPtr; + } + +/** +Provides a RChunk reference. It will panic if the frame does not contain a chunk. + +@return RChunk reference. +*/ +RChunk& CImageFrame::CBody::DataChunk() + { + __ASSERT_ALWAYS((iDataChunk!=NULL), Panic(EInvalidValue)); + return *iDataChunk; + } + +/** +Returns the offset of the CImageFrame::CBody specific data within the buffer object. + +@return data offset from CimageFrame buffer start. +*/ +TInt CImageFrame::CBody::DataOffset() const + { + return iDataOffset; + } + +/** +Returns whether the specific CImageFrame object contains a Chunk or not. + +@return ETrue if the buffer is a chuk and EFalse of not. +*/ +TBool CImageFrame::CBody::IsChunk() const + { + return iIsChunk; + } + +/** +Returns the maximum buffer size as specified by the constructing entity. + +@return the maximum buffer size. +*/ +TInt CImageFrame::CBody::MaxBufferSize() const + { + return iMaxBufferSize; + } + +/** +Static factory function used to create a CImageFrame::CBody object. + +@param aHandle + a reference to the owning CImageFrame object. + +@param aBuffer + a reference to the TDesc8 object the CImageFrame::CBody wraps around + +@param aMaxBufferSize + the maximum buffer size. + +@return a pointer to a valid CImageFrame::CBody object. + +@leave KErrArgument +@leave KErrNoMemory or other system wide error codes. +*/ +CImageFrame::CBody* CImageFrame::CBody::NewL(CImageFrame& aHandle, + const TDes8& aBuffer, + TInt aMaxBufferSize) + { + CImageFrame::CBody* self = new(ELeave) CImageFrame::CBody(aHandle, aBuffer); + CleanupStack::PushL(self); + self->SetMaxSizeL(aMaxBufferSize); + self->SetDefaultFormatL(); + CleanupStack::Pop(); + return self; + } + +/** +Static factory function used to create a CImageFrame::CBody object. + +@param aHandle + a reference to the owning CImageFrame object. + +@param aBuffer + a reference to the TDesc8 object the CImageFrame::CBody wraps around. + +@param aMaxBufferSize + the maximum buffer size. + +@param aFrameSize + a reference to the TSize object to initialise the CImageFrame::CBody object. + +@param aFrameFormat + a reference to the TFrameFormatBase to initialise the CImageFrame::CBody object. + +@param aFrameLayout + a reference to the TFrameLayoutBase to initialise the CImageFrame::CBody object. + +@return a pointer to a valid CImageFrame::CBody object. + +@leave KErrArgument +@leave KErrNoMemory or other system wide error code. +*/ +CImageFrame::CBody* CImageFrame::CBody::NewL(CImageFrame& aHandle, + const TDes8& aBuffer, TInt aMaxBufferSize, + const TSize& aFrameSize, + const TFrameFormatBase& aFrameFormat, + const TFrameLayoutBase& aFrameLayout) + { + CImageFrame::CBody* self = new(ELeave) CImageFrame::CBody(aHandle, aBuffer); + CleanupStack::PushL(self); + self->SetMaxSizeL(aMaxBufferSize); + self->StoreAddParamL(aFrameSize, aFrameFormat, aFrameLayout); + CleanupStack::Pop(); + return self; + } + +/** +Static factory function used to create a CImageFrameRChunk object. + +@param aHandle + a reference to the owning CImageFrame object. + +@param aBuffer + a reference to the RChunk object the CImageFrameRChunk wraps around. + +@param aMaxBufferSize + the maximum buffer size. + +@param aDataOffset + The offset at which the data for this frame starts. + +@return a pointer to a valid CImageFrame::CBody object. + +@leave KErrArgument +@leave KErrNoMemory or other system wide error code. +*/ +CImageFrame::CBody* CImageFrame::CBody::NewL(CImageFrame& aHandle, + const RChunk* aBuffer, + TInt aMaxBufferSize, + TInt aDataOffset) + { + CImageFrame::CBody* self = new(ELeave) CImageFrame::CBody(aHandle); + CleanupStack::PushL(self); + self->StoreChunkL(aBuffer, aMaxBufferSize, aDataOffset); + self->SetDefaultFormatL(); + CleanupStack::Pop(); + return self; + } + +/** +Static factory function used to create a CImageFrameRChunk object. + +@param aHandle + a reference to the owning CImageFrame object. + +@param aBuffer + a reference to the RChunk object the CImageFrameRChunk wraps around. + +@param aMaxBufferSize + the maximum buffer size. + +@param aDataOffset + The offset at which the data for this frame starts. + +@param aFrameSize + a reference to the TSize object to initialise the CImageFrameRChunk object. + +@param aFrameFormat + a reference to the TFrameFormatBase to initialise the CImageFrameRChunk object. + +@param aFrameLayout + a reference to the TFrameLayoutBase to initialise the CImageFrameRChunk object. + +@return a pointer to a valid CImageFrame::CBody object. + +@leave KErrArgument +@leave KErrNoMemory or other system wide error code. +*/ +CImageFrame::CBody* CImageFrame::CBody::NewL(CImageFrame& aHandle,const RChunk* aBuffer, + TInt aMaxBufferSize, + TInt aDataOffset, + const TSize& aFrameSize, + const TFrameFormatBase& aFrameFormat, + const TFrameLayoutBase& aFrameLayout) + { + CImageFrame::CBody* self = new(ELeave) CImageFrame::CBody(aHandle); + CleanupStack::PushL(self); + self->StoreChunkL(aBuffer, aMaxBufferSize, aDataOffset); + self->StoreAddParamL(aFrameSize, aFrameFormat, aFrameLayout); + CleanupStack::Pop(); + return self; + } + +/** +CImageFrame::CBody constructor. + +@param aHandle + a reference to the owning CImageFrame object. +*/ +CImageFrame::CBody::CBody(CImageFrame& aHandle) : + iHandle(aHandle), + iBufferPtr(0,0), + iIsChunk(ETrue) + { + } + +/** +CImageFrame::CBody constructor. + +@param aHandle + a reference to the owning CImageFrame object. + +@param aBuffer + a reference to the TDes8 object the CImageFrame::Body object contains. +*/ +CImageFrame::CBody::CBody(CImageFrame& aHandle, const TDes8& aBuffer) : + iHandle(aHandle), + iBufferPtr((TUint8*)(aBuffer.Ptr()), aBuffer.Size(), aBuffer.MaxLength()), + iIsChunk(EFalse) + + { + } + +/** +Stores the maximum size of the buffer + +@param aMaxBufferSize + buffer maximum size. + +@leave KErrArgument. +*/ +void CImageFrame::CBody::SetMaxSizeL(TInt aMaxBufferSize) + { + if (aMaxBufferSize <= 0) + { + User::Leave(KErrArgument); + } + iMaxBufferSize = aMaxBufferSize; + } + +/** +Function used to store the chunk relevant information. + +@param aBuffer + a pointer to a valid RChunk object. + +@param aMaxBufferSize + buffer maximum size. + +@param aDataOffset + The offset of the data in the CImageFrame::CBody object from the start of the chunk. + +@leave KErrArgument +*/ +void CImageFrame::CBody::StoreChunkL(const RChunk* aBuffer, TInt aMaxBufferSize, TInt aDataOffset) + { + if (aBuffer == NULL) + { + User::Leave(KErrArgument); + } + + if (aDataOffset < 0) + { + User::Leave(KErrArgument); + } + + SetMaxSizeL(aMaxBufferSize); + iDataOffset = aDataOffset; + iDataChunk = (RChunk*)aBuffer; + iBufferPtr.Set((iDataChunk->Base() + iDataOffset), iDataChunk->Size(), iDataChunk->MaxSize()); + } + +/** +Initialise CImageFrame::CBody object. + +@param aSize + a reference to a TSize object containing image size in pixels. + +@param aFormat + a reference to a TFrameFormatBase object containing image format information. + +@param aLayout + a reference to FrameLayoutBase object containing image layout information. + +@leave KErrNoMemory +*/ +void CImageFrame::CBody::StoreAddParamL( const TSize& aSize, + const TFrameFormatBase& aFormat, + const TFrameLayoutBase& aLayout) + { + iFrameSize = aSize; + if (iFormat!=NULL) + { + delete iFormat; + iFormat = NULL; + } + iFormat = (TFrameFormatBase*)aFormat.DuplicateL(); + + if (iLayout!=NULL) + { + delete iLayout; + iLayout = NULL; + } + iLayout = (TFrameLayoutBase*)aLayout.DuplicateL(); + } + +/** +Sets default Frame Format and Frame Layout for this version of Image Frame + +@leave KErrNoMemory +*/ +void CImageFrame::CBody::SetDefaultFormatL() + { + iFormat = new (ELeave) TFrameFormat(KNullUid); + iLayout = new (ELeave) TFrameLayout(0); + } + +/* +Used for padding the BWINS def file. +*/ +#ifdef __WINS__ +EXPORT_C void Reserved1() + { + } +#endif // __WINS__