mmfenh/enhancedmediaclient/Plugins/CacheSource/inc/CacheSource.h
changeset 0 71ca22bcf22a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmfenh/enhancedmediaclient/Plugins/CacheSource/inc/CacheSource.h	Tue Feb 02 01:08:46 2010 +0200
@@ -0,0 +1,159 @@
+/*
+* Copyright (c) 2006 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:  Definition of the S60 Audio Stream Source custom command msg cods.
+*
+*/
+
+
+#ifndef CACHESOURCE_H
+#define CACHESOURCE_H
+
+#include <e32base.h>
+#include <DataSourceConfigIntfc.h>
+#include <MultimediaDataSource.h>
+
+// FORWARD DECLARATIONS
+class MDataSource;
+class CSinkQueueItem;
+class CReadWriteRequestAO;
+class CDataSourceConfigIntfc;
+class CMMFDataBuffer;
+// CLASS DECLARATION
+
+class CMDataSourceObserver : public MMultimediaDataSourceObserver
+    {
+    public:
+      static CMDataSourceObserver* NewL(
+            CMultimediaDataSource* aDataSource
+            ,CMultimediaDataSource* aParent );
+        
+        virtual ~CMDataSourceObserver();
+
+    private:
+        CMDataSourceObserver(CMultimediaDataSource* aDataSource ,CMultimediaDataSource* aParent);
+        void ConstructL();
+        
+        void BufferFilled( CMMFBuffer* aBuffer );
+        
+        // KStreamControlEventSeekingSupportChanged
+        // KStreamControlEventRandomSeekingSupportChanged
+        // KMultimediaDataSourceObserverEventSourceSizeChanged
+        void Event( TUid aEvent );
+        // Returns BITRATE. This is used for calculation how much of data need to be
+        // buffered by the source before filling observer buffers.
+        TInt GetBitRate( TUint& aBitRate );
+        
+        CMultimediaDataSource* iDataSource;
+        CMultimediaDataSource* iParent;
+    };
+
+
+class CCacheSource : public CMultimediaDataSource
+                            //,public MCacheCopyEngineObserver
+    {
+    public:
+        IMPORT_C static CCacheSource* NewL( CMultimediaDataSource* aDataSource, CDataSourceConfigIntfc* aDataSourceConfig );
+        
+        // From CMultimediaDataSource begins
+        TInt SetObserver( MMultimediaDataSourceObserver& aObserver );
+        TInt GetObserver( MMultimediaDataSourceObserver*& aObserver );
+        void Event( TUid aEvent );
+        TInt SetDataTypeCode(TFourCC aSourceFourCC );
+        TInt GetDataTypeCode(TFourCC& aSourceFourCC );
+        TInt GetSize( TUint& aSize );
+        TInt Open();
+        TInt Close();
+        TInt Prime();
+        TInt Play();
+        TInt Stop();
+        TInt FillBuffer( CMMFBuffer* aBuffer);
+        
+
+        // From MCustomInterface
+        TAny* CustomInterface( TUid aInterfaceUid );
+
+       /* Seeking Interface */
+        // Returns true if byte position can be reset to zero.
+        // Valid in all states
+        TInt GetSeekingSupport( TBool& aSeekSupport );
+        // Returns true if byte position can be set anywhere between zero and
+        // GetSize().
+        // Valid in all states
+        TInt GetRandomSeekingSupport( TBool& aSeekSupport );
+        // Moves read position pointer to byte location requested by the observer
+        // between zero and GetSize(). If the size specified is out of range, this
+        // function returns KErrArgument.
+        TInt Seek( TUint aPosInBytes );
+        // From CMultimediaDataSource ends
+        
+        TInt ServiceBufferFilled( CMMFBuffer* aBuffer );
+        void ReadRequestComplete(CReadWriteRequestAO* aRequest,TRequestStatus& aStatus);
+        ~CCacheSource();
+    private:
+ 
+        CCacheSource(CMultimediaDataSource* aDataSource, CDataSourceConfigIntfc* aDataSourceConfig);
+        
+        void ConstructL (void);
+        
+        TInt EmptySinkQueue();
+        TInt AppendBufferToSinkQueue( CMMFBuffer* aBuffer );
+        TInt ServiceFillBuffer();
+        
+    private: // Data
+        
+        // Queue of data buffers from client
+        TSglQue<CSinkQueueItem>* iSinkQueue;
+        // Reference to MMultimedia data source
+        MMultimediaDataSourceObserver* iObserver;
+        
+        CMDataSourceObserver* iDataSourceObserver;
+        // Parent DataSource to Talk to
+        CMultimediaDataSource* iDataSource;
+        // Sink item Counter
+        TInt iSnkItemsCount;
+        //Temp File to Store Data
+        RFile iFile;
+        //Session to File server.
+        RFs iFs;
+        //File Name and Path for the Temp file
+        TFileName iFileName;
+        //Last Buffer Flag
+        TBool iLastBufferWritten;
+        //Size of the Temp File
+        TInt iFileSize;
+        // Number of bytes copied to controller so far
+        TUint iSnkBytes;
+
+        CMMFDataBuffer* iTransferBuffer;
+        
+        CDataSourceConfigIntfc* iDataSourceConfig;
+        
+        CReadWriteRequestAO* iReadRequest;
+        CReadWriteRequestAO* iWriteRequest;
+        
+        CDataSourceConfigIntfc::TCacheType iCacheType;
+        CMMFDataBuffer* iDataBuffer;
+        HBufC*          iCacheLocation;
+        TInt            iAbsBufferStart;
+        TInt            iAbsBufferEnd;
+        TInt            iBufferReadPos;
+        TInt            iSeekStart;
+        TInt            iSeekEnd;
+        TInt            iAbsBufferReadPos;
+
+    };
+
+#endif // CACHESOURCE_H
+
+    //  End of File