diff -r 000000000000 -r 40261b775718 imagingandcamerafws/imagingfws/inc/icl/ImageCodec.h --- /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 +#include + +#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#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__