diff -r 6dc066157ed4 -r d9b6a8729acd vtprotocolplugins/VideoSource/inc/CApiVideoSource.h --- a/vtprotocolplugins/VideoSource/inc/CApiVideoSource.h Tue Jan 26 12:01:21 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,922 +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 CAPIVIDEOSOURCE_H -#define CAPIVIDEOSOURCE_H - -// INCLUDE FILES -#include -#include -#include -#include -#include -#include - -// 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& 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& 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