williamr@2: // Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@2: // under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: // which accompanies this distribution, and is available williamr@2: // at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // include\mmf\server\mmfbuffer.h williamr@2: // williamr@2: // williamr@2: williamr@2: williamr@2: #ifndef __MMF_SERVER_BUFFER_H__ williamr@2: #define __MMF_SERVER_BUFFER_H__ williamr@2: williamr@2: #include williamr@2: #include williamr@2: williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: Flag reflecting the current buffer status. williamr@2: */ williamr@2: enum TBufferStatus williamr@2: { williamr@2: /** The buffer is available for use */ williamr@2: EAvailable, williamr@2: williamr@2: /** The buffer is currently being filled */ williamr@2: EBeingFilled, williamr@2: williamr@2: /** The buffer is full */ williamr@2: EFull, williamr@2: williamr@2: /** The buffer is currently being emptied */ williamr@2: EBeingEmptied, williamr@2: williamr@2: /** The buffer is currently unavailable */ williamr@2: EUnAvailable williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: Abstract representation of a buffer to contain multimedia data. williamr@2: */ williamr@2: class CMMFBuffer : public CBase williamr@2: { williamr@2: public: williamr@2: IMPORT_C static TBool IsSupportedDataBuffer(TUid aUid); williamr@2: IMPORT_C static TBool IsFileServerSafe(TUid aUid); williamr@2: /** williamr@2: Returns the buffer type. williamr@2: williamr@2: @return The buffer type. williamr@2: */ williamr@2: TUid Type() const {return iType;}; williamr@2: /** williamr@2: Sets the buffer's status. williamr@2: williamr@2: @param aStatus williamr@2: The buffer's status. williamr@2: */ williamr@2: virtual void SetStatus(TBufferStatus aStatus) williamr@2: {iStatus = aStatus; if (iStatus == EAvailable) iPosition = 0;} williamr@2: /** williamr@2: Returns the buffer's status. williamr@2: williamr@2: @return The buffer's status. williamr@2: */ williamr@2: TBufferStatus Status() {return iStatus;}; williamr@2: williamr@2: /** williamr@2: Returns the size of the data in the buffer. williamr@2: williamr@2: This is a virtual function that each derived class must implement. williamr@2: williamr@2: @return The buffer size. williamr@2: */ williamr@2: virtual TUint BufferSize() const = 0; williamr@2: williamr@2: /** williamr@2: Destructor. williamr@2: */ williamr@2: virtual ~CMMFBuffer() {}; williamr@2: inline TTimeIntervalMicroSeconds TimeToPlay() const; williamr@2: inline void SetTimeToPlay (TTimeIntervalMicroSeconds aTime); williamr@2: inline TUint FrameNumber() const; williamr@2: inline void SetFrameNumber(TUint aFrame); williamr@2: inline void NextFrame(); williamr@2: inline virtual void SetPosition (TUint aPosition); williamr@2: inline virtual TUint Position() const; williamr@2: inline virtual TInt RequestSize() const; williamr@2: inline void SetLastBuffer(TBool aLastBuffer); williamr@2: inline TBool LastBuffer() const; williamr@2: protected: williamr@2: CMMFBuffer(TUid aType): iType(aType), iStatus(EAvailable) {}; williamr@2: williamr@2: protected: williamr@2: /** williamr@2: The buffer type. williamr@2: */ williamr@2: TUid iType; williamr@2: williamr@2: /** williamr@2: The current buffer status. williamr@2: williamr@2: @see enum TBufferStatus williamr@2: */ williamr@2: TBufferStatus iStatus; williamr@2: williamr@2: /** williamr@2: The buffer timestamp, in microseconds. williamr@2: */ williamr@2: TTimeIntervalMicroSeconds iTimeToPlay; williamr@2: williamr@2: /** williamr@2: Used to store the current read/write position. Required when the codec and data path williamr@2: may have to read and write the buffer in more than one pass. williamr@2: */ williamr@2: TUint iPosition; williamr@2: williamr@2: /** williamr@2: The frame number. williamr@2: */ williamr@2: TUint iFrameNumber; williamr@2: williamr@2: /** williamr@2: Stores Request size, needed for dynamic buffer length. williamr@2: */ williamr@2: TInt iRequestSize; williamr@2: williamr@2: /** williamr@2: Indicates if this is the last buffer. ETrue if it is. williamr@2: */ williamr@2: TBool iLastBuffer; williamr@2: }; williamr@2: williamr@2: /** williamr@2: Returns the buffer timestamp, in microseconds. williamr@2: williamr@2: @return The buffer timestamp, in microseconds. williamr@2: */ williamr@2: inline TTimeIntervalMicroSeconds CMMFBuffer::TimeToPlay() const williamr@2: { williamr@2: return iTimeToPlay; williamr@2: } williamr@2: williamr@2: /** williamr@2: Sets the buffer timestamp, in microseconds. williamr@2: williamr@2: @param aTime williamr@2: The buffer timestamp, in microseconds. williamr@2: */ williamr@2: inline void CMMFBuffer::SetTimeToPlay (TTimeIntervalMicroSeconds aTime) williamr@2: { williamr@2: iTimeToPlay = aTime; williamr@2: } williamr@2: williamr@2: /** williamr@2: Returns the frame number. williamr@2: williamr@2: @return The frame number. williamr@2: */ williamr@2: inline TUint CMMFBuffer::FrameNumber() const williamr@2: { williamr@2: return iFrameNumber; williamr@2: } williamr@2: williamr@2: /** williamr@2: Sets the frame number. This is used for repositioning. williamr@2: williamr@2: @param aFrameNumber williamr@2: The frame number. williamr@2: */ williamr@2: inline void CMMFBuffer::SetFrameNumber (TUint aFrameNumber) williamr@2: { williamr@2: iFrameNumber = aFrameNumber; williamr@2: } williamr@2: williamr@2: /** williamr@2: Sets the buffer as the next frame. williamr@2: */ williamr@2: inline void CMMFBuffer::NextFrame() williamr@2: { williamr@2: iFrameNumber++; williamr@2: } williamr@2: williamr@2: williamr@2: /** williamr@2: Sets the current buffer read/write position. williamr@2: Used as read/write position on a buffer where a codec may need williamr@2: several passes on the same buffer. williamr@2: williamr@2: @param aPosition williamr@2: The buffer's number. williamr@2: */ williamr@2: inline void CMMFBuffer::SetPosition (TUint aPosition) williamr@2: { williamr@2: iPosition = aPosition; williamr@2: } williamr@2: williamr@2: /** williamr@2: Returns the current buffer read/write position. williamr@2: Used as read/write position on a buffer where a codec may need williamr@2: several passes on the same buffer. williamr@2: williamr@2: @return The buffer's number. williamr@2: */ williamr@2: inline TUint CMMFBuffer::Position() const williamr@2: { williamr@2: return iPosition; williamr@2: } williamr@2: williamr@2: /** williamr@2: Tests whether the buffer is the last buffer. williamr@2: williamr@2: @return A boolean indicating if the buffer is the last one. ETrue if it is the last buffer, williamr@2: EFalse otherwise. williamr@2: */ williamr@2: inline TBool CMMFBuffer::LastBuffer() const williamr@2: { williamr@2: return iLastBuffer; williamr@2: } williamr@2: williamr@2: /** williamr@2: Sets the buffer as the last buffer. williamr@2: williamr@2: @param aLastBuffer williamr@2: A boolean indicating if the buffer is the last buffer. ETrue if it is the last buffer, williamr@2: EFalse otherwise. williamr@2: */ williamr@2: inline void CMMFBuffer::SetLastBuffer(TBool aLastBuffer) williamr@2: { williamr@2: iLastBuffer = aLastBuffer; williamr@2: } williamr@2: williamr@2: /** williamr@2: Returns the size of data processed by sink or data needed by source. williamr@2: williamr@2: @return The size of data williamr@2: */ williamr@2: inline TInt CMMFBuffer::RequestSize() const williamr@2: { williamr@2: return iRequestSize; williamr@2: } williamr@2: williamr@2: #endif