diff -r 000000000000 -r 71ca22bcf22a mmfenh/enhancedmediaclient/Plugins/CacheSource/inc/CacheSource.h --- /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 +#include +#include + +// 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* 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