diff -r c378a0498b84 -r c9ec3f2fcd87 vtprotocolplugins/VideoSource/inc/CApiVideoSource.h --- /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 +#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