--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imagingandcamerafws/imagingfws/src/GenThreadRelay.h Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,146 @@
+// 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:
+//
+
+#ifndef __GEN_THREAD_RELAY_H__
+#define __GEN_THREAD_RELAY_H__
+
+#include "ImageConversion.h"
+
+const TThreadPriority KSubThreadPriority = EPriorityLess;
+const TInt KSubThreadStackSize = KDefaultStackSize; // 0x2000 = 8k
+const TInt KTerminationFunction = 0;
+
+class CSubThreadRelay;
+
+/**
+ *
+ * This class is not for public use
+ *
+ */
+class TThreadRelayParam
+ {
+public:
+ TThreadId iMainThreadId;
+ CSubThreadRelay** iSubThreadRelay; //Not owned
+ CSubThreadRelay* (*iFactoryFunctionL) (TThreadId aMainThreadId, TAny* aCodecParam); //Not owned
+ TAny* iCodecParam; //Not owned
+ TRequestStatus* iSetupComplete; //Not owned
+ };
+
+class CSubThreadUndertaker; // declared here
+/**
+ *
+ * This class is not for public use
+ * This AO monitor the sub thread for panics
+ *
+ */
+NONSHARABLE_CLASS( CSubThreadUndertaker ): public CActive
+ {
+public:
+ static CSubThreadUndertaker* NewL(RThread& aSubThread);
+ virtual ~CSubThreadUndertaker();
+
+protected:
+ //From CActive
+ virtual void RunL();
+ virtual void DoCancel();
+
+private:
+ CSubThreadUndertaker(RThread* aSubThread);
+
+private:
+ RThread* iSubThread; //Not owned
+ };
+
+class CSubThreadRelay; // declared here
+/**
+ *
+ * This class is not for public use
+ * Implement plugin side thread interface for threaded De/Encode
+ *
+ */
+NONSHARABLE_CLASS( CSubThreadRelay ): public CActive
+ {
+public:
+ void Shutdown(TRequestStatus& aRequestStatus);
+ virtual ~CSubThreadRelay();
+
+ void Prime();
+ void SignalSetupComplete(TRequestStatus* aSetupComplete);
+
+ TRequestStatus* Status();
+
+ void RunFunctionInThread(TRequestStatus& aCallingStatus, TInt aFunctionCode, TAny* aParameters);
+ void SetSubThread(RThread* aSubThread);
+
+protected:
+ void ConstructL(TThreadId aMainThreadId);
+ CSubThreadRelay();
+
+ virtual void RunFunctionL(TInt aFunctionCode, TAny* aParameters) = 0;
+
+ //From CActive
+ virtual void RunL();
+ virtual void DoCancel();
+
+protected:
+ RThread iMainThread;
+ RThread* iSubThread; //Not owned
+
+private:
+ TRequestStatus* iCallingStatus;
+ TInt iFunctionCode;
+ TAny* iFunctionParams;
+ };
+
+class CThreadRelay; // declared here
+/**
+ *
+ * This class is not for public use
+ * Implement client side thread interface for threaded De/Encoding
+ *
+ */
+NONSHARABLE_CLASS( CThreadRelay ): public CBase
+ {
+public:
+ virtual ~CThreadRelay();
+
+protected:
+ CThreadRelay();
+ void ConstructL(CSubThreadRelay* (*aFactoryFunctionL)(TThreadId aMainThreadId, TAny* aCodecParam), TAny* aCodecParam);
+
+ TInt RunFunction(TInt aFunctionCode, TAny* aParameters);
+
+ CSubThreadRelay* SubThreadRelay();
+
+ const RThread* SubThread() const;
+ void SetPriority(TThreadPriority aPriority) const;
+
+private:
+ static TInt ThreadFunction(TAny* aPtr);
+ static void ThreadTrapFunctionL(TAny* aPtr);
+ void Shutdown();
+
+private:
+ CSubThreadUndertaker* iSubThreadUndertaker;
+ CSubThreadRelay* iSubRelay;
+ RThread iSubThread;
+ TRequestStatus iFunctionCallStatus;
+ TBool iThreadCreated;
+ };
+
+
+#endif // __GEN_THREAD_RELAY_H__
+