--- /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_