--- a/vtprotocolplugins/VideoSource/inc/CVSDataSourceImp.h Tue Jan 26 12:01:21 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,577 +0,0 @@
-/*
-* 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: Video Source subsystem.
-*
-*/
-
-
-#ifndef CVSDATASOURCEIMP_H
-#define CVSDATASOURCEIMP_H
-
-// INCLUDE FILES
-
-#include "CApiVideoSource.h"
-
-// FORWARD DECLARATIONS
-
-class CVSDataSourceImp;
-class CVSMMFDataBuffer;
-
-// CLASS DECLARATION
-
-/**
-* Active Object that handles switch of active provider for data source.
-*
-* @lib videosource.lib
-*/
-class CVSProviderSwitchAO : public CActive
- {
- public: // Constructors and destructor
-
- /**
- * Leave safe static constructor.
- * @param "aDataSourceImp" Pointer to VSDataSourceImp instance.
- */
- static CVSProviderSwitchAO* NewL( CVSDataSourceImp* aDataSourceImp );
-
- /**
- * Destructor.
- */
- ~CVSProviderSwitchAO();
-
- public: // New functions
-
- /**
- * Adds this instance to calling thread's active scheduler.
- * @param "aEventHandler" Reference to asynchronous event handler. This
- * will be given to provider that will be switched as active provider
- * in SourceThreadLogon() call.
- * @return Possible error code.
- */
- TInt ThreadLogon( MAsyncEventHandler& aEventHandler );
-
- /**
- * Removes this instance from calling thread's active scheduler.
- */
- void ThreadLogoff();
-
- /**
- * Initializes provider switch.
- * @param "aNewProvider" Pointer to CVSDataProvider instance that will
- * be set as active provider.
- */
- void InitiateProviderSwitch( CVSDataProvider* aNewProvider );
-
- /**
- * Return reference to event handler.
- */
- inline MAsyncEventHandler& EventHandler() { return *iEventHandler; }
-
- /**
- * Return pointer to new provider.
- */
- inline CVSDataProvider*& NewDataProvider() { return iNewProvider; }
-
- public: // Functions from base classes
-
- protected: // New functions
-
- protected: // Functions from base classes
-
- private: // New functions
-
- /**
- * Constructor.
- * @param "aDataSourceImp" Pointer to VSDataSourceImp instance.
- */
- CVSProviderSwitchAO( CVSDataSourceImp* aDataSourceImp );
-
- /**
- * Leave safe construtor
- */
- void ConstructL();
-
- private: // Functions from base classes
-
- /**
- * From CActive. See CActive for description.
- */
- void RunL();
-
- /**
- * From CActive. See CActive for description.
- */
- void DoCancel();
-
- private: // New functions
-
- /**
- * Signals this active object with given error code.
- * @param "aError" Error code with which active object will be signalled.
- */
- void Signal( TInt aError );
-
- public: // Data
-
- protected: // Data
-
- private: // Data
-
- // Pointer to data source implementation.
- CVSDataSourceImp* iDataSourceImp; // not owned
-
- // Pointer to data provider that will be switched.
- CVSDataProvider* iNewProvider; // not owned
-
- // Id of thread whose active scheduler this instance is added into.
- TThreadId iThreadId;
-
- // Pointer to async handler that will be given to the new provider in
- // SourceThreadLogon() call.
- MAsyncEventHandler* iEventHandler; // not owned
-
- // Critical section for switch handling
- RCriticalSection iSwitchCs;
-
- };
-
-/**
-* Data source observer active object. This AO is needed because we want to
-* call vsProviderSwitchDone() callback
-* in correct thread context.
-*
-* @lib videosource.lib
-*/
-class CVSDataSourceObserverAO : public CActive
- {
- public: // Constructors and destructor
-
- /**
- * Constructor.
- */
- CVSDataSourceObserverAO();
-
- /**
- * Destructor.
- */
- ~CVSDataSourceObserverAO();
-
- public: // New functions
-
- /**
- * This method is called when CVSProviderSwitchAO has completed provider
- * switching.
- * @param "aObserver" Observer that will signalled when RunL() is called.
- * @param "aOldProvider" Pointer to provider that was active before the
- * provider switch was done.
- */
- void vsProviderSwitchDone(
- MVSDataSourceObserver& aObserver,
- CVSDataProvider* aOldProvider );
-
- public: // Functions from base classes
-
- protected: // New functions
-
- protected: // Functions from base classes
-
- private: // New functions
-
- private: // Functions from base classes
-
- /**
- * From CActive. See CActive for description.
- */
- void RunL();
-
- /**
- * From CActive. See CActive for description.
- */
- void DoCancel();
-
- private: // New functions
-
- /**
- * Signals this active object with given error code.
- * @param "aError" Error code with which active object will be signalled.
- */
- void Signal( TInt aError );
-
- public: // Data
-
- protected: // Data
-
- private: // Data
-
- // Data source observer pointer
- MVSDataSourceObserver* iObserver; // not owned
-
- // Previous active provider
- CVSDataProvider* iOldProvider; // not owned
-
- // Thread Id whose active scheduler this instance is added into
- TThreadId iThreadId;
- };
-
-
-
-/**
-* Internal implementation of data source. This class is inherited from
-* public data source interface. Some of the implemented MVTVideoSource,
-* MVTVideoInput calls are forwarded to active data provider,
-* some are processed here.
-*
-* @lib videosource.lib
-*/
-class CVSDataSourceImp : public CVSDataSource
- {
- public: // Constructors and destructor
-
- /**
- * Static factory function to create instance of this class.
- * @exception Can leave with one of the system wide error codes.
- * @return Pointer to new instance.
- */
- static CVSDataSourceImp* NewSourceL();
-
- public: // New functions
-
- public: // Functions from base classes
-
- /**
- * Switch active provider for source.
- * @param "aNewProvider" Pointer to provider instance.
- * @exception Can leave with one of the system wide error codes.
- */
- void SwitchDataProviderL( CVSDataProvider* aNewProvider );
-
- /**
- * @see CVSDataSource::PauseSending
- */
- void PauseSending();
-
- /**
- * @see CVSDataSource::ResumeSending
- */
- void ResumeSending();
-
- public: // Constructors and destructor
-
- /**
- * Destructor.
- */
- ~CVSDataSourceImp();
-
- public: // Functions from base classes
-
- /**
- * From MVTVideoSource / MDataSource. See MDataSource for description.
- */
- virtual void FillBufferL(
- CMMFBuffer* aBuffer,
- MVTVideoSink* aConsumer,
- TMediaId aMediaId );
-
- /**
- * From MVTVideoSource / MDataSource. See MDataSource for description.
- */
- void BufferEmptiedL( CMMFBuffer* aBuffer );
-
- /**
- * From MVTVideoSource / MDataSource. See MDataSource for description.
- */
- virtual TBool CanCreateSourceBuffer();
-
- /**
- * From MVTVideoSource / MDataSource. See MDataSource for description.
- */
- virtual CMMFBuffer* CreateSourceBufferL(
- TMediaId aMediaId,
- TBool &aReference );
-
- /**
- * From MVTVideoSource / MDataSource. See MDataSource for description.
- */
- virtual CMMFBuffer* CreateSourceBufferL(
- TMediaId aMediaId,
- CMMFBuffer& aSinkBuffer,
- TBool &aReference );
-
- /**
- * From MVTVideoSource / MDataSource. See MDataSource for description.
- */
- virtual TInt SourceThreadLogon( MAsyncEventHandler& aEventHandler );
-
- /**
- * From MVTVideoSource / MDataSource. See MDataSource for description.
- */
- virtual void SourceThreadLogoff();
-
- /**
- * From MVTVideoSource / MDataSource. See MDataSource for description.
- */
- virtual TInt SourcePrimeL();
-
- /**
- * From MVTVideoSource / MDataSource. See MDataSource for description.
- */
- virtual TInt SourcePlayL();
-
- /**
- * From MVTVideoSource / MDataSource. See MDataSource for description.
- */
- virtual TInt SourcePauseL();
-
- /**
- * From MVTVideoSource / MDataSource. See MDataSource for description.
- */
- virtual TInt SourceStopL();
-
- protected: // New functions
-
- protected: // Functions from base classes
-
- /**
- * From MDataSource. See MDataSource for description.
- */
- virtual void ConstructSourceL(const TDesC8& aInitData);
-
- public: // Functions from base classes
-
-
- virtual const RArray<TDesC8* >& GetMultimediaTypesL() const;
-
-
-
- public: // Functions from base classes
-
- /**
- * From MVTVideoInput. See MVTVideoInput for description.
- */
- virtual void SetFormatL( const TDesC8& aFormat );
-
- /**
- * From MVTVideoInput. See MVTVideoInput for description.
- */
- virtual void SetFrameRateL( TReal32 aFrameRate );
-
- /**
- * From MVTVideoInput. See MVTVideoInput for description.
- */
- virtual void SetVideoFrameSizeL( const TSize& aSize );
-
- /**
- * From MVTVideoInput. See MVTVideoInput for description.
- */
- virtual void GetVideoFrameSizeL( TSize& aSize ) const;
-
- private: // New functions
-
- /**
- * Starts provider switching. Switching must be done in correct thread
- * context.
- * @param "aNewProvider" Pointer to provider that will be switched as
- * active.
- * @param "aEventHandler" Reference to asynchronous event handler.
- * @exception Can leave with one of the system wide error codes.
- */
- void DoProviderSwitchL(
- CVSDataProvider* aNewProvider,
- MAsyncEventHandler& aEventHandler );
-
- /**
- * Test if provider switch operation is ongoing.
- * @return ETrue if provider switch operation was suspended because
- * buffers were not free.
- */
- inline TBool SwitchPending() { return iSwitchPending; };
-
- /**
- * Notifies provider observer about error occurred in provider switch.
- * @param "aError" Standard Symbian error code
- */
- void ProviderSwitchError( TInt aError );
-
- private: // Constructors and destructor
-
- /**
- * Constructor.
- */
- CVSDataSourceImp();
-
- private: // Functions from base classes
-
- /**
- * From MVSBufferPool. See MVSBufferPool for description.
- */
- virtual CVSMMFDataBuffer* GetBufferL( TBool aRemove );
-
- /**
- * From MVSBufferPool. See MVSBufferPool for description.
- */
- virtual void FreeBufferL( CVSMMFDataBuffer* aBuffer );
-
- private: // New functions
-
- /**
- * Add buffer to free buffer pool without locking queue cs.
- * @return One of the system wide error codes or KErrNone if no error
- * happens.
- * @param "aBuffer" A pointer to buffer to add to free buffer pool.
- * If buffer pointer is found from active buffer pool it is first
- * removed from there.
- */
- TInt FreeBufferNoWait( CVSMMFDataBuffer* aBuffer );
-
- public: // Data
-
- protected: // Data
-
- private: // Data
-
- // Data source state
- enum TDataSourceState
- {
- EStopped,
- EPrimed,
- EPlaying
- };
-
- // Data source method call flags
- enum TCallFlags
- {
- // SetVideoFrameSizeL() was called
- ESetSizeCalled = ( 1 << 0 ),
-
- // SetFrameRateL() was called
- ESetFrameRateCalled = ( 1 << 1 ),
-
- // SetFormatL() was called
- ESetFormatCalled = ( 1 << 2 )
- };
-
- // Data source state
- TDataSourceState iDSState;
-
- // Call flags
- TUint32 iCallFlags;
-
-
- // Provider switch AO pointer
- CVSProviderSwitchAO* iProviderSwitchAO;
-
- // Data source observer AO pointer
- CVSDataSourceObserverAO* iDataSourceObserverAO; // owned
-
- // Format heap descriptor pointer
- HBufC8* iFormat; // owned
-
- // Frame rate
- TReal32 iFrameRate;
-
- // Frame size
- TSize iSize;
-
- // SourceThreadLogon() called flag
- TBool iThreadLogonCalled;
-
- // Array to return in response to GetMultimediaTypesL call
- // (supported video frame formats).
- RArray<TDesC8*> iProtoMimeTypes;
-
- // Video frame formats supported by all providers.
- CDesC8Array* iSupportedVideoFormats;
-
- // Video frame sizes for each format supported by all providers
- class TVSFrameSize
- {
- public:
- TPtrC8 iFormat; // Primary key, 1st field
- TSize iSize;
- };
- RArray<TVSFrameSize> iSupportedVideoSizes;
-
- // Video frame rates for each format and frame size supported by all
- // providers.
- class TVSFrameRate
- {
- public:
- TPtrC8 iFormat; // Primary key, 1st field
- TSize iSize; // Primary key, 2nd field
- TReal32 iRate;
- };
-
- RArray<TVSFrameRate> iSupportedFrameRates;
-
- private: // Data
-
- // Needs to be friend
- friend class CVSProviderSwitchAO;
-
- // MIME type holder
- TBuf8<128> iYuv420PlanarDesc;
-
- private: // Data
-
- // Critical section for queue handling
- RCriticalSection iQueueCs;
-
- // Critical section for queue handling
- RCriticalSection iPauseCs;
-
- // Queue for buffers that are free for use
- RPointerArray<CVSMMFDataBuffer> iFreeQueue;
-
- // Queue for buffers that are being used by the Protocol
- RPointerArray<CVSMMFDataBuffer> iActiveQueue;
-
- // All buffers allocated by CreateSourceBufferL()
- RPointerArray<CVSMMFDataBuffer> iAllocatedBuffers;
-
- // Number of buffer requests by CreateSourceBufferL()
- TInt iRequestedBufferCount;
-
- // Set to ETrue when protocol is initializing (From
- // SourceThreadLogon to SourcePlayL)
- TBool iProtoInitOngoing;
-
- // Set to ETrue if provider switch operation was suspended because
- // protocol was initializing
- TBool iProviderSwitchRequestDuringProtoInit;
-
- // Temporary save pointer, not owned
- CVSDataProvider* iNewProvider;
-
- // Critical section for synchronizing access to
- // iProviderSwitchRequestDuringProtoInit and iProtoInitOngoing
- RCriticalSection iProtoInitCS;
-
- // Set to ETrue during DoProviderSwitchL
- TBool iSwitchOngoing;
-
- // Set to ETrue when DoProviderSwitchL is needed
- TBool iSwitchPending;
-
- // Set to ETrue when video sending is paused to Protocol
- // Guarded by: iPauseCs
- TBool iSendingPaused;
-
- // If true then FBS was started during SourceThreadLogon() and
- // thus should be stopped in SourceThreadLogoff()
- TBool iFbsStarted;
- };
-
-#endif // CVSDATASOURCEIMP_H
-
-// End of File