mmfenh/enhancedmediaclient/Plugins/FileSource/inc/FileMultimediaSource.h
changeset 0 71ca22bcf22a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmfenh/enhancedmediaclient/Plugins/FileSource/inc/FileMultimediaSource.h	Tue Feb 02 01:08:46 2010 +0200
@@ -0,0 +1,215 @@
+/*
+* 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:  Header of FileSource.
+*
+*/
+
+
+
+#ifndef FILEMULTIMEDIASOURCE_H
+#define FILEMULTIMEDIASOURCE_H
+
+
+#include <MultimediaDataSource.h>
+#include <mmfcontrollerframework.h>
+#include "FileDataSourceCommon.h"
+
+class CReadWriteRequest;
+class CTransferBufferCopy;
+class MGenericFile;
+class CSinkQueueItem;
+class MDataSource;
+class TMMFMessage;
+class MDataSink;
+class MDataSource;
+class MAsyncEventHandler;
+
+
+class CFileMultimediaSource : public CMultimediaDataSource
+    {
+    public:
+        // From MDataSource
+        IMPORT_C static CFileMultimediaSource* NewL(MDataSource& aDataSource);
+        
+        // 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);
+        
+        
+        TInt GetDRMProtection( TBool& aIsProtected );
+        TInt EvaluateIntent( ContentAccess::TIntent aIntent );
+        TInt ExecuteIntent( ContentAccess::TIntent aIntent );
+        TInt SetAgentProperty( ContentAccess::TAgentProperty aProperty,
+            TInt aValue);
+        const TDesC& UniqueId() const;
+        // 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
+        void SourceCustomCommand(TMMFMessage& aMessage);
+        // A common function that implements FillBuffer requests
+        TInt AppendBufferToSinkQueue( CMMFBuffer* aBuffer,
+            MMultimediaDataSourceObserver* aObserver,
+            MDataSink* aConsumer,TBool aTop);
+        TInt ServiceFillBuffer();
+        
+    public :
+        virtual ~CFileMultimediaSource() ;
+        //	static MDataSource* NewSourceL(/*TUid aType*/) ;
+                
+        void SetTransferBuffer(TBool aTBuffer) ;
+        TBool CanUseTransferBuffer () ;
+        TInt ReadRequestStatus(CReadWriteRequest* aRequest,TRequestStatus& aStatus);
+        
+    protected:
+    /**
+    Indicates for which purpose the object instance is being created
+        */
+        enum TMMFileMode
+            {
+            /** The object is created for being a source */
+            ESourceMode,
+            /** The object is created for being a sink */
+            ESinkMode
+            };
+
+        void ConstructL(const TDesC8& aInitData, TMMFileMode aFileMode) ;
+        CFileMultimediaSource(MDataSource& aDataSource) ;
+        void ConstructL();
+        void StoreRequestL( CReadWriteRequest* aRequest ) ;
+        void CancelRequests();
+        
+        TInt EmptySinkQueue();
+        CTransferBufferCopy* ObtainCopyOfTransferBufferL(TInt aMaxLength);
+        
+        void StateChanged(TState newState);
+        
+    private:
+        
+        // New Functions
+        const TDesC& FileName() const ;
+        const TDesC& Extension() const ;
+        const TDesC& FilePath() const ;
+        const TDesC& FileDrive() const ;
+        const TFileName FullName() const;
+        RFile& FileL() ;
+        
+    private:
+        class CFileMultimediaSourceAsyncEventHandler : public MAsyncEventHandler
+            {
+            public:
+                CFileMultimediaSourceAsyncEventHandler(CFileMultimediaSource* aParent);
+                virtual ~CFileMultimediaSourceAsyncEventHandler();
+            public:
+                virtual TInt SendEventToClient(const TMMFEvent& aEvent);
+            private:
+                CFileMultimediaSource* iParent;
+            };
+        
+        class CCAFParameters : public CBase
+            {
+            public:
+                CCAFParameters() : iUniqueId(NULL), iEnableUI(EFalse) {}
+                ~CCAFParameters() {	delete iUniqueId;	}
+            public:
+                HBufC* iUniqueId;
+                TBool iEnableUI;
+            };
+     
+        
+       
+    private:
+        MGenericFile* iFile;
+        RFs iFsSession;
+        
+        TBool iFileHandle;
+        RFile iHandle;
+        TBool iReserved;
+        
+        TFileName iFullFileName ;
+        HBufC* iFileName ;
+        HBufC* iFileExt ;
+        HBufC* iFilePath ;
+        HBufC* iFileDrive ;
+        CCAFParameters* iCAFParameters;
+       
+        TFourCC  iSinkFourCC ;
+        TFourCC  iSourceFourCC ;
+        
+        // Queue of buffers from controller
+        TSglQue<CSinkQueueItem>* iSinkQueue;
+        //MDataSink* iConsumer;
+        // Sink item Counter
+        TInt iSnkItemsCount;
+        // Observer bit rate in bps
+        //Keeps track of the read position within the file. Needed in order to enable passing of the
+        //read position to the CReadRequest to manage the LastBuffer flag.
+        //NB: Continuous reads once EOF has been reached will result in iPosition going > iDLFileSize,
+        //but this causes no ill effects
+        TUint iSnkBytes;
+        
+        TInt iDownloadSize;
+        
+        // Transfer bit rate in bps
+        TUint   iTransferRate;  
+        
+        TUint   iObserverBitRate;
+        
+        // Buffering size in bytes
+        TUint   iBufferedDataSize;
+        
+        TInt iDLFileSize; //holds the cached file size
+        TMMFMessage* iMessage;
+        
+        MMultimediaDataSourceObserver* iObserver;
+        RPointerArray<CReadWriteRequest> iRequests;
+        
+        MAsyncEventHandler *iEventHandler;
+        
+        RPointerArray<CTransferBufferCopy> iTransferBufferCopies;
+        TBool   isDownloadComplete;
+        TInt iFileSize;
+
+        // Pointer to the Preset Repository
+
+        TUint iInitialBufferingPercentage;
+        // Parent MDataSource
+        MDataSource* iParentDataSource;
+        HBufC8* iInitData;       
+    };
+    
+#endif //__FILEDATASOURCE_H_