diff -r 000000000000 -r 71ca22bcf22a mmfenh/enhancedmediaclient/Client/src/Components/ClientDataBufferSource/ClientDataBufferSource.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmfenh/enhancedmediaclient/Client/src/Components/ClientDataBufferSource/ClientDataBufferSource.h Tue Feb 02 01:08:46 2010 +0200 @@ -0,0 +1,372 @@ +/* +* 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 ClientDataBufferSource class. +* +*/ + + +#ifndef C_CCLIENTDATABUFFERSOURCE_H +#define C_CCLIENTDATABUFFERSOURCE_H + +#include +#include +#include +#include + +#include "SourceBase.h" +#include "DataBufferQueueItem.h" +#include "BufTypeSupEventAO.h" +#include "ParentChildIntfc.h" + +class MCustomCommand; + +namespace multimedia + { + + class CEventNotifier; + class MDataBuffer; + + /** + * Implements the ClientSide Source for the DBS. + * Provides functionality to the Clients to query attributes + * from the ServerSide source + * @lib EnhancedMediaClient.lib + * @since S60 v3.2 + */ + class CClientDataBufferSource : public CSourceBase, + public MDataBufferSource, + public MBufferObserver, + public MBufferingTypesSupportedObserver, + public CParentIntfc + { + public: + /** + * Function to Create the Object. + * @param aObserver Observer to callback the Event. + */ + CClientDataBufferSource(); + + /** + * Destructor. + */ + ~CClientDataBufferSource(); + + /** + * Post Contructor. This is to Support the new type of Construction + * of the Object. Notice there is no Two phased Constructor in this class + */ + TInt PostConstructor(); + + // From MControl begins + /** + * From MControl. + * Adds the Observer to this Object + * @since S60 v3.2 + * @param aObserver Client which set the Observer. + */ + TInt AddObserver( MControlObserver& aObserver ); + /** + * From MControl. + * Removes the Observer to this Object + * @since S60 v3.2 + * @param aObserver Client which set the Observer. + */ + TInt RemoveObserver( MControlObserver& aObserver ); + /** + * From MControl. + * Returns the Type of this Object. + * request and that it is now outstanding + * @since S60 v3.2 + */ + TUid Type(); + /** + * From MControl. + * Returns the Control Type of this Object. + * + * @since S60 v3.2 + */ + TControlType ControlType(); + // From MControl ends + + // From MSourceControl begins + /** + * From MSourceControl. + * Returns the Size in Bytes of the Source. + * Since this is DBS, the size represents the Total + * data size which will be passed by the Client to + * the Source + * @since S60 v3.2 + * @param aSize Size returned by the Source. + */ + TInt GetSize( TUint& aSize ); + /** + * From MSourceControl. + * Returns the Mime Type of the Data for which + * the Source is initialized. + * @since S60 v3.2 + * @param aMimeType MimeType returned by the Source. + */ + TInt GetMimeType( TDes8& aMimeType ); + /** + * From MSourceControl. + * Closes the Source. + * + * @since S60 v3.2 + */ + TInt Close(); + // From MSourceControl ends + + // From MDataBufferSource begins + /** + * From MDataBufferSource. + * Opens the Source with the mimetype and HeaderData + * + * @since S60 v3.2 + * @param aMimeType MimeType used to Configure the Source. + * @param aHeaderData HeaderData to Configure the Source. + */ + TInt Open( TDesC8& aMimeType , MDataBuffer& aHeaderData ); + /** + * From MDataBufferSource. + * Returns the minimum buffersize the Source needs. + * + * @since S60 v3.2 + * @param aBufferSize Returns the Minimum BufferSize the Source needs. + */ + TInt GetMinimumBufferSize( TUint& aBufferSize ); + /** + * From MDataBufferSource. + * Sets the Size of the Data which the Client intends to send + * + * @since S60 v3.2 + * @param aBufferSize Sets the Size of the Data which the Client + intends to Send to the Source + */ + TInt SetSize( TUint aSize ); + /** + * From MDataBufferSource. + * Writes the Buffer to the ServerSide Source + * + * @since S60 v3.2 + * @param aBuffer Buffer that needs to be passed to the ServerSide Source + */ + TInt WriteData( MDataBuffer& aBuffer ); + /** + * From MDataBufferSource. + * Tries to Empty the Buffers on the ServerSide Source + * + * @since S60 v3.2 + */ + TInt EmptyBuffers(); + /** + * From MDataBufferSource. + * Returns the Buffering Configuration of the ServerSide Source + * + * @since S60 v3.2 + * @param aConfig Returns the Buffering Configuration of the Source. + */ + TInt GetBufferingConfig(TBufferingConfig& aConfig); + /** + * From MDataBufferSource. + * Sets the Buffering Configuration of the ServerSide Source + * + * @since S60 v3.2 + * @param aConfig Sets the Buffering Configuration of the Source. + */ + TInt SetBufferingConfig(TBufferingConfig aConfig); + /** + * From MDataBufferSource. + * Returns the BitRate of the Source + * the Source is initialized. + * + * @since S60 v3.2 + * @param aRate Returns the BitRate of the Source. + */ + TInt GetBitRate(TUint& aRate); + /** + * From MDataBufferSource. + * Returns the Mime Type of the Data for which + * the Source is initialized. + * + * @since S60 v3.2 + * @param aArray Returns an Array of Buffering Types Supported + by the Source + */ + TInt GetBufferingTypesSupported(TArray& aArray); + /** + * From MDataBufferSource. + * Returns the Interface for querying Output Restrictions + * + * @since S60 v3.2 + * @param aInterfaceId Interfacae ID of the interface requested. + * @param aVer Version of the Interface Requested. + * @param aInterfaceImpl Implementation returned. + */ + TInt GetInterface( + TUid aInterfaceId, + TVersion& aVer, + TAny*& aInterfaceImpl ); + // From MDataBufferSource ends + + // From CSourceBase begins + /** + * From CSourceBase. + * Callback from the StreamControl when the Source is Created + * + * @since S60 v3.2 + * @param aCustomCommand Custom Command handle to send message to the Source + * @param aSourceHandle Handle Identifying the Source + */ + void ServerSourceCreated( MCustomCommand& aCustomCommand, + TMMFMessageDestination& aSourceHandle ); + /** + * From CSourceBase. + * Callback from the StreamControl when the ServerSource is Deleted + * + * @since S60 v3.2 + */ + void ServerSourceDeleted(); + /** + * From CSourceBase. + * Returns the Content Protection information to the Stream Control + * Currently returns KErrNotSupported + * @since S60 v3.2 + */ + TBool IsEncrypted(); + /** + * From CSourceBase. + * Returns the SourceUID + * + * @since S60 v3.2 + */ + TUid GetSourceUid(); + /** + * From CSourceBase. + * Returns the Header Data passed when the Client calls Open + * Currently return KErrNotSupported + * @since S60 v3.2 + */ + TInt GetHeaderData(TPtr& aPtr); + // From CSourceBase ends + + // From MBufferObserver begins + /** + * From MBufferObserver. + * Callback from the Source when the Buffer sent to the ServerSide + * is processed + * @since S60 v3.2 + * @param aItem item sent to the Server. + */ + void BufferProcessed( CDataBufferQueueItem* aItem ); + void HandleCancel( CDataBufferQueueItem& aItem ); + // From MBufferObserver ends + + // From MBufferingTypesSupportedObserver begins + /** + * From MBufferingTypesSupportedObserver. + * Callback from the Source when the Buffering Types Support changes + * @since S60 v3.2 + * @param aItem item sent to the Server. + */ + void BufferingTypesSupportedChanged(); + + + // DRM information + /** + * Sets the DRM Type of Data which will be sent + * @since S60 v3.2 + * @param aDRMType DRM Type data sent. + */ + TInt SetDRMType( TDRMType aDRMType ); + /** + * Gets the DRM Type set by the Client before + * @since S60 v3.2 + * @param aDRMType DRM Type set by the Client before. + */ + TInt GetDRMType( TDRMType& aDRMType ); + /** + * Appends the Output Device to the List + * @since S60 v3.2 + * @param aOutputDevice Output Device to be added to the List + */ + TInt AppendAllowedOutputDevice( TDRMAllowedOutputDevice aOutputDevice ); + /** + * Removes the Output Device from the List + * @since S60 v3.2 + * @param aOutputDevice Device to be removed from the List. + */ + TInt RemoveAllowedOutputDevice( TDRMAllowedOutputDevice aOutputDevice ); + /** + * Gets the Allowed Output Device Count + * @since S60 v3.2 + * @param aCount OutputDevice Count + */ + TInt GetAllowedOutputDeviceCount( TInt& aCount ); + /** + * Gets the Output Device in the List from the Index + * @since S60 v3.2 + * @param aIndex Index in the List + * @param aOutputDevice Returned OutputDevice + */ + TInt GetAllowedOutputDevice( TInt aIndex, TDRMAllowedOutputDevice& aOutputDevice ); + /** + * Reset the DRM Config and empty the List + * @since S60 v3.2 + */ + TInt ResetDRMConfig(); + /** + * Commit the Allowed Output Device List to the Server Side Source + * @since S60 v3.2 + */ + TInt CommitDRMConfig(); + + private: + void EmptyQueue(); + void DoCommitDRMConfigL(); + + private: + // Variable to determine if the ServerSource exists + TBool iServerSourceExists; + // Variable to Hold the Mime Type sent by the Client + HBufC8* iMimeType; + // Queue of data buffers from client + TSglQue* iAudioBufferQueue; + // Variable to Stote the Source Size set by the Client + TUint iSourceSize; + // Handle to send messages to the Server Side Source + MCustomCommand* iCustomCommand; + // Handle Identifying the Server Side Source + TMMFMessageDestination iSourceHandle; + // Package of the Source Handle + TMMFMessageDestinationPckg iSourceHandlePckg; + + // Event Notifier that notifies the Client + CEventNotifier* iEventNotifier; + // Active Object that monitors the Support changed. + CBufTypeSupEventAO* iBufTypeSupportEvent; + // if Fixed Duration Support is valid + TBool iFixedDurationSupport; + /* Attributes to hold DRM Info */ + // Holds DRM Type set by client + TDRMType iDRMType; + // Holds list of allowed output devices set by client + RArray iAllowedOutputDeviceList; + // Holds the next buffer sequence number starting from 0 + TUint iBufferSeqNum; + }; + } // namespace multimedia + +#endif // C_CCLIENTDATABUFFERSOURCE_H + +// End of file