imagingandcamerafws/imagingunittest/testcodec/inc/TestAsyncConvert.h
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imagingandcamerafws/imagingunittest/testcodec/inc/TestAsyncConvert.h	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,148 @@
+// Copyright (c) 2003-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 __TESTASYNCCONVERT_H__
+#define __TESTASYNCCONVERT_H__
+
+#include "imageconversion.h"
+#include "TestAsyncCodec.h"
+#include <icl/imageplugin.h>
+
+// forward refs
+class CTestAsyncReadCodec;
+class CTestAsyncWriteCodec;
+
+// MAsyncSchedulerObserver
+// mixin class to handle callbacks from an CAsyncScheduler object
+class MAsyncSchedulerObserver
+	{
+public:
+	virtual void MasoProcessL(TInt error) = 0;
+	};
+
+class CAsyncScheduler : public CActive
+	{
+public:
+	CAsyncScheduler(MAsyncSchedulerObserver& aSchedulerObserver);
+	void Start();
+
+	// From CActive
+	virtual void RunL();
+	virtual void DoCancel() {};
+
+private:
+	MAsyncSchedulerObserver& iSchedulerObserver;
+	};
+
+
+class CTestAsyncDecoder : public CImageDecoderPlugin, 
+	public MAsyncSchedulerObserver
+	{
+public:
+	static CTestAsyncDecoder* NewL();
+	virtual ~CTestAsyncDecoder();
+
+	virtual void ImageType(TInt aFrameNumber, TUid& aImageType, TUid& aImageSubType) const;
+	CFrameInfoStrings* FrameInfoStringsL(RFs& aFs, TInt aFrameNumber);
+
+	// From CImageDecoderPlugin
+	virtual void DoConvert();
+	virtual TInt NumberOfImageComments() const;
+	virtual HBufC* ImageCommentL(TInt aCommentNumber) const;
+	virtual TInt NumberOfFrameComments(TInt aFrameNumber) const;
+	virtual HBufC* FrameCommentL(TInt aFrameNumber, TInt aCommentNumber) const;
+	void ScanDataL();
+	virtual void Cleanup();
+
+	// from MAsyncSchedulerObserver
+	virtual void MasoProcessL(TInt aError);
+
+	// callback from CTestAsyncReadCodec to indicate completion
+	// of CTestAsyncReadCodec::ProcessFrameL()
+	void ProcessFrameComplete(TInt aError);
+
+private:
+	CTestAsyncDecoder();
+	void ConstructL();
+
+
+private:
+	enum TDecodeState
+		{
+		EDecodeInit,
+		EDecodeInProgress,
+		EDecodeFinished
+		};
+	TDecodeState iDecodeState;
+	
+	CTestAsyncReadCodec* iImageReadCodec;	// not owned
+	TInt iDecodeIterations;
+
+	TInt iMaxValue;
+	TBool iReadHeaders;
+
+	CAsyncScheduler* iScheduler;
+
+	TInt iError;
+	};
+
+
+class CTestAsyncEncoder : public CImageEncoderPlugin, public MAsyncSchedulerObserver
+	{
+public:
+	static CTestAsyncEncoder* NewL();
+	virtual ~CTestAsyncEncoder();
+
+	// From CImageEncoderPlugin
+	virtual void DoConvert();
+	void PrepareEncoderL(const CFrameImageData* aFrameImageData);
+	virtual void Cleanup();
+	void UpdateHeaderL();
+
+	// from MAsyncSchedulerObserver
+	virtual void MasoProcessL(TInt aError);
+
+	// callback from CTestAsyncWriteCodec to indicate completion
+	// of CTestAsyncWriteCodec::ProcessFrameL()
+	void ProcessFrameComplete(TInt aError);
+
+private:
+	CTestAsyncEncoder();
+	void ConstructL();
+
+
+private:
+	enum TEncodeState
+		{
+		EEncodeInit,
+		EEncodeInProgress,
+		EEncodeFinished
+		};
+	TEncodeState iEncodeState;
+	
+	CTestAsyncWriteCodec* iImageWriteCodec;	// not owned
+	TInt iEncodeIterations;
+
+	TInt iMaxValue;
+	TBool iReadHeaders;
+
+	CAsyncScheduler* iScheduler;
+
+	TInt iError;
+	};
+
+
+#endif
+