--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vtprotocolplugins/VideoSource/inc/CApiVideoSource.h Thu Jul 22 16:34:21 2010 +0100
@@ -0,0 +1,922 @@
+/*
+* 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 CAPIVIDEOSOURCE_H
+#define CAPIVIDEOSOURCE_H
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <ecam.h>
+#include <mmfutilities.h>
+#include <mmfdatasource.h>
+#include <mvtprotocolhandler.h>
+#include <ecamimageprocessing.h>
+
+// FORWARD DECLARATIONS
+
+class MVSControllerObserver;
+class MVSDataSourceObserver;
+class MVSDataProviderObserver;
+class CVSDataSource;
+class CVSDataProvider;
+class TVSDataProviderInfo;
+class CVSDataSourceImp;
+class CProviderErrorNotifierAO;
+
+class MFrameBuffer;
+class RWsSession;
+class CWsScreenDevice;
+class RWindowBase;
+class CFbsBitmap;
+class MDataSink;
+class MDataSource;
+class MAsyncEventHandler;
+class TMMFPrioritySettings;
+class TMMFMessage;
+class CDesC8Array;
+class CVSMMFDataBuffer;
+
+// Camera lost during VT error
+const TInt KVsErrCameraNoLongerReserved = 666;
+// CLASS DECLARATION
+
+/**
+* Initialization settings class for still image provider.
+*
+* @lib videosource.lib
+*/
+class TVSStillImageDataProviderParams
+ {
+ public:
+ /**
+ * Enumeration that defines different initialization
+ * types.
+ */
+ enum TInitialize
+ {
+ /** Created as blank image */
+ EInitializeAsBlankImage,
+ /** Image will be load from General Settings */
+ EInitializeFromGeneralSettings,
+ /** Image will be from file */
+ EInitializeFromFile,
+ /** Imge will be load from phone server */
+ EInitializeAsDefaultStillImage
+ };
+
+ public:
+ /**
+ * Constructor, set iInitialize to EInitializeAsBlankImage. iFileName
+ * is initialized as an empty descriptor.
+ */
+ inline TVSStillImageDataProviderParams();
+
+ /**
+ * Constructor. iFileName is initialized as an empty descriptor.
+ * @param aInitialize Defines how provider must be initialized.
+ */
+ inline TVSStillImageDataProviderParams( const TInitialize aInitialize );
+
+ /**
+ * Constructor. iInitialize is set to EInitializeFromFile.
+ * @param aFileName Name of the file from which this instance will
+ * be initialized.
+ */
+ inline TVSStillImageDataProviderParams( const TFileName& aFileName );
+
+ public:
+ // Initialization type
+ TInitialize iInitialize;
+
+ // Filename for EInitializeFromFile
+ TFileName iFileName;
+ };
+
+typedef TPckgBuf< TVSStillImageDataProviderParams > TVSStillImageDataProviderParamsBuf;
+
+/**
+* An interface to access free MMF buffers.
+*
+* @lib videosource.lib
+*/
+class MVSBufferPool
+ {
+ public:
+
+ /**
+ * Pure virtual function to get next free buffer from free buffer pool.
+ * @param "aRemove" Boolean flag. If ETrue buffer will be removed from
+ * the pool.
+ * @exception Can leave with one of the system wide error codes.
+ * @return Returns pointer to next available buffer in free buffers
+ * queue or NULL if no buffers in queue are available.
+ */
+ virtual CVSMMFDataBuffer* GetBufferL( TBool aRemove ) = 0;
+
+ /**
+ * Frees buffer that was previously got using GetBufferL().
+ * @param "aBuffer" Buffer to be freed.
+ * @exception Can leave with one of the system wide error codes.
+ */
+ virtual void FreeBufferL( CVSMMFDataBuffer* aBuffer ) = 0;
+ };
+
+/**
+* An interface to a controller callback functions.
+*
+* @lib videosource.lib
+*/
+class MVSControllerObserver
+ {
+ public:
+
+ /**
+ * Called when provider count has been changed.
+ * @param "aAttached" ETrue if provider attached, else EFalse.
+ */
+ virtual void vsProvidersChanged( TBool aAttached ) = 0;
+ };
+
+/**
+* Controller interface.
+*
+* @lib videosource.lib
+*/
+class CVSController : public CBase
+ {
+ public: // Constructor and destructor
+
+ /**
+ * Static factory function to create instance of this class.
+ * @param "aObserver" Pointer to controller observer.
+ * @exception Can leave with one of the system wide error codes.
+ * @return Pointer to new instance.
+ */
+ IMPORT_C static CVSController* NewL( MVSControllerObserver* aObserver );
+
+ /**
+ * Pure virtual function to create data source instance.
+ * @param "aObserver" Pointer to data source observer.
+ * @exception Can leave with one of the system wide error codes.
+ * @return Pointer to new data source instance.
+ */
+ virtual CVSDataSource* CreateDataSourceL(
+ MVSDataSourceObserver* aObserver ) = 0;
+
+ public: // New functions
+
+ /**
+ * Pure virtual function to return provider count and provider index.
+ * @return Number of providers available. Count also acts as zero based
+ * provider index.
+ */
+ virtual TInt ProvidersAvailable() = 0;
+
+ /**
+ * Pure virtual function to return provider information.
+ * @param "aProviderIndex" Index of the provider to return information
+ * for.
+ * @param "aInfo" Reference to the variable where the provider
+ * information is copied.
+ * @exception Can leave with one of the system wide error codes.
+ */
+ virtual void ProviderInfoL(
+ TInt aProviderIndex,
+ TVSDataProviderInfo& aInfo ) = 0;
+
+ /**
+ * Pure virtual function to create provider instance.
+ * @param "aProviderIndex" Index of the provider to be created.
+ * @param "aObserver" Pointer to provider observer.
+ * @param "aPool" Pointer to data MVSBufferPool that gives buffer to
+ * data provider.
+ * @exception Can leave with one of the system wide error codes.
+ * @return Pointer to new provider instance.
+ */
+ virtual CVSDataProvider* CreateDataProviderL(
+ TInt aProviderIndex,
+ MVSDataProviderObserver* aObserver,
+ MVSBufferPool* aPool ) = 0;
+
+ public: // Constructor and destructor
+
+ public: // Functions from base classes
+
+ protected: // New functions
+
+ /**
+ * C++ default constructor.
+ */
+ CVSController();
+
+ /**
+ * Inliner to return reference to the controller observer.
+ * @return Reference to the controller observer.
+ */
+ inline MVSControllerObserver& Observer() const;
+
+ protected: // Constructor and destructor
+
+ /**
+ * 2nd phase constructor.
+ * @param "aObserver" Pointer to controller observer
+ * @exception Can leave with one of the system wide error codes.
+ */
+ virtual void ConstructL( MVSControllerObserver* aObserver ) = 0;
+
+ protected: // Functions from base classes
+
+ public: // Data
+
+ protected: // Data
+
+ // Pointer to controller observer
+ MVSControllerObserver* iObserver;
+
+ private: // Data
+
+ };
+
+/**
+* An interface to a provider callback functions.
+*
+* @lib videosource.lib
+*/
+class MVSDataProviderObserver
+ {
+ public:
+
+ /**
+ * Called when an error occurred in provider.
+ * @param "aError" of the system wide error codes.
+ */
+ virtual void vsProviderError( TInt aError ) = 0;
+
+ /**
+ * Called when provider is initalized.
+ */
+ virtual void vsProviderReady() = 0;
+
+ /**
+ * Called when provider has view finder bitmap ready.
+ * @param "aFrame" Reference to the view finder bitmap.
+ */
+ virtual void vsViewFinderFrameReady( CFbsBitmap& aFrame ) = 0;
+ };
+
+/**
+* Extension to standard ECam TCameraInfo class.
+*
+* @lib videosource.lib
+*/
+class TVSDataProviderInfo : public TCameraInfo
+ {
+ public: // Data
+
+ // ETrue if the Freeze() is supported.
+ TBool iFreezeSupported;
+
+ // Pointer to extension information.
+ TAny* iExtension;
+
+ // A bitfield of suported colortones
+ TUint32 iSupportedColorTones;
+ };
+
+/**
+* Provider interface.
+*
+* @lib videosource.lib
+*/
+class CVSDataProvider : public CBase
+ {
+ public: // Constructor and destructor
+
+ /**
+ * Static factory function to create instance of this class.
+ * @param "aProviderIndex" Index of the provider to be created.
+ * @param "aObserver" Pointer to data provider observer.
+ * @param "aPool" Pointer to data MVSBufferPool that gives buffer to
+ * data provider.
+ * @exception Can leave with one of the system wide error codes.
+ * @return Pointer to new instance.
+ */
+ static CVSDataProvider* NewL(
+ TInt aProviderIndex,
+ MVSDataProviderObserver* aObserver,
+ MVSBufferPool* aPool );
+
+ /**
+ * Destructor.
+ */
+ ~CVSDataProvider();
+
+ public: // New functions
+
+ /**
+ * Static function get provider count and provider index.
+ * @return Number of providers available. Count also acts as zero based
+ * provider index.
+ */
+ static TInt ProvidersAvailable();
+
+ /**
+ * Static function to return provider information.
+ * @param "aProviderIndex" Index of the provider to return information
+ * for.
+ * @param "aInfo" Reference to the variable to where the provider
+ * information is copied.
+ * @exception Can leave with one of the system wide error codes.
+ */
+ static void ProviderInfoL(
+ TInt aProviderIndex,
+ TVSDataProviderInfo& aInfo );
+
+ /**
+ * Pure virtual function to initialize provider.
+ * @param "aInitParams" Reference to the initialization parameters.
+ * @exception Can leave with one of the system wide error codes.
+ */
+ virtual void InitializeL( const TDesC8& aInitParams ) = 0;
+
+ /**
+ * Pure virtual function to cancel initialization of provider.
+ */
+ virtual void CancelInitializing() = 0;
+
+ /**
+ * Pure virtual function to return digital zoom factor.
+ * @return Digital zoom factor.
+ */
+ virtual TInt DigitalZoomFactor() const = 0;
+
+ /**
+ * Pure virtual function to set digital zoom factor.
+ * @param "aDigitalZoomFactor" Digital zoom factor.
+ * @exception Can leave with one of the system wide error codes.
+ */
+ virtual void SetDigitalZoomFactorL( TInt aDigitalZoomFactor = 0 ) = 0;
+
+ /**
+ * Pure virtual function to start view finder bitmaps.
+ * @param "aSize" Size of the returned view finder bitmap.
+ * @exception Can leave with one of the system wide error codes.
+ */
+ virtual void StartViewFinderBitmapsL( TSize& aSize ) = 0;
+
+ /**
+ * Pure virtual function to start view finder bitmaps.
+ * @param "aSize" Size of the returned view finder bitmap.
+ * @param "aClipRect" Required clip rectangle.
+ * @exception Can leave with one of the system wide error codes.
+ */
+ virtual void StartViewFinderBitmapsL(
+ TSize& aSize,
+ TRect& aClipRect ) = 0;
+
+ /**
+ * Pure virtual function to start view finder bitmaps using direct
+ * screen access.
+ * @param "aWs" Window server session.
+ * @param "aScreenDevice" Screen device.
+ * @param "aWindow" Displayable window.
+ * @param "aScreenRect" Portion of the screen to which view finder data
+ * is to be transferred.
+ * @exception Can leave with one of the system wide error codes.
+ */
+ virtual void StartViewFinderDirectL(
+ RWsSession& aWs,
+ CWsScreenDevice& aScreenDevice,
+ RWindowBase& aWindow,
+ TRect& aScreenRect ) = 0;
+
+ /**
+ * Pure virtual function to start view finder bitmaps using direct
+ * screen access.
+ * @param "aWs" Window server session.
+ * @param "aScreenDevice" Screen device.
+ * @param "aWindow" Displayable window.
+ * @param "aScreenRect" Portion of the screen to which view finder data
+ * is to be transferred.
+ * @param "aClipRect" The rectangle to which the screen will be clipped.
+ * @exception Can leave with one of the system wide error codes.
+ */
+ virtual void StartViewFinderDirectL(
+ RWsSession& aWs,
+ CWsScreenDevice& aScreenDevice,
+ RWindowBase& aWindow,
+ TRect& aScreenRect,
+ TRect& aClipRect ) = 0;
+
+ /**
+ * Pure virtual function to test if view finder is active.
+ * @return ETrue if view finder active.
+ */
+ virtual TBool ViewFinderActive() const = 0;
+
+ /**
+ * Pure virtual function to stop view finder bitmaps.
+ */
+ virtual void StopViewFinder() = 0;
+
+ /**
+ * Pure virtual function to return provider information.
+ * @param "aInfo" Reference to the variable to where the provider
+ * information is copied.
+ */
+ virtual void ProviderInfo( TVSDataProviderInfo& aInfo ) = 0;
+
+ /**
+ * Used to switch between what the camera sees and what you would see
+ * if the device were a mirror.
+ * @param "aMirror" ETrue to set mirroring on, EFalse to set mirroring off.
+ * @exception May leave with KErrNotSupported.
+ */
+ virtual void SetViewFinderMirrorL( TBool aMirror ) = 0;
+
+ /**
+ * Gets whether view finder mirroring is active.
+ * @return ETrue if mirroring is set, EFalse if mirroring is not set.
+ */
+ virtual TBool ViewFinderMirror() const = 0;
+
+ /**
+ * Freezes video (i.e. starts sending the last frame until provider is
+ * unfrozen).
+ * @exception May leave with KErrNotSupported if freezing is not supported
+ * by the provider.
+ */
+ virtual void FreezeL() = 0;
+
+ /**
+ * Unfreezes video (i.e. starts sending actual frames).
+ * @exception May leave with KErrNotSupported if freezing
+ * is not supported
+ * by the provider.
+ */
+ virtual void UnfreezeL()= 0;
+
+ /**
+ * Gets whether freeze is active.
+ * @return ETrue if video is frozen, EFalse otherwise.
+ */
+ virtual TBool IsFrozen() const = 0;
+
+ /**
+ * Sets the contrast adjustment of the device.
+ * This must be in the range of -100 to +100 or EContrastAuto.
+ * May leave with KErrNotSupported if the specified contrast value
+ * is out of range.
+ * @since S60 v3.2
+ * @param aContrast
+ */
+ virtual void SetContrastL( TInt aContrast ) = 0;
+
+ /**
+ * Gets the currently set contrast value.
+ * @since S60 v3.2
+ * @param aContrast The currently set contrast value.
+ * @return indication if method succeed or not.
+ */
+ virtual TInt GetContrast( TInt& aContrast ) const = 0;
+
+ /**
+ * Sets the brightness adjustment of the device.
+ * This must be in the range of -100 to +100 or EBrightnessAuto.
+ * May leave with KErrNotSupported if the brightness adjustment
+ * is out of range.
+ * @since S60 v3.2
+ * @param aBrightness The required brightness adjustment.
+ */
+ virtual void SetBrightnessL( TInt aBrightness ) = 0;
+
+ /**
+ * Gets the currently set brightness adjustment value.
+ * @since S60 v3.2
+ * @param aBrightness The currently set brightness adjustment value.
+ * @return indication if method succeed or not.
+ */
+ virtual TInt GetBrightness( TInt& aBrightness ) const = 0;
+
+ /**
+ * Sets the white balance adjustment of the device.
+ * No effect if this is not supported, see
+ * TCameraInfo::iWhiteBalanceModesSupported.
+ * @since S60 v3.2
+ * @param aWhiteBalance The required white balance adjustment.
+ * @leave KErrNotSupported if the specified white balance adjustment
+ * is invalid.
+ */
+ virtual void SetWhiteBalanceL(
+ CCamera::TWhiteBalance aWhiteBalance = CCamera::EWBAuto) = 0;
+
+ /**
+ * Gets the currently set white balance adjustment value.
+ * @since S60 v3.2
+ * @param aWhiteBalance The currently set white balance adjustment value.
+ * @return indication if method succeed or not.
+ */
+ virtual TInt GetWhiteBalance(
+ CCamera::TWhiteBalance& aWhiteBalance ) const = 0;
+
+ /**
+ * Gives the current color tone setting value
+ * @since S60 v3.2
+ * @param aColorTone The currently set color tone adjustment value.
+ * @return indication if method succeed or not.
+ */
+ virtual TInt GetColorTone(
+ CCamera::CCameraImageProcessing::TEffect& aColorTone ) const = 0;
+
+ /**
+ * Sets color tone
+ * @since S60 v3.2
+ * @param aValue new color tone
+ */
+ virtual void SetColorToneL(
+ CCamera::CCameraImageProcessing::TEffect aValue ) = 0;
+
+ public: // Functions from base classes
+
+ protected: // New functions
+
+ protected: // Functions from base classes
+
+ private: // New functions
+
+ /**
+ * See MDataSource for description.
+ */
+ virtual void FillBufferL(
+ CMMFBuffer* aBuffer,
+ MVTVideoSink* aConsumer,
+ TMediaId aMediaId ) = 0;
+
+ /**
+ * See MDataSource for description.
+ */
+ virtual TInt SourceThreadLogon( MAsyncEventHandler& aEventHandler ) = 0;
+
+ /**
+ * See MDataSource for description.
+ */
+ virtual void SourceThreadLogoff() = 0;
+
+ /**
+ * See MDataSource for description.
+ */
+ virtual void SourcePrimeL() = 0;
+
+ /**
+ * See MDataSource for description.
+ */
+ virtual void SourcePlayL() = 0;
+
+ /**
+ * See MDataSource for description.
+ */
+ virtual void SourcePauseL() = 0;
+
+ /**
+ * See MDataSource for description.
+ */
+ virtual void SourceStopL() = 0;
+
+ private: // New functions
+
+ /**
+ * See MVTVideoInput for description.
+ */
+ virtual void SetFormatL( const TDesC8& aFormat ) = 0;
+
+ /**
+ * See MVTVideoInput for description.
+ */
+ virtual void SetFrameRateL( TReal32 aFrameRate ) = 0;
+
+ /**
+ * See MVTVideoInput for description.
+ */
+ virtual void SetVideoFrameSizeL( const TSize& aSize ) = 0;
+
+ /**
+ * See MVTVideoInput for description.
+ */
+ virtual void GetVideoFrameSizeL( TSize& aSize ) const = 0;
+
+ private: // Functions from base classes
+
+ protected: // New functions
+
+ /**
+ * This version of prime method will be called when a provider
+ * is being switched.
+ * @exception Can leave with one of the system wide error codes.
+ */
+ virtual void PrimeL() = 0;
+
+ /**
+ * Inliner to test if FillBufferL call is active.
+ * @return ETrue if FillBufferL call is ongoing, else EFalse.
+ */
+ inline TBool FillBufferActive() const;
+
+ /**
+ * Inliner to return the sink that will empty the buffer.
+ * @return Pointer to sink.
+ */
+ inline MVTVideoSink* Consumer() const;
+
+ /**
+ * Inliner to return sink media ID that is used.
+ * @return Media ID identifiyng the stream that is used.
+ */
+ inline TMediaId MediaId() const;
+
+ /**
+ * Inliner to return reference to the provider observer.
+ * @return Reference to the provider observer.
+ */
+ inline MVSDataProviderObserver& Observer() const;
+
+ /**
+ * Saves input parameters given in FillBufferL call.
+ * @param "aConsumer" Pointer to sink that will empty the filled buffer.
+ * @param "aMediaId" Media ID for source/provider stream that is used.
+ */
+ virtual void SetFillBufferParams(
+ MVTVideoSink* aConsumer,
+ TMediaId aMediaId );
+
+ /**
+ * Notify observer about provider error.
+ * @param "aError" Error code
+ */
+ void NotifyError( TInt aError );
+
+ /**
+ * Inliner to return reference to the buffer pool.
+ * @return Reference to the buffer pool.
+ */
+ inline MVSBufferPool& BufferPool() const;
+
+ protected: // Constructor and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CVSDataProvider();
+
+ /**
+ * Constructor.
+ * @param "aObserver" Pointer to provider observer.
+ */
+ CVSDataProvider(
+ MVSDataProviderObserver* aObserver,
+ MVSBufferPool* aPool );
+
+ /**
+ * 2nd phase constructor.
+ * @exception Can leave with one of the system wide error codes.
+ */
+ void ConstructL();
+
+ /**
+ * Returns microseconds from the first SourcePlayL() call.
+ */
+ const TTimeIntervalMicroSeconds& TimeToPlay();
+
+ /**
+ * Resets start time (the time when SourcePlayL() was called).
+ * iStartTime is set to TTime::HomeTime().
+ */
+ void ResetStartTime();
+
+ private: // New functions
+
+ /**
+ *
+ */
+ static TInt CamerasAvailable();
+
+ /**
+ * Sets timestamp for first SourcePlayL() call. This method
+ * is called by the CVSDataSource when data provider is switched.
+ */
+ void SwitchFrom( const CVSDataProvider& anOldProvider );
+
+ /**
+ * Enumerate all providers and create a set of formats that is supported
+ * by all of them.
+ */
+ static void EnumerateVideoFrameFormatsL(
+ CDesC8Array* aSupportedFormats );
+
+ /**
+ * Enumerate all providers and create a set of video frame sizes that
+ * is supported by all of them.
+ */
+ static void EnumerateVideoFrameSizesL(
+ RArray<TSize>& aSupportedSizes,
+ const TDesC8& aFormat );
+
+ /**
+ * Enumerate all providers and create a set of video frame rates that
+ * is supported by all of them.
+ */
+ static void EnumerateVideoFrameRatesL(
+ RArray<TReal32>& aSupportedRates,
+ const TDesC8& aFormat,
+ const TSize& aSize );
+
+ protected: // New functions
+
+ /**
+ * Get video frame size. Implemented in each provider.
+ */
+ virtual void GetVideoFrameSize(
+ TSize& aSize,
+ TInt aSizeIndex,
+ const TDesC8& aFormat ) = 0;
+
+ /**
+ * Get video frame rate. Implemented in each provider.
+ */
+ virtual void GetVideoFrameRate(
+ TReal32& aRate,
+ TInt aRateIndex,
+ const TDesC8& aFormat,
+ const TSize& aSize ) = 0;
+
+ public: // Data
+
+ protected: // Data
+
+ // Boolean that is ETrue when FillBufferL call is active.
+ TBool iFillBufferActive;
+
+ // Sink that empties the buffer filled with video frame. Not owned.
+ MVTVideoSink* iConsumer;
+
+ // Provider's media ID identifying media stream used.
+ TMediaId iMediaId;
+
+ private: // Data
+
+ // Pointer to provider observer.
+ MVSDataProviderObserver* iObserver;
+
+ // Pointer to AO that reports provider errors to provider observer,
+ // used through NotifyError call.
+ CProviderErrorNotifierAO* iErrorNotifier;
+
+ // Pointer to buffer pool
+ MVSBufferPool* iPool;
+
+ // Previous TimeToPlay interval
+ TTimeIntervalMicroSeconds iPreviousTimeToPlay;
+
+ // Start time (time when SourcePlayL() was called)
+ TTime iStartTime;
+
+ private: // Data
+
+ // Source is friend because it's MDataSource and MVTVideoInput derived
+ // calls are forwarded to provider.
+ friend class CVSDataSource;
+
+ // Source is friend because it's MDataSource and MVTVideoInput derived
+ // calls are forwarded to provider.
+ friend class CVSDataSourceImp;
+ };
+
+/**
+* An interface to a data source callback functions.
+*
+* @lib videosource.lib
+*/
+class MVSDataSourceObserver
+ {
+ public:
+
+ /**
+ * Called when provider switch completed.
+ * @param "aOldProvider" Pointer provider that was previously active.
+ */
+ virtual void vsProviderSwitchDone( CVSDataProvider* aOldProvider ) = 0;
+ };
+
+/**
+* Data source interface.
+*
+* @lib videosource.lib
+*/
+class CVSDataSource :
+ public CBase,
+ public MVTVideoSource,
+ public MVSBufferPool
+ {
+ public: // Constructor and destructor
+
+ /**
+ * Static factory function to create data source instance.
+ * @param "aObserver" Pointer to data source observer.
+ * @exception Can leave with one of the system wide error codes.
+ * @return Pointer to data source instance.
+ */
+ static CVSDataSource* NewSourceL( MVSDataSourceObserver* aObserver );
+
+ public: // New functions
+
+ /**
+ * Pure virtual function to switch active provider for source.
+ * @param "aNewProvider" Pointer to provider instance.
+ * @exception Can leave with one of the system wide error codes.
+ */
+ virtual void SwitchDataProviderL( CVSDataProvider* aNewProvider ) = 0;
+
+ /**
+ * Temporarily pause video sending. Used during initialization.
+ */
+ virtual void PauseSending() = 0;
+
+ /**
+ * Resume video sending. Used during initialization.
+ */
+ virtual void ResumeSending() = 0;
+
+ public: // Functions from base classes
+
+ protected: // New functions
+
+ /**
+ * Inliner to return reference to the data source observer.
+ * @return Reference to the data source observer.
+ */
+ inline MVSDataSourceObserver& Observer() const;
+
+ /**
+ * Inliner to return reference to the provider that is active.
+ * @return Reference to the provider.
+ */
+ inline CVSDataProvider& DataProvider() const;
+
+ /**
+ * Inliner to update member variable holding pointer to provider with
+ * new provider pointer.
+ * @param "aNewProvider" Pointer to (new) provider.
+ * @return Pointer to (old) provider.
+ */
+ inline CVSDataProvider* SwitchProvider( CVSDataProvider* aNewProvider );
+
+ protected: // Constructor and destructor
+
+ /**
+ * Constructor.
+ */
+ CVSDataSource();
+
+ private: // Constructor and destructor
+
+ /**
+ * 2nd phase consturctor.
+ * @param "aObserver" Pointer to data source observer.
+ * @exception Can leave with one of the system wide error codes.
+ */
+ void ConstructL( MVSDataSourceObserver* aObserver );
+
+ private: // New functions
+
+ private: // Functions from base classes
+
+ public: // Data
+
+ protected: // Data
+
+ private: // Data
+
+ // Pointer to data source observer.
+ MVSDataSourceObserver* iObserver;
+
+ // Pointer to active provider.
+ CVSDataProvider* iProvider;
+ };
+
+#include "capivideosource.inl"
+
+#endif // CAPIVIDEOSOURCE_H