imaging/imagingfws/src/ImageStraightRelay.h
changeset 0 5752a19fdefe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imaging/imagingfws/src/ImageStraightRelay.h	Wed Aug 25 12:29:52 2010 +0300
@@ -0,0 +1,170 @@
+// Copyright (c) 2001-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:
+// Not for public use
+// Abstract relay between Image{Decoder,Encoder} and Priv object - will shield any threads
+// 
+//
+
+#ifndef __IMAGESTRAIGHTRELAY_H__
+#define __IMAGESTRAIGHTRELAY_H__
+
+#include <caf/caf.h>
+using namespace ContentAccess;
+
+#include "icl/ImageCodec.h"
+#include "icl/ImageData.h"
+#include "ImageRelay.h"
+#include "ImageConversion.h"
+#include "icl/imageconversionextension.h"
+
+class CImageDecoderPriv;
+class CImageEncoderPriv;
+
+// Direct relay between CImageDecoder and CImageDecoderPriv
+class CImageDecoderStraightRelay; // declared here
+NONSHARABLE_CLASS( CImageDecoderStraightRelay ): public CBase, 
+                                                 public MImageDecoderRelay,
+                                                 public MImageDecoderPrivSupport
+	{
+public:
+	static CImageDecoderStraightRelay* NewL(CImageDecodeConstruct *aConstruct);
+	~CImageDecoderStraightRelay();
+
+	// from MDecoderRelay
+	void Cancel();
+
+	void SetFileL(RFs& aFs, const TDesC& aSourceFilename, const CImageDecoder::TOptions aOptions = CImageDecoder::EOptionNone);
+	void SetFileL(RFile& name, const CImageDecoder::TOptions aOptions = CImageDecoder::EOptionNone);
+	void SetDataL(RFs& aFs, const TDesC8& aSourceData, const CImageDecoder::TOptions aOptions = CImageDecoder::EOptionNone);
+
+	CImageDecoderPlugin* Plugin() const;
+
+	void HandleNewlyOpenedImageL();
+
+	void Convert(TRequestStatus* aRequestStatus, CFbsBitmap& aDestination, TInt aFrameNumber);
+	void Convert(TRequestStatus* aRequestStatus, CFbsBitmap& aDestination, CFbsBitmap& aDestinationMask, TInt aFrameNumber = 0);
+	void ContinueConvert(TRequestStatus* aRequestStatus);
+
+	void ContinueProcessingHeaderL();
+
+	const TFrameInfo& FrameInfo(TInt aFrameNumber) const;
+	CFrameInfoStrings* FrameInfoStringsLC(TInt aFrameNumber);
+
+	TUid ImplementationUid() const;
+
+	TInt FrameCount() const;
+	TBool IsImageHeaderProcessingComplete() const;
+	const CFrameImageData& FrameData(TInt aFrameNumber) const;
+
+	TInt NumberOfImageComments() const;
+	HBufC* ImageCommentL(TInt aCommentNumber) const;
+	TInt NumberOfFrameComments(TInt aFrameNumber) const;
+	HBufC* FrameCommentL(TInt aFrameNumber, TInt aCommentNumber) const;
+
+	void CustomSyncL(TInt aParam);
+	void CustomAsync(TRequestStatus* aRequestStatus, TInt aParam);
+
+	void TransferConstructOwnership();
+
+	void SetImageTypeL(TInt aImageType);
+	
+	// from MImageDecoderPrivSupport
+	TBool MustUseBufferWithDescriptor() const;
+	void CopyBufferToDescriptor(TDes8& aBuffer, const TDesC8& aSource, TInt aPosition, TInt aSize);
+	TBool AmInThread() const;
+	TBool ShouldAbort() const;
+	void Lock();
+	void Unlock();
+	void SaveFrameCount(TInt aFrameCount);
+
+	// from MImageDecoderRelay
+	void SetIntent(TIntent aIntent);
+	void SetUniqueIdL(const TDesC& aUniqueId);
+	TInt SetAgentProperty(ContentAccess::TAgentProperty aProperty, TInt aValue);
+
+	TInt ReductionFactor(const TSize& aOriginalSize, const TSize& aReducedSize) const;
+	TInt ReducedSize(const TSize& aOriginalSize, TInt aReductionFactor, TSize& aReducedSize) const;
+	
+	TInt SetDecoderThreadPriority(TThreadPriority aPriority);
+	
+	void GetExtensionL(TUid aExtUid, MImageConvExtension*& aExtPtr);
+	void SetClippingRectL(const TRect* aClipRect);
+	TInt GetDestinationSize(TSize& aSize, TInt aFrameNumber = 0);
+	CImageConvExtensionCache& ExtensionCache();
+
+protected:
+	CImageDecoderStraightRelay(CImageDecodeConstruct* aConstruct);
+	void ConstructL();
+
+private:
+	CImageDecodeConstruct* iConstruct;
+	TBool iOwnConstruct;
+	CImageDecoderPriv* iBody;
+	RThread iMyThread;
+	CImageConvExtensionCache* iExtensionCache;
+	};
+
+// Straight relay between CImageEncoder and CImageEncoderPriv
+class CImageEncoderStraightRelay; // declared here
+NONSHARABLE_CLASS( CImageEncoderStraightRelay ): public CBase, 
+                                                 public MImageEncoderRelay,
+								                 public MImageEncoderPrivSupport
+	{
+public:
+	static CImageEncoderStraightRelay* NewL(CImageEncodeConstruct* aConstruct);
+	~CImageEncoderStraightRelay();
+
+	// from MEncoderRelay
+	void Cancel();
+
+	void SetFileL(RFs& aFs, const TDesC& aDestinationFilename, const CImageEncoder::TOptions aOptions);
+	void SetFileL(RFile& name, const CImageEncoder::TOptions aOptions);
+	void SetDataL(HBufC8*& aDestinationData, const CImageEncoder::TOptions aOptions);
+
+	CImageEncoderPlugin* Plugin() const;
+
+	void Convert(TRequestStatus* aRequestStatus, const CFbsBitmap& aSource, const CFrameImageData* aFrameImageData);
+
+	TUid ImplementationUid() const;
+
+	void CustomSyncL(TInt aParam);
+	void CustomAsync(TRequestStatus* aRequestStatus, TInt aParam);
+
+	void TransferConstructOwnership();
+	
+	void GetExtensionL(TUid aExtUid, MImageConvExtension*& aExtPtr);
+	CImageConvExtensionCache& ExtensionCache();
+
+	// from MImageEncoderPrivSupport
+	TBool AmInThread() const;
+	TBool ShouldAbort() const;
+
+	void SetThumbnail(TBool aDoGenerateThumbnail);
+	
+	TInt SetEncoderThreadPriority(TThreadPriority aPriority);
+
+protected:
+	CImageEncoderStraightRelay(CImageEncodeConstruct* aConstruct);
+	void ConstructL();
+
+private:
+	CImageEncodeConstruct* iConstruct;
+	TBool iOwnConstruct;
+	CImageEncoderPriv* iBody;
+	RThread iMyThread;
+	CImageConvExtensionCache* iExtensionCache;
+	};
+
+#endif // __IMAGESTRAIGHTRELAY_H__
+