imagingandcamerafws/imagingfws/inc/icl/ImageCodec.h
changeset 0 40261b775718
equal deleted inserted replaced
-1:000000000000 0:40261b775718
       
     1 // Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 #ifndef __IMAGECODEC_H__
       
    17 #define __IMAGECODEC_H__
       
    18 
       
    19 #include <e32std.h>
       
    20 #include <fbs.h>
       
    21 
       
    22 #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
       
    23 #include <icl/imagecodecdef.h>
       
    24 #endif
       
    25 
       
    26 // Pre-definitions needed to make sure everything always defined in the right order
       
    27 class TFrameInfo;
       
    28 class TImageDataBlock;
       
    29 class CFrameImageData;
       
    30 
       
    31 class CImageDecoder;
       
    32 class CImageEncoder;
       
    33 class CImageProcessor; 
       
    34 class CImageProcessorReadCodecBody;
       
    35 class CImageMaskProcessorReadCodecBody;
       
    36 
       
    37 /**
       
    38 @publishedAll
       
    39 @released
       
    40 
       
    41 Indicates what processing has so far been completed on the frame.
       
    42 */
       
    43 enum TFrameState
       
    44 	{
       
    45 	/** Processing incomplete.
       
    46 	*/
       
    47 	EFrameIncomplete,
       
    48 	/** Processing complete.
       
    49 	*/
       
    50 	EFrameComplete,
       
    51 	/** Unexpected end of frame data.
       
    52 	*/
       
    53 	EUnexpectedEndOfData,
       
    54 	/** Same as EFrameIncomplete but also requests a call to CImageReadCodec::GetNewDataPosition().
       
    55 	*/
       
    56 	EFrameIncompleteRepositionRequest,
       
    57 	/** Processing of streaming block is complete.
       
    58 	*/
       
    59 	EBlockComplete
       
    60 	};
       
    61 
       
    62 /**
       
    63 @publishedAll
       
    64 @released
       
    65 
       
    66 Utility class to allow forward iteration through the data contained in
       
    67 an 8 bit descriptor.
       
    68 
       
    69 @see TPtr8
       
    70 @see TPtrC8
       
    71 @see TDes8
       
    72 @see TDesC8
       
    73 */
       
    74 class TBufPtr8 : public TPtr8
       
    75 	{
       
    76 public:
       
    77 	/**
       
    78 	Default constructor.
       
    79 	*/
       
    80 	TBufPtr8()
       
    81 		: TPtr8(0, 0, 0) {};
       
    82 	inline void Set(const TDes8& aDes);
       
    83 	inline void SetLengthOnly(const TDes8& aDes);
       
    84 	inline void Set(const TPtrC8& aDes);
       
    85 	inline void Shift(TInt aOffset);
       
    86 	};
       
    87 
       
    88 /**
       
    89 Produces a shallow copy of the argument descriptor.
       
    90 
       
    91 @param  aDes
       
    92         A reference to the descriptor containing the relevant data.
       
    93 */
       
    94 inline void TBufPtr8::Set(const TDes8& aDes)
       
    95 	{
       
    96 	TPtr8::Set(CONST_CAST(TUint8*,aDes.Ptr()), aDes.Length(), aDes.MaxLength());
       
    97 	}
       
    98 
       
    99 /**
       
   100 Produces a shallow copy of the argument descriptor, but also restricts
       
   101 pointer access to the current actual size of the argument descriptor.
       
   102 
       
   103 @param  aDes
       
   104         A reference to the descriptor containing the relevant data.
       
   105 */
       
   106 inline void TBufPtr8::SetLengthOnly(const TDes8& aDes)
       
   107 	{
       
   108 	TPtr8::Set(CONST_CAST(TUint8*,aDes.Ptr()), aDes.Length(), aDes.Length());
       
   109 	}
       
   110 /**
       
   111 Produces a shallow copy of the argument descriptor, but restricts
       
   112 pointer access to the size of the const argument descriptor.
       
   113 
       
   114 @param  aDes
       
   115         A reference to the descriptor containing the relevant data.
       
   116 */
       
   117 inline void TBufPtr8::Set(const TPtrC8& aDes)
       
   118 	{
       
   119 	TPtr8::Set(CONST_CAST(TUint8*,aDes.Ptr()), aDes.Length(), aDes.Length());
       
   120 	}
       
   121 /**
       
   122 Seeks the current data pointer aOffset bytes from the current position.
       
   123 
       
   124 @param  aOffset
       
   125         The number of bytes by which to seek.
       
   126 */
       
   127 inline void TBufPtr8::Shift(TInt aOffset)
       
   128 	{
       
   129 	SetLength(Length() - aOffset); iMaxLength -= aOffset; iPtr += aOffset;
       
   130 	}
       
   131 
       
   132 /**
       
   133 @publishedAll
       
   134 @released
       
   135 
       
   136 Provides read related processing functions for bitmaps.
       
   137 
       
   138 Note: For use by plugin writers only.
       
   139 */
       
   140 class CImageReadCodec : public CBase
       
   141 	{
       
   142 public:
       
   143 	IMPORT_C ~CImageReadCodec();
       
   144 
       
   145 	/**
       
   146 	Performs initial processing of image data and mask bitmaps.
       
   147 
       
   148 	This function processes the image frame using data supplied in
       
   149 	aFrameInfo, aFrameImageData and using the flag aDisableErrorDiffusion. Not all codecs
       
   150 	are expected to make use of all fields.
       
   151 
       
   152 	This is a virtual function that each derived class must implement.
       
   153 
       
   154 	@param	aFrameInfo
       
   155 	        A reference to a TFrameInfo object.
       
   156 	@param	aFrameImageData
       
   157 	        A reference to a CFrameImageData object.
       
   158 	@param	aDisableErrorDiffusion
       
   159 	        A flag indicating whether error diffusion should be disabled.
       
   160 	@param	aDestination
       
   161 	        The destination bitmap.
       
   162 	@param	aDestinationMask
       
   163 	        The destination mask bitmap.
       
   164 	*/
       
   165 	virtual void InitFrameL(TFrameInfo& aFrameInfo, CFrameImageData& aFrameImageData, TBool aDisableErrorDiffusion, CFbsBitmap& aDestination, CFbsBitmap* aDestinationMask) = 0;
       
   166 
       
   167 	IMPORT_C virtual void InitFrameHeader(TFrameInfo& aFrameInfo, CFrameImageData& aFrameData);
       
   168 	IMPORT_C virtual TFrameState ProcessFrameHeaderL(TBufPtr8& aData);
       
   169 	IMPORT_C virtual void Complete(); // Called on frame completion and on underflow
       
   170 	IMPORT_C virtual void GetNewDataPosition(TInt& aPosition, TInt& aLength); // Returns a new position for the data stream, (also length of data required)
       
   171 
       
   172 	/**
       
   173 	Processes the frame data contained in aSrc.
       
   174 
       
   175 	This is a pure virtual function that each derived class must implement.
       
   176 
       
   177 	@param  aSrc
       
   178 	        A reference to the buffer containing the frame data.
       
   179 
       
   180 	@return	The current frame state after processing.
       
   181 	*/
       
   182 	virtual TFrameState ProcessFrameL(TBufPtr8& aSrc) = 0;
       
   183 	void SetCurrentFrame(TInt aFrameNumber);
       
   184 	
       
   185 	IMPORT_C virtual TInt ReductionFactor(const TSize& aOriginalSize, const TSize& aReducedSize) const;
       
   186 	IMPORT_C virtual TInt ReducedSize(const TSize& aOriginalSize,TInt aReductionFactor, TSize& aReducedSize) const;
       
   187 	
       
   188 protected:
       
   189 	IMPORT_C CImageReadCodec();
       
   190 	IMPORT_C void ConstructL();
       
   191 
       
   192 	IMPORT_C void ClearBitmapL(CFbsBitmap& aBitmap, TRgb aColor);
       
   193 	IMPORT_C TInt CurrentFrame() const;
       
   194 
       
   195 private:
       
   196 	// Future proofing
       
   197 	IMPORT_C virtual void ReservedVirtual1();
       
   198 	IMPORT_C virtual void ReservedVirtual2();
       
   199 	IMPORT_C virtual void ReservedVirtual3();
       
   200 	IMPORT_C virtual void ReservedVirtual4();
       
   201 
       
   202 private:
       
   203 	TInt iCurrentFrame; //make handle to body if additional properties are needed
       
   204 	};
       
   205 
       
   206 /**
       
   207 @publishedAll
       
   208 @released 
       
   209 
       
   210 Provides functions to determine or set features of the codec's CImageProcessor.
       
   211 
       
   212 Note: 
       
   213 For use by plugin writers only.
       
   214 */
       
   215 class CImageProcessorReadCodec : public CImageReadCodec
       
   216 	{
       
   217 public:
       
   218 	IMPORT_C ~CImageProcessorReadCodec();
       
   219 protected:
       
   220 	IMPORT_C CImageProcessorReadCodec();
       
   221 	IMPORT_C void ConstructL();
       
   222 
       
   223 	IMPORT_C CImageProcessor* ImageProcessor() const;
       
   224 	IMPORT_C void SetImageProcessor(CImageProcessor* aImageProc);
       
   225 
       
   226 	IMPORT_C const TPoint& Pos() const;
       
   227 	IMPORT_C TPoint& Pos();
       
   228 	IMPORT_C void SetPos(const TPoint& aPos);
       
   229 private:
       
   230 	CImageProcessorReadCodecBody* iBody;
       
   231 	};
       
   232 
       
   233 /**
       
   234 @publishedAll
       
   235 @released
       
   236 
       
   237 Provides functions to determine or set features of the codec's CImageProcessor for a bitmap mask.
       
   238 
       
   239 Note: For use by plugin writers only.
       
   240 */
       
   241 class CImageMaskProcessorReadCodec : public CImageProcessorReadCodec
       
   242 	{
       
   243 public:
       
   244 	IMPORT_C ~CImageMaskProcessorReadCodec();
       
   245 protected:
       
   246 	IMPORT_C CImageMaskProcessorReadCodec();
       
   247 	IMPORT_C void ConstructL();
       
   248 
       
   249 	IMPORT_C CImageProcessor* MaskProcessor() const;
       
   250 	IMPORT_C void SetMaskProcessor(CImageProcessor* aMaskProc);
       
   251 
       
   252 private:
       
   253 	CImageMaskProcessorReadCodecBody* iBody;
       
   254 	};
       
   255 
       
   256 
       
   257 /**
       
   258 @publishedAll
       
   259 @released
       
   260 
       
   261 Interface to be used by read codec implementations in conjunction with framework extension.
       
   262 */
       
   263 class MReadCodecExtension
       
   264 	{
       
   265 public:
       
   266 	/**
       
   267 	Obtains the scaling coefficient 
       
   268 	@param 	aOriginalSize	A reference to the original size of an image.
       
   269 	@param 	aDesiredSize	A reference to the desired size of an image.
       
   270 	@return	The scaling coefficient, for example:
       
   271 			Original size = 1 or -1,
       
   272 			Half original size = -2,
       
   273 			Quarter original size = -3 etc.
       
   274 	*/
       
   275 	virtual TInt ScalingCoefficient(const TSize& aOriginalSize, const TSize& aDesiredSize) const = 0;
       
   276 	
       
   277 	/**
       
   278 	Obtains the reduced size of the decoded bitmap based on the input parameters
       
   279 	and updates aReducedSize with this value.
       
   280 
       
   281 	@param  aOriginalSize		A reference to the original size of an image.
       
   282 	@param  aScalingCoeff		The scaling coefficient to be applied.
       
   283 	@param  aReducedSize		A reference to the new size of an image.
       
   284 	@return KErrNone			If the function call was successful.
       
   285 	@return 					A range of system wide error values.
       
   286 	*/
       
   287 	virtual TInt GetReducedSize(const TSize& aOriginalSize, TInt aScalingCoeff, TSize& aReducedSize) const = 0;	
       
   288 	};
       
   289 
       
   290 /**
       
   291 @publishedAll
       
   292 @released
       
   293 
       
   294 Provides functions to determine or set features of the codec's CImageProcessor plus
       
   295 provide extra functionality for Framework Extensions.
       
   296 
       
   297 Note: 
       
   298 For use by plugin writers only.
       
   299 */
       
   300 class CImageProcessorReadCodecExtension : public CImageProcessorReadCodec,
       
   301 										  public MReadCodecExtension											
       
   302 	{
       
   303 public:
       
   304 	IMPORT_C ~CImageProcessorReadCodecExtension();
       
   305 protected:
       
   306 	IMPORT_C CImageProcessorReadCodecExtension();
       
   307 	IMPORT_C void ConstructL();
       
   308 	
       
   309 	// From MReadCodecExtension
       
   310 	IMPORT_C TInt ScalingCoefficient(const TSize& aOriginalSize, const TSize& aDesiredSize) const;
       
   311 	IMPORT_C TInt GetReducedSize(const TSize& aOriginalSize, TInt aScalingCoeff, TSize& aReducedSize) const;
       
   312 	};
       
   313 
       
   314 /**
       
   315 @publishedAll
       
   316 @released
       
   317 
       
   318 
       
   319 Provides functions to determine or set features of the codec's CImageProcessor plus
       
   320 provide extra functionality for Framework Extensions.
       
   321 
       
   322 Note: 
       
   323 For use by plugin writers only.
       
   324 */
       
   325 class CImageMaskProcessorReadCodecExtension : public CImageMaskProcessorReadCodec,
       
   326 										  	  public MReadCodecExtension											
       
   327 	{
       
   328 public:
       
   329 	IMPORT_C ~CImageMaskProcessorReadCodecExtension();
       
   330 protected:
       
   331 	IMPORT_C CImageMaskProcessorReadCodecExtension();
       
   332 	IMPORT_C void ConstructL();
       
   333 	
       
   334 	// From MReadCodecExtension
       
   335 	IMPORT_C TInt ScalingCoefficient(const TSize& aOriginalSize, const TSize& aDesiredSize) const;
       
   336 	IMPORT_C TInt GetReducedSize(const TSize& aOriginalSize, TInt aScalingCoeff, TSize& aReducedSize) const;
       
   337 
       
   338 	};
       
   339 
       
   340 /**
       
   341 @publishedAll
       
   342 @released
       
   343 
       
   344 Provides read related processing functions for bitmaps.
       
   345 
       
   346 Note:
       
   347 For use by plugin writers only.
       
   348 */
       
   349 class CImageWriteCodec : public CBase
       
   350 	{
       
   351 public:
       
   352 	IMPORT_C ~CImageWriteCodec();
       
   353 	IMPORT_C virtual void InitFrameL(TBufPtr8& aDst, const CFbsBitmap& aSource);
       
   354 
       
   355 	/**
       
   356 	Processes the frame data contained in aDst.
       
   357 
       
   358 	The internally held buffer must have been previously set, either by InitFrameL() or by a 
       
   359 	SetSource().
       
   360 
       
   361 	This is a pure virtual function that each derived class must implement.
       
   362 
       
   363 	@param  aDst
       
   364 	        A reference to the buffer containing the frame data.
       
   365 
       
   366 	@return The current frame state after processing.
       
   367 	*/
       
   368 	virtual TFrameState ProcessFrameL(TBufPtr8& aDst) = 0;
       
   369 
       
   370 	IMPORT_C const CFbsBitmap* Source() const;
       
   371 	IMPORT_C void SetSource(const CFbsBitmap* aSource);
       
   372 protected:
       
   373 	IMPORT_C void ConstructL();
       
   374 	IMPORT_C CImageWriteCodec();
       
   375 private:
       
   376 	// Future proofing
       
   377 	IMPORT_C virtual void ReservedVirtual1();
       
   378 	IMPORT_C virtual void ReservedVirtual2();
       
   379 	IMPORT_C virtual void ReservedVirtual3();
       
   380 	IMPORT_C virtual void ReservedVirtual4();
       
   381 private:
       
   382 	const CFbsBitmap* iSource; // linked object
       
   383 	};
       
   384 
       
   385 /**
       
   386 @internalComponent
       
   387 
       
   388 Max size of strings in extra resource files
       
   389 */
       
   390 const TInt KCodecResourceStringMax=128;
       
   391 
       
   392 #endif // __IMAGECODEC_H__