imagingandcamerafws/imagingfws/inc/icl/ImageCodec.h
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imagingandcamerafws/imagingfws/inc/icl/ImageCodec.h	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,392 @@
+// Copyright (c) 2002-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:
+//
+
+#ifndef __IMAGECODEC_H__
+#define __IMAGECODEC_H__
+
+#include <e32std.h>
+#include <fbs.h>
+
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <icl/imagecodecdef.h>
+#endif
+
+// Pre-definitions needed to make sure everything always defined in the right order
+class TFrameInfo;
+class TImageDataBlock;
+class CFrameImageData;
+
+class CImageDecoder;
+class CImageEncoder;
+class CImageProcessor; 
+class CImageProcessorReadCodecBody;
+class CImageMaskProcessorReadCodecBody;
+
+/**
+@publishedAll
+@released
+
+Indicates what processing has so far been completed on the frame.
+*/
+enum TFrameState
+	{
+	/** Processing incomplete.
+	*/
+	EFrameIncomplete,
+	/** Processing complete.
+	*/
+	EFrameComplete,
+	/** Unexpected end of frame data.
+	*/
+	EUnexpectedEndOfData,
+	/** Same as EFrameIncomplete but also requests a call to CImageReadCodec::GetNewDataPosition().
+	*/
+	EFrameIncompleteRepositionRequest,
+	/** Processing of streaming block is complete.
+	*/
+	EBlockComplete
+	};
+
+/**
+@publishedAll
+@released
+
+Utility class to allow forward iteration through the data contained in
+an 8 bit descriptor.
+
+@see TPtr8
+@see TPtrC8
+@see TDes8
+@see TDesC8
+*/
+class TBufPtr8 : public TPtr8
+	{
+public:
+	/**
+	Default constructor.
+	*/
+	TBufPtr8()
+		: TPtr8(0, 0, 0) {};
+	inline void Set(const TDes8& aDes);
+	inline void SetLengthOnly(const TDes8& aDes);
+	inline void Set(const TPtrC8& aDes);
+	inline void Shift(TInt aOffset);
+	};
+
+/**
+Produces a shallow copy of the argument descriptor.
+
+@param  aDes
+        A reference to the descriptor containing the relevant data.
+*/
+inline void TBufPtr8::Set(const TDes8& aDes)
+	{
+	TPtr8::Set(CONST_CAST(TUint8*,aDes.Ptr()), aDes.Length(), aDes.MaxLength());
+	}
+
+/**
+Produces a shallow copy of the argument descriptor, but also restricts
+pointer access to the current actual size of the argument descriptor.
+
+@param  aDes
+        A reference to the descriptor containing the relevant data.
+*/
+inline void TBufPtr8::SetLengthOnly(const TDes8& aDes)
+	{
+	TPtr8::Set(CONST_CAST(TUint8*,aDes.Ptr()), aDes.Length(), aDes.Length());
+	}
+/**
+Produces a shallow copy of the argument descriptor, but restricts
+pointer access to the size of the const argument descriptor.
+
+@param  aDes
+        A reference to the descriptor containing the relevant data.
+*/
+inline void TBufPtr8::Set(const TPtrC8& aDes)
+	{
+	TPtr8::Set(CONST_CAST(TUint8*,aDes.Ptr()), aDes.Length(), aDes.Length());
+	}
+/**
+Seeks the current data pointer aOffset bytes from the current position.
+
+@param  aOffset
+        The number of bytes by which to seek.
+*/
+inline void TBufPtr8::Shift(TInt aOffset)
+	{
+	SetLength(Length() - aOffset); iMaxLength -= aOffset; iPtr += aOffset;
+	}
+
+/**
+@publishedAll
+@released
+
+Provides read related processing functions for bitmaps.
+
+Note: For use by plugin writers only.
+*/
+class CImageReadCodec : public CBase
+	{
+public:
+	IMPORT_C ~CImageReadCodec();
+
+	/**
+	Performs initial processing of image data and mask bitmaps.
+
+	This function processes the image frame using data supplied in
+	aFrameInfo, aFrameImageData and using the flag aDisableErrorDiffusion. Not all codecs
+	are expected to make use of all fields.
+
+	This is a virtual function that each derived class must implement.
+
+	@param	aFrameInfo
+	        A reference to a TFrameInfo object.
+	@param	aFrameImageData
+	        A reference to a CFrameImageData object.
+	@param	aDisableErrorDiffusion
+	        A flag indicating whether error diffusion should be disabled.
+	@param	aDestination
+	        The destination bitmap.
+	@param	aDestinationMask
+	        The destination mask bitmap.
+	*/
+	virtual void InitFrameL(TFrameInfo& aFrameInfo, CFrameImageData& aFrameImageData, TBool aDisableErrorDiffusion, CFbsBitmap& aDestination, CFbsBitmap* aDestinationMask) = 0;
+
+	IMPORT_C virtual void InitFrameHeader(TFrameInfo& aFrameInfo, CFrameImageData& aFrameData);
+	IMPORT_C virtual TFrameState ProcessFrameHeaderL(TBufPtr8& aData);
+	IMPORT_C virtual void Complete(); // Called on frame completion and on underflow
+	IMPORT_C virtual void GetNewDataPosition(TInt& aPosition, TInt& aLength); // Returns a new position for the data stream, (also length of data required)
+
+	/**
+	Processes the frame data contained in aSrc.
+
+	This is a pure virtual function that each derived class must implement.
+
+	@param  aSrc
+	        A reference to the buffer containing the frame data.
+
+	@return	The current frame state after processing.
+	*/
+	virtual TFrameState ProcessFrameL(TBufPtr8& aSrc) = 0;
+	void SetCurrentFrame(TInt aFrameNumber);
+	
+	IMPORT_C virtual TInt ReductionFactor(const TSize& aOriginalSize, const TSize& aReducedSize) const;
+	IMPORT_C virtual TInt ReducedSize(const TSize& aOriginalSize,TInt aReductionFactor, TSize& aReducedSize) const;
+	
+protected:
+	IMPORT_C CImageReadCodec();
+	IMPORT_C void ConstructL();
+
+	IMPORT_C void ClearBitmapL(CFbsBitmap& aBitmap, TRgb aColor);
+	IMPORT_C TInt CurrentFrame() const;
+
+private:
+	// Future proofing
+	IMPORT_C virtual void ReservedVirtual1();
+	IMPORT_C virtual void ReservedVirtual2();
+	IMPORT_C virtual void ReservedVirtual3();
+	IMPORT_C virtual void ReservedVirtual4();
+
+private:
+	TInt iCurrentFrame; //make handle to body if additional properties are needed
+	};
+
+/**
+@publishedAll
+@released 
+
+Provides functions to determine or set features of the codec's CImageProcessor.
+
+Note: 
+For use by plugin writers only.
+*/
+class CImageProcessorReadCodec : public CImageReadCodec
+	{
+public:
+	IMPORT_C ~CImageProcessorReadCodec();
+protected:
+	IMPORT_C CImageProcessorReadCodec();
+	IMPORT_C void ConstructL();
+
+	IMPORT_C CImageProcessor* ImageProcessor() const;
+	IMPORT_C void SetImageProcessor(CImageProcessor* aImageProc);
+
+	IMPORT_C const TPoint& Pos() const;
+	IMPORT_C TPoint& Pos();
+	IMPORT_C void SetPos(const TPoint& aPos);
+private:
+	CImageProcessorReadCodecBody* iBody;
+	};
+
+/**
+@publishedAll
+@released
+
+Provides functions to determine or set features of the codec's CImageProcessor for a bitmap mask.
+
+Note: For use by plugin writers only.
+*/
+class CImageMaskProcessorReadCodec : public CImageProcessorReadCodec
+	{
+public:
+	IMPORT_C ~CImageMaskProcessorReadCodec();
+protected:
+	IMPORT_C CImageMaskProcessorReadCodec();
+	IMPORT_C void ConstructL();
+
+	IMPORT_C CImageProcessor* MaskProcessor() const;
+	IMPORT_C void SetMaskProcessor(CImageProcessor* aMaskProc);
+
+private:
+	CImageMaskProcessorReadCodecBody* iBody;
+	};
+
+
+/**
+@publishedAll
+@released
+
+Interface to be used by read codec implementations in conjunction with framework extension.
+*/
+class MReadCodecExtension
+	{
+public:
+	/**
+	Obtains the scaling coefficient 
+	@param 	aOriginalSize	A reference to the original size of an image.
+	@param 	aDesiredSize	A reference to the desired size of an image.
+	@return	The scaling coefficient, for example:
+			Original size = 1 or -1,
+			Half original size = -2,
+			Quarter original size = -3 etc.
+	*/
+	virtual TInt ScalingCoefficient(const TSize& aOriginalSize, const TSize& aDesiredSize) const = 0;
+	
+	/**
+	Obtains the reduced size of the decoded bitmap based on the input parameters
+	and updates aReducedSize with this value.
+
+	@param  aOriginalSize		A reference to the original size of an image.
+	@param  aScalingCoeff		The scaling coefficient to be applied.
+	@param  aReducedSize		A reference to the new size of an image.
+	@return KErrNone			If the function call was successful.
+	@return 					A range of system wide error values.
+	*/
+	virtual TInt GetReducedSize(const TSize& aOriginalSize, TInt aScalingCoeff, TSize& aReducedSize) const = 0;	
+	};
+
+/**
+@publishedAll
+@released
+
+Provides functions to determine or set features of the codec's CImageProcessor plus
+provide extra functionality for Framework Extensions.
+
+Note: 
+For use by plugin writers only.
+*/
+class CImageProcessorReadCodecExtension : public CImageProcessorReadCodec,
+										  public MReadCodecExtension											
+	{
+public:
+	IMPORT_C ~CImageProcessorReadCodecExtension();
+protected:
+	IMPORT_C CImageProcessorReadCodecExtension();
+	IMPORT_C void ConstructL();
+	
+	// From MReadCodecExtension
+	IMPORT_C TInt ScalingCoefficient(const TSize& aOriginalSize, const TSize& aDesiredSize) const;
+	IMPORT_C TInt GetReducedSize(const TSize& aOriginalSize, TInt aScalingCoeff, TSize& aReducedSize) const;
+	};
+
+/**
+@publishedAll
+@released
+
+
+Provides functions to determine or set features of the codec's CImageProcessor plus
+provide extra functionality for Framework Extensions.
+
+Note: 
+For use by plugin writers only.
+*/
+class CImageMaskProcessorReadCodecExtension : public CImageMaskProcessorReadCodec,
+										  	  public MReadCodecExtension											
+	{
+public:
+	IMPORT_C ~CImageMaskProcessorReadCodecExtension();
+protected:
+	IMPORT_C CImageMaskProcessorReadCodecExtension();
+	IMPORT_C void ConstructL();
+	
+	// From MReadCodecExtension
+	IMPORT_C TInt ScalingCoefficient(const TSize& aOriginalSize, const TSize& aDesiredSize) const;
+	IMPORT_C TInt GetReducedSize(const TSize& aOriginalSize, TInt aScalingCoeff, TSize& aReducedSize) const;
+
+	};
+
+/**
+@publishedAll
+@released
+
+Provides read related processing functions for bitmaps.
+
+Note:
+For use by plugin writers only.
+*/
+class CImageWriteCodec : public CBase
+	{
+public:
+	IMPORT_C ~CImageWriteCodec();
+	IMPORT_C virtual void InitFrameL(TBufPtr8& aDst, const CFbsBitmap& aSource);
+
+	/**
+	Processes the frame data contained in aDst.
+
+	The internally held buffer must have been previously set, either by InitFrameL() or by a 
+	SetSource().
+
+	This is a pure virtual function that each derived class must implement.
+
+	@param  aDst
+	        A reference to the buffer containing the frame data.
+
+	@return The current frame state after processing.
+	*/
+	virtual TFrameState ProcessFrameL(TBufPtr8& aDst) = 0;
+
+	IMPORT_C const CFbsBitmap* Source() const;
+	IMPORT_C void SetSource(const CFbsBitmap* aSource);
+protected:
+	IMPORT_C void ConstructL();
+	IMPORT_C CImageWriteCodec();
+private:
+	// Future proofing
+	IMPORT_C virtual void ReservedVirtual1();
+	IMPORT_C virtual void ReservedVirtual2();
+	IMPORT_C virtual void ReservedVirtual3();
+	IMPORT_C virtual void ReservedVirtual4();
+private:
+	const CFbsBitmap* iSource; // linked object
+	};
+
+/**
+@internalComponent
+
+Max size of strings in extra resource files
+*/
+const TInt KCodecResourceStringMax=128;
+
+#endif // __IMAGECODEC_H__