williamr@2: // Copyright (c) 2001-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@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.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: // williamr@2: williamr@2: #ifndef __MMFDATAPATHPROXY_H__ williamr@2: #define __MMFDATAPATHPROXY_H__ williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: #define KMMFDataPathProxyVersion TVersion(8,0,0) williamr@2: williamr@2: /** williamr@2: The amount of time that is allowed for the datapath to close down before the its thread is killed. williamr@2: */ williamr@2: #define KMMFDataPathProxyShutdownTimeout TTimeIntervalMicroSeconds32(10000000) williamr@2: williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: Mixin class that the user of the class CMMFDataPathEventMonitor must derive from. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: class MMMFDataPathEventMonitorObserver williamr@2: { williamr@2: public: williamr@2: williamr@2: /** williamr@2: Handles an event that has been generated by the datapath. williamr@2: williamr@2: Called by CMMFDataPathEventMonitor::RunL(). williamr@2: williamr@2: @param aEvent williamr@2: The event to be handled. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: virtual void HandleEvent(const TMMFEvent& aEvent) = 0; williamr@2: }; williamr@2: williamr@2: class RMMFDataPathProxy; //forward reference williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: Active object utility class that can be used to monitor a datapath that is running in its own williamr@2: thread for events. If an event occurs, the client will be notified via the williamr@2: MMMFDataPathEventMonitorObserver interface. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: class CMMFDataPathEventMonitor : public CActive williamr@2: { williamr@2: public: williamr@2: williamr@2: IMPORT_C static CMMFDataPathEventMonitor* NewL(MMMFDataPathEventMonitorObserver& aObserver, williamr@2: RMMFDataPathProxy& aMMFDataPathProxy); williamr@2: williamr@2: IMPORT_C ~CMMFDataPathEventMonitor(); williamr@2: williamr@2: IMPORT_C void Start(); williamr@2: williamr@2: IMPORT_C void RunL(); williamr@2: protected: williamr@2: williamr@2: void DoCancel(); williamr@2: private: williamr@2: williamr@2: /** williamr@2: Constructs a datapath event monitor object. williamr@2: williamr@2: @param aObserver williamr@2: A reference to the observer of the active object. The observer will be williamr@2: notified when an event occurs. williamr@2: @param aMMFDataPathProxy williamr@2: A reference to the datapath proxy class. williamr@2: williamr@2: @since 7.0s williamr@2: */ williamr@2: CMMFDataPathEventMonitor(MMMFDataPathEventMonitorObserver& aObserver, williamr@2: RMMFDataPathProxy& aMMFDataPathProxy); williamr@2: private: williamr@2: MMMFDataPathEventMonitorObserver& iObserver; williamr@2: RMMFDataPathProxy& iMMFDataPathProxy; williamr@2: TMMFEventPckg iEventPckg; williamr@2: }; williamr@2: williamr@2: /** williamr@2: @publishedAll williamr@2: @released williamr@2: williamr@2: Proxy class used to create a datapath in a new subthread. williamr@2: */ williamr@2: class RMMFDataPathProxy : public RMMFSubThreadBase williamr@2: williamr@2: { williamr@2: public: williamr@2: williamr@2: /** williamr@2: Constuctor. williamr@2: */ williamr@2: RMMFDataPathProxy() : RMMFSubThreadBase(KMMFDataPathProxyShutdownTimeout) {}; williamr@2: williamr@2: IMPORT_C TInt CreateSubThread(); williamr@2: williamr@2: IMPORT_C TInt LoadDataPath(); williamr@2: williamr@2: IMPORT_C TInt LoadDataPath(TMediaId aMediaId); williamr@2: williamr@2: IMPORT_C TInt LoadDataPath(TUid aCodecUid); williamr@2: williamr@2: IMPORT_C TInt LoadDataPath(TUid aCodecUid, TMediaId aMediaId); williamr@2: williamr@2: IMPORT_C TInt AddDataSource(MDataSource* aSource); williamr@2: williamr@2: IMPORT_C TInt AddDataSink(MDataSink* aSink); williamr@2: williamr@2: IMPORT_C TInt Prime(); williamr@2: williamr@2: IMPORT_C TInt Play(); williamr@2: williamr@2: IMPORT_C TInt Pause(); williamr@2: williamr@2: IMPORT_C TInt Stop(); williamr@2: williamr@2: IMPORT_C TInt GetPosition(TTimeIntervalMicroSeconds& aPosition) const; williamr@2: williamr@2: IMPORT_C TInt SetPosition(const TTimeIntervalMicroSeconds& aPosition); williamr@2: williamr@2: IMPORT_C TInt SetPlayWindow( const TTimeIntervalMicroSeconds& aStart, const TTimeIntervalMicroSeconds& aEnd ) ; williamr@2: williamr@2: IMPORT_C TInt ClearPlayWindow() ; williamr@2: williamr@2: IMPORT_C TInt State( TInt& aState ) ; williamr@2: williamr@2: IMPORT_C void Close(); williamr@2: }; williamr@2: williamr@4: #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS williamr@4: #include williamr@4: #endif williamr@2: williamr@2: #endif williamr@4: