--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vtengines/videoteleng/Inc/Media/CVtEngMediaHandler.h Mon Nov 23 14:47:47 2009 +0200
@@ -0,0 +1,1299 @@
+/*
+* Copyright (c) 2004-2007 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 session interface.
+*
+*/
+
+
+
+#ifndef CVTENGMEDIAHANDLER_H
+#define CVTENGMEDIAHANDLER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <mvtprotocolhandler.h>
+#include "MVtEngMedia.h"
+#include "vtengcommands.h"
+#include "CVtEngLocalVideo.h"
+#include "MVtEngSettingObserver.h"
+
+// FORWARD DECLARATIONS
+class CVtEngLocalVideo;
+class CVtEngRemoteVideo;
+class MVtEngFrameObserver;
+class CVtEngOperation;
+class CVtEngExtensionBase;
+
+// CLASS DECLARATION
+
+/**
+* Media control.
+*
+* @lib videoteleng.lib
+* @since Series 60 2.6
+*/
+NONSHARABLE_CLASS( CVtEngMediaHandler ) :
+ public CBase,
+ public MVtEngMedia,
+ public MVtEngSettingObserver,
+ public MVtProtocolHandler
+ {
+ public: // Constructor and destructor.
+
+ /**
+ * Symbian two-phase constructor.
+ * @return media handler instance
+ */
+ static CVtEngMediaHandler* NewL();
+
+ /**
+ * Destructor.
+ */
+ ~CVtEngMediaHandler();
+
+ public: // From MVtEngMedia.
+
+ /**
+ * @see MVtEngMedia
+ */
+ virtual TInt GetMediaState(
+ const TMediaDirection aMediaDirection,
+ TInt& aActiveMedia ) const;
+
+ /**
+ * @see MVtEngMedia
+ */
+ virtual TBool RenderingStarted(
+ const TMediaDirection
+ aDirection ) const;
+
+ /**
+ * @see MVtEngMedia
+ */
+ virtual TInt GetSource( TMediaSource& aSource ) const;
+
+ /**
+ * @see MVtEngMedia
+ */
+ virtual TInt GetSourcesCaps( TInt& aCaps ) const;
+
+ /**
+ * @see MVtEngMedia
+ */
+ virtual TInt GetCurrentCameraId( TCameraId& aId ) const;
+
+ /**
+ * @see MVtEngMedia
+ */
+ virtual TInt GetCameraInfo(
+ const TCameraId aId,
+ TCameraInfo& aInfo ) const;
+
+ /**
+ * @see MVtEngMedia
+ */
+ virtual TInt GetCurrentZoomStep( TInt& aCurrentStep );
+
+ /**
+ * @see MVtEngMedia
+ */
+ virtual TInt GetMaxZoomStep( TInt& aMaxZoomStep );
+
+ /**
+ * @see MVtEngMedia
+ */
+ virtual TInt GetMajorZoomStepCount( TInt& aCount );
+
+ /**
+ * @see MVtEngMedia
+ */
+ virtual void GetMajorZoomStep( TInt aIndex, TInt& aStep );
+
+ /**
+ * @see MVtEngMedia
+ */
+ virtual TInt GetFreezeSupported( TBool& aFreezeSupported ) const;
+
+ /**
+ * @see MVtEngMedia
+ */
+ virtual TInt GetFreezeState( TBool& aFrozen ) const;
+
+ /**
+ * @see MVtEngMedia
+ */
+ virtual TInt GetDsaState(
+ const TMediaDirection aMediaDirection,
+ TBool& aActive ) const;
+
+ /**
+ * @see MVtEngMedia
+ */
+ virtual TBool VideoCallConnected () const;
+
+ /**
+ * @see MVtEngMedia
+ */
+ virtual void GetVideoQuality( TVideoQuality& aVideoQuality ) const;
+
+ /**
+ * @see MVtEngMedia
+ */
+ virtual void GetObjectSharingState(
+ TShareObjectState& aObjectSharingState ) const;
+
+ /**
+ * @ see MVtEngMedia
+ */
+ virtual void GetCameraOrientations(
+ TCameraOrientation& aPrimaryCameraOrientation,
+ TCameraOrientation& aSecondaryCameraOrientation ) const;
+
+public: // New functions.
+
+ /**
+ * Tells if the Protocol initialization has completed.
+ * @return ETrue if initialized
+ */
+ TBool ProtoInitialized() const;
+
+ /**
+ * Performs an operation in the handler.
+ * @param operation to be performed on the handler
+ */
+ virtual void HandleL( CVtEngOperation& aOperation );
+
+ /**
+ * Returns if command can be performed by media handler.
+ * @return KErrNone if a command can be perfomed
+ * KErrNotReady if not in appropriate state
+ * KErrNotSupported if command is not for media handler
+ */
+ TInt ValidateCommand( const TVtEngCommandId aCommand ) const;
+
+ /**
+ * Returns ETrue if video channel is closed.
+ */
+ TBool IsVideoChannelClosed() const;
+
+ /**
+ * Request update last remote video frame through MVtEngFrameObserver::vtSetFrame
+ */
+ void RequestLastRemoteFrame();
+
+ public: // from MVtProtocolHandler
+
+ /**
+ * Handles callback from protocol.
+ * @param aResponse response
+ */
+ virtual void HandleSessionCommandEventL(const TVtCommandResponse& aResponse);
+
+ public: // From MVtProtocolHandler.
+
+ /**
+ * Handles callback from protocol audiocontroller.
+ * @param aId which command
+ * @param aCmd which audio command
+ * @param aContextData any additional data
+ * @param aStatus how did it end up with
+ */
+ virtual void HandleAudioOutputControlCommandComplete(TInt aId,
+ TVtAudioOutputControlCommand aCmd,
+ TAny *aContextData,
+ TInt aStatus);
+
+ public: // From MVtProtocolHandler.
+
+ /**
+ * Handles event from protocol.
+ * @param aEvent event
+ */
+ virtual void HandleSessionInformationalEventL(
+ const TVtIndicationEvent& aEvent);
+
+ public: // from MVtProtocolHandler
+
+ /**
+ * Handles error event from protocol.
+ * @param aEvent error event
+ */
+ virtual void HandleSessionErrorEventL(const TVtErrorEvent& aEvent);
+
+ public: // from MVtEngSettingObserver
+
+ /**
+ * Handles shared data setting change.
+ * @param aId setting id
+ * @param aValue setting value
+ */
+ virtual void HandleSettingChangedL(
+ CVtEngSettings::TSettingId aId,
+ const TDesC& aValue );
+
+ public: // From MVtProtocolHandler.
+
+ /**
+ * @see MVtProtocolHandler.
+ */
+ void HandleVideoEncoderCommandCompletedL(
+ const TVtCommandResponse& aResponse );
+
+ /**
+ * @see MVtProtocolHandler.
+ */
+ void HandleVideoEncoderInformationalEventL(
+ const TVtIndicationEvent& aEvent);
+
+ public: // From MVtProtocolHandler
+
+ /**
+ * @see MVtProtocolHandler.
+ * @since 3.1
+ */
+ void HandleH324MConfigCommandCompletedL( const TVtCommandResponse& aResponse );
+
+ /**
+ * @see MVtProtocolHandler.
+ * @since 3.1
+ */
+ void HandleH324MConfigInformationalEventL(
+ const TVtIndicationEvent& aEvent );
+
+ public: // New functions.
+
+ /**
+ * Initializes media handler.
+ * @param aStatus signaling handle
+ */
+ void InitializeL( TRequestStatus& aStatus );
+
+ /**
+ * Cancels media handler initialization.
+ */
+ void CancelInitialize();
+
+ /**
+ * Initializes default blank provider.
+ * @param aStatus signaling handle
+ */
+ void InitializeProviderL( TRequestStatus& aStatus );
+
+ /**
+ * Cancel Image sharing initialization.
+ */
+ void CancelInitializeShareImage();
+
+ /**
+ * Sets protocol interface.
+ * aProto2Way protocol interface
+ */
+ void SetSessionCommand( MVtSessionCommand* aProto2Way );
+
+ /**
+ * Unitializes media handler.
+ * @param aStatus request semaphore to complete
+ * when uninitialization is complete
+ */
+ void Uninitialize( TRequestStatus& aStatus );
+
+ /**
+ * Goes to next step of uninitialization process, it can
+ * be one of following
+ * - Cancel all Protocol commands
+ * - Protocol disconnect
+ * - Protocol reset
+ * - Switch blank provider.
+ */
+ void UninitializeNextStep();
+
+ /**
+ * Sets selected camera ID.
+ * @param aId camera ID (primary or secondary)
+ * @param aUpdateRequired if ETrue switch could not be performed
+ * Switch will be done when engine has been initialized.
+ */
+ void SetSelectedCameraId(
+ const TCameraId aId,
+ TBool aUpdateRequired = EFalse );
+
+ /**
+ * Handles source initialization or switch.
+ * @param aResult Symbian OS error code
+ */
+ void HandleLocalVideoOperationCompleteL( const TInt aResult );
+
+ /**
+ * SDK init info.
+ * @return Protocol initialization info
+ */
+ TVtInitInfo& SdkInitInfo();
+
+ /**
+ * Returns protocol state maintained by VTEngine, not by Protocol.
+ * @return state
+ */
+ MVtProtocolCommand::TVtProtocolState ProtoState();
+
+ /**
+ * Sets up video connection to remote terminal.
+ * @return Symbian OS error code
+ */
+ TInt Connect();
+
+ /**
+ * Disconnects session.
+ * @return Symbian OS error code
+ */
+ TInt Disconnect();
+
+ /**
+ * Adds video data source to protocol engine.
+ * @param Video channel logical channel ID number.
+ * @return Symbian OS error code
+ */
+ TInt AddVideoSource( TUint aChannelId );
+
+ /**
+ * Adds audio data source to protocol engine.
+ * @param Audio channel logical channel ID number.
+ * @return Symbian OS error code
+ */
+ TInt AddAudioSource( TUint aChannelId );
+
+ /**
+ * Adds video sink.
+ * @param Video channel logical channel ID number.
+ * @return Symbian OS error code
+ */
+ TInt AddVideoSink( TUint aChannelId );
+
+ /**
+ * Adds audio sink.
+ * @param Audio channel logical channel ID number.
+ * @return Symbian OS error code
+ */
+ TInt AddAudioSink( TUint aChannelId );
+
+ /**
+ * Sets the output volume for Protocol.
+ * @param aVolume the level of the volume
+ * @return Symbian OS error code
+ */
+ TInt SetVolume( const TInt aVolume,
+ CVtEngOperation* aOperation = NULL );
+
+ /**
+ * Enables video when primary camera becomes available.
+ * @param aEnable do we enable or disable
+ * @return Symbian OS error code
+ */
+ TInt AutoEnableVideo( TBool aEnable = ETrue );
+
+ /**
+ * Deletes protocol instance and associated Protocol interfaces.
+ */
+ void FinalizeUninitialization();
+
+ /**
+ * Creates extension according to API Uid.
+ * @since S60 v3.2
+ * @param aUid extension API Uid.
+ * @return Extension pointer
+ * @exeption Leaves if creation fails
+ *
+ */
+ CVtEngExtensionBase* CreateExtensionsL( const TUid& aUid );
+
+ /**
+ * Checks if there is already an operation pending.
+ * @return KVtEngCommandNone if no operation is pending or Command identifier
+ */
+ TVtEngCommandId GetPendingCommand();
+
+ private: // new functions
+
+ /**
+ * Sends a sync message to Protocol after provider switch.
+ */
+ void RequestFrame( );
+
+ /**
+ * Sets video quality
+ */
+ void SetVideoQualityL(
+ const TVideoQuality aVideoQuality,
+ const TBool aSetPeerVideoQuality );
+
+ /**
+ * Sets peer video quality
+ */
+ void SetPeerVideoQuality( const TVideoQuality aVideoQuality );
+
+ /**
+ * Check's flag's validity. If not valid, panic's in debug mode.
+ * @param aFlag flag to check.
+ */
+ void AssertFlag( const TInt aFlag ) const;
+
+ /**
+ * Gets the version information from SysUtil
+ * and sets it into Protocol.
+ */
+ void SetVersionInfoL();
+
+ /**
+ * Sets supported resolutions to Protocol.
+ */
+ void SetSupportedResolutions();
+
+ /**
+ * Sets used call setup enhancement parameters.
+ */
+ void SetFastCsupOptions();
+
+ /**
+ * Does Protocol reset.
+ */
+ void ResetProtoL();
+
+ /**
+ * Does the actual disconnecting with Protocol.
+ */
+ void DisconnectProtoL();
+
+ /**
+ * Sets the defaults for volumes.
+ */
+ void InitializeVolume();
+
+ /**
+ * Checks if a flag in iProtoInitFlags is set.
+ * @return ETrue if flag is set
+ */
+ TBool IsFlag( const TInt aFlag ) const;
+
+ /**
+ * Sets a flag in iProtoInitFlags.
+ * @param aFlag flag to set
+ */
+ inline void SetFlag( const TInt aFlag );
+
+ /**
+ * Clears a flag in iProtoInitFlags.
+ * @param aFlag flag to clear
+ */
+ inline void ClearFlag( const TInt aFlag );
+
+ /**
+ * Requests the volume controller.
+ * @return ETrue if retrieved ok
+ */
+ TBool RequestAudioControllerL();
+
+ /**
+ * Spatial trade off indication handling method. Indication is
+ * sent by the peer every time when its spatial trade off is updated.
+ * @param aLogicalChannelId Indication's logical channel Id.
+ * @param aTradeOff Indication trade off value.
+ */
+ void HandleSpatialTradeoffIndication(
+ const TUint16 aLogicalChannelId, const TUint8 aTradeOff );
+
+ /**
+ * Spatial trade off command handling method. Spatial trade off
+ * command is sent by the peer whenever peer wants to adjust our
+ * video quality.
+ * @param aLogicalChannelId Command's logical channel Id.
+ * @param aTradeOff New trade off value.
+ */
+ void HandleSpatialTradeoffCommandL(
+ const TUint16 aLogicalChannelId, const TUint8 aTradeOff );
+
+ private: // constructor and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CVtEngMediaHandler();
+
+ /**
+ * Symbian constructor that may leave.
+ */
+ void ConstructL();
+
+ private:
+ /**
+ * Operation values
+ */
+ enum TOperation
+ {
+ /**
+ * No-op.
+ * 0
+ */
+ ENone,
+
+ /**
+ * Add video source to protocol.
+ * 1
+ */
+ EAddVideoSource,
+
+ /**
+ * Add video source to protocol.
+ * 2
+ */
+ EAddVideoSink,
+
+ /**
+ * Add audio source to protocol.
+ * 3
+ */
+ EAddAudioSource,
+
+ /**
+ * Add audio source to protocol.
+ * 4
+ */
+ EAddAudioSink,
+
+ /**
+ * Connect protocol.
+ * 5
+ */
+ EConnectProto,
+
+ /**
+ * Mute audio.
+ * 6
+ */
+ EMuteAudio,
+
+ /**
+ * Resume audio sending.
+ * 7
+ */
+ EUnmuteAudio,
+
+ /**
+ * Enable video for peer.
+ * 8
+ */
+ EEnableVideo,
+
+ /**
+ * Disable video for peer.
+ * 9
+ */
+ EDisableVideo,
+
+ /**
+ * Cancel ongoing request to Protocol
+ * as part of uninitiazation process.
+ * 10
+ */
+ EUninitializeCancelAllProto,
+
+ /**
+ * Disconnect protocol.
+ * 11
+ */
+ EDisconnectProto,
+
+ /**
+ * Destructs local/remote video and VS instances.
+ * 12
+ */
+ EDestructInternals,
+
+ /**
+ * Terminates H.324 session.
+ * 13
+ */
+ ETerminateSession,
+
+ /**
+ * Removing sinks and sources.
+ * 14
+ */
+ ERemovingSinksAndSources,
+
+ /**
+ * Request 324 control interface from protocol.
+ * 15
+ */
+ EGet324CtrlInterface,
+
+ /**
+ * Set volume.
+ * 16
+ */
+ ESetAudioVolume,
+
+ /**
+ * Gets the maximum volume for Protocol.
+ * 17
+ */
+ EGetAudioGetMaxVolume,
+
+ /**
+ * Reset protocol.
+ * 18
+ */
+ EDestructProtoPhaseDisconnect,
+
+ /**
+ * Destruct switch blank.
+ * 19
+ */
+ EDestructSwitchBlank,
+
+ /**
+ * Reset protocol.
+ * 20
+ */
+ EDestructProtoPhaseReset,
+
+ /**
+ * Check Protocol state.
+ * 21
+ */
+ ECheckProtoState,
+
+ /**
+ * Enables video internally (not originated by UI).
+ * 22
+ */
+ EEnableVideoInternal,
+
+ /**
+ * Disables video internally (not originated by UI).
+ * 23
+ */
+ EDisableVideoInternal,
+
+ /**
+ * Request H263Enc interface from protocol.
+ * 24
+ */
+ EGetH263EncInterface,
+
+ /**
+ * Requests an intra frame.
+ * 25
+ */
+ ESendIntraframe,
+
+ /**
+ * Set supported resolutions.
+ * 26
+ */
+ ESetSupportedResolutions,
+
+ /**
+ * Set video quality (by changing framerate)
+ * 27
+ */
+ ESetVideoQuality,
+
+ /**
+ * Remove H324 interface
+ * 28
+ */
+ ERemove324CtrlInterface,
+
+ /**
+ * Remove video encoder interface
+ * 29
+ */
+ ERemoveH263EncInterface,
+
+ /**
+ * Sends Video Temporal-spatial trade off command
+ * 30
+ */
+ ESendVTSTO,
+
+ /**
+ * Sets fast call setup options
+ * 31
+ */
+ ESetFastCsupOptions,
+
+ /**
+ * Sets vendor id
+ * 32
+ */
+ ESetVendorId,
+
+ /**
+ * Set interval when I-frames are sent
+ * 33
+ */
+ ESetIFrameInterval
+ };
+
+ /**
+ * Operation and related command id.
+ */
+ struct TCmdOpPair
+ {
+ // Operation
+ TOperation iOp;
+ // Command id returned by proto2way asynch request
+ TInt iProtoCmdId;
+ };
+
+ /**
+ * Enables/Disables video sending.
+ * @param aEnable ETrue if video is to be enabled
+ * @param aOp operation to be added
+ * NOTE. Valid only for enabling video, not when disabled.
+ * @see void AutoEnableVideo
+ * @return started operation or ENone
+ */
+ TOperation EnableVideoL(
+ const TBool aEnable,
+ const TOperation aOp = EEnableVideo );
+
+ /**
+ * Calls Protocol pausing and acts according to the result.
+ * @return operation id for performed operation
+ */
+ TOperation DoPauseVideo();
+
+ /**
+ * Continues to next step of uninitialization.
+ * @param aOp operation to perform
+ * @return command id
+ */
+ void ContinueUninitializeL( const TOperation aOp );
+
+ /**
+ * Cancels all the running commands within Protocol.
+ * @param operation to be returned
+ * EUninitializeCancelAllProto if cancellation is ongoing
+ * (either because was already or just started)
+ * ENone if cancellation is not ongoing
+ * @return error code
+ * KErrNotReady if engine not in suitable state
+ * KErrAlreadyExists if cancel was already pending
+ * KErrNone if cancellation request succeeded
+ * other Symbian OS error code if cancellation fails
+ */
+ TInt CancelAllProtoCommands( TOperation &aOp );
+
+ /**
+ * Stops view finder and remote video rendering.
+ */
+ void StopRendering();
+
+ /**
+ * Updates volume to Protocol (if possible).
+ */
+ void UpdateVolume();
+
+ /**
+ * Initiates protocol engine reset.
+ */
+ void ResetProto2WayL();
+
+ /**
+ * Removes operation from pending operations array.
+ * @param aOp TOperation
+ * @return ETrue if operation was found (and hence removed)
+ */
+ template<class T>
+ TBool RemoveOperation( const T& aOp );
+
+ /**
+ * Adds operation pending for callback.
+ * @param aOp operation value
+ * @param aCmdId protocol commd id or 0 if not Protocol cmd
+ * @param aResetExisting if ETrue removes existing operations
+ * from array
+ * @return index of the operation in array (i.e. >= 0 )
+ */
+ TInt AddOperation(
+ const TOperation aOp,
+ TInt aCmdId,
+ const TBool aResetExisting = EFalse );
+
+ /**
+ * Checks if an operation is pending.
+ * @param aOp operation
+ * @return index if operation is pending or KErrNotFound
+ */
+ TInt IsPending( const TOperation aOp ) const;
+
+ /**
+ * Checks if an operation is pending.
+ * @param aCmdId command id
+ * @return index if operation is pending or KErrNotFound
+ */
+ TInt IsPending( const TInt aCmdId ) const;
+
+ /**
+ * Completes asynchronous operation.
+ * @param aResult
+ * @return KErrNotFound if no operation else KErrNone
+ */
+ TInt CompleteOp( const TInt aResult );
+
+ /**
+ * Completes asynchronous operation asynchronously.
+ * @param aResult
+ * @return KErrNotFound if no operation else KErrNone
+ */
+ void AsyncCompleteOp( const TInt aResult = KErrNone );
+
+ /**
+ * Checks if specific operation matches to response from protocol.
+ * @param aProtoCmdId command id returned by protocol
+ * @param aOperation operation to search for in pending commands
+ * @param aIndex index in iPendingOps array if found
+ * @return ETrue if there's corrensponding entry in pending ops
+ */
+ TBool MatchResponseToPendingOps(
+ const TInt aProtoCmdId,
+ const TOperation aOperation,
+ TInt* aIndex = NULL );
+
+ /**
+ * Starts "self-destruction" timer.
+ */
+ void StartDisconnectTimerL();
+
+ /**
+ * Assigns new pending operation. Only one can be pending at a time
+ * so if there already is pending operation it is completed with error.
+ * @param aOperation operation to assign as pending
+ * @param aReplaceError error code to complete penging operation if
+ * one exists. If KErrNone is passed, replacement is not done.
+ * @return KErrNone if assignment done successfully i.e. there was
+ not pending operation that was completed.
+ * KErrCancel if some other operation was pending and was
+ * completed with aReplaceError. Operation is
+ * still assigned successfully.
+ * KErrGeneral if operation was not assigned.
+ */
+ TInt AssignPendingOp(
+ CVtEngOperation& aOperation,
+ TInt aReplaceError = KErrCancel );
+
+ /**
+ * Callback function that completes ongoing operation.
+ * @param aAny pointer to an instance of the class.
+ * @return always KErrNone.
+ */
+ static TInt DoCompleteOp( TAny* aAny );
+
+ /**
+ * Implementation of self-destruction timer activity.
+ * Causes a panic.
+ * @param aAny pointer to an instance of the class
+ * Not used.
+ * @return KErrNone;
+ */
+ static TInt TimerCallback( TAny* aAny );
+
+ /**
+ * Creates and enques async callback for uninitialization.
+ * @see iNextStepCallback
+ */
+ void NextUninitStepCallbackL();
+
+ /**
+ * Callback method for async uninitialization step.
+ * @seeiNextStepCallback
+ * @return KErrNone;
+ */
+ static TInt UninitCallback( TAny* aAny );
+
+ /**
+ * Query 2-way's additional interfaces, encoder and H324
+ * @return KErrNone;
+ */
+ void QueryProtoInterfacesL();
+
+ /**
+ * Release 2-way's additional interfaces, encoder and H324
+ * @return KErrNone;
+ */
+ void ReleaseProtoInterfacesL();
+
+ /**
+ * Check for pending Protocol extension interface commands.
+ * @return ETrue if one or more extension command is pending
+ */
+ TBool ExtensionCommandsPending() const;
+
+ /**
+ * Checks is it possible to add sink / source from session
+ * state point of view.
+ * @return ETrue if adding is allowed.
+ */
+ TBool MediaAddingValidity() const;
+
+ /**
+ * Provider initialization state
+ */
+ enum TInitState
+ {
+ /**
+ * Initialization not ongoing.
+ */
+ EInitStateNone,
+
+ /**
+ * Initialize still image.
+ */
+ EStateInitStillImage,
+
+ /**
+ * Initilize default blank provider.
+ */
+ EStateInitProvider,
+
+ /**
+ * Provider is set to none.
+ */
+ EStateWaitingProviderChangeForUninit,
+
+ /**
+ * Initialization has been cancelled.
+ */
+ EStateInitCanceled
+ };
+
+ /**
+ * State flags.
+ */
+ enum
+ {
+ // Protocol state flags
+ // Sink/source added
+ EProtoAudioSourceAdded = 0x000001,
+ EProtoVideoSourceAdded = 0x000002,
+ EProtoAudioSinkAdded = 0x000004,
+ EProtoVideoSinkAdded = 0x000008,
+ // Track paused
+ EProtoAudioTrackPaused = 0x000040,
+ EProtoVideoTrackPaused = 0x000080,
+
+ // Pause/resume related flags.
+ ETwoStageOperation = 0x000100,
+ ESourceUpdateNeeded = 0x000200,
+ EProtoPauseVideoRequested= 0x000400,
+ EProtoPauseVideoBlankProv= 0x000800,
+ EProtoContVideoBlankProv = 0x001000,
+ EProtoContVideoBlankInit = 0x002000,
+
+ // Must send intra
+ EProtoSendIntraFrame = 0x004000,
+
+ // 324 interface acquired
+ EProto324IFAcquired = 0x008000,
+
+ // Cancel all command is called on Protocol
+ // or there's nothing to cancel
+ EProtoCancelProtoCmdsOk = 0x010000,
+
+ // NON Protocol related flags
+
+ EVideoQualitySetByPeer= 0x020000,
+
+ // Outgoing video channel closed (after being open)
+ // Used for preventing video pause/resume when
+ // the channel is not open
+ EOutVideoChannelClosed = 0x040000,
+
+ // Outgoing audio channel closed (after being open)
+ // Used for preventing audio pause/resume
+ // the channel is not open
+ EOutAudioChannelClosed = 0x080000
+ };
+
+
+ /**
+ * Defines actions that can be taken when sharing started
+ * and/or stopped
+ */
+ enum TVideoEngAction
+ {
+ EVideoActionNone,
+ EVideoActionEnable,
+ EVideoActionDisable
+ };
+
+ /**
+ * Helper class for handling video quality manipulation.
+ */
+ class TVtEngVideoQuality
+ {
+
+ public:
+
+ // Forward for inner class
+ class TVQSParams;
+
+ public:
+
+ /**
+ * Constructor.
+ */
+ TVtEngVideoQuality();
+
+ /**
+ * Destructor.
+ */
+ ~TVtEngVideoQuality();
+
+ /**
+ * Sets new local video quality setting.
+ * @param aId Operation id.
+ * @param aSetPeer ETrue if peer video quality needs to be set,
+ * EFalse otherwise.
+ */
+ void SettingVideoQuality( TInt aId, const TVideoQuality aValue,
+ TBool aSetPeer );
+
+ /**
+ * Get current local video quality setting.
+ * @return Current local video quality setting.
+ */
+ TVideoQuality VideoQuality() const;
+
+ /**
+ * Setting video quality succeeded.
+ * @return ETrue if record with given id was found, EFalse other
+ * wise.
+ */
+ TBool SettingSucceeded( TInt aId, TVQSParams& aParams );
+
+ /**
+ * Setting video quality failed.
+ */
+ void SettingFailed( TInt aId );
+
+ /**
+ * Called when video quality indication is received from peer.
+ */
+ void UpdateVideoQuality( const TVideoQuality aVideoQuality );
+
+ /**
+ * Converts given trade off value to video quality enum.
+ */
+ TVideoQuality FromTradeOff( const TInt aTradeOff ) const;
+
+ /**
+ * Converts given video quality enum to trade off value.
+ */
+ TInt ToFrameRate( const TVideoQuality aVideoQuality ) const;
+
+ /**
+ * Converts given video quality value to frame rate.
+ */
+ TUint8 ToTradeOff( const TVideoQuality aVideoQuality ) const;
+
+ /**
+ * Finds id of setting param and returns index to it.
+ */
+ TInt FindVQSParam( TInt aId ) const;
+
+ public:
+
+ /**
+ * Video quality parameters.
+ */
+ struct TVQSParams
+ {
+
+ public:
+
+ // Default constructor
+ TVQSParams();
+
+ // Constructor with initializing parameters
+ TVQSParams( TInt aId, const TVideoQuality aValue,
+ TBool aSetPeer );
+
+ public: // data
+
+ // Operation id
+ TInt iId;
+
+ // VideoQuality value to be set
+ TVideoQuality iValue;
+
+ // Defines whether peer video quality needs to be set or not
+ TBool iSetPeer;
+
+ };
+
+ private:
+
+ // Current local video quality
+ TVideoQuality iCurrent;
+
+ // Qued params
+ RArray< TVQSParams > iParamList;
+ };
+
+ // Class for handling different kind of H.245 logical
+ // channels and their state in different MONA call setup
+ // scenarios
+ class TLogicalChannel
+ {
+ public:
+
+ // H.245 logical channel ID to be established or
+ // already active
+ TUint iLogicalChannelId;
+
+ // H.245 logical channel ID that is currently closing.
+ TUint iLogicalChannelIdClosing;
+
+ // Variable to tell is same type (video or audio, incoming or outgoing)
+ // channel already started to close but not closed yet. If closing is pending
+ // same type channel cannot be opened until closing has finished or sink/source
+ // addition has failed for some reason.
+ TBool iSameTypeClosingPending;
+
+ // Variable to tell is same type (video or audio, incoming or outgoing)
+ // channel ready to be opened.
+ TBool iSameTypeChannelReadyToOpen;
+
+ };
+
+ private: // Data members.
+
+ // Protocol engine pointer.
+ MVtSessionCommand* iSessionCommand;
+
+ // Local video configuration.
+ CVtEngLocalVideo* iLocalVideo;
+
+ // Remote video configuration.
+ CVtEngRemoteVideo* iRemoteVideo;
+
+ // Pending internal operations.
+ TInt iCmdId;
+ CArrayFixFlat<TCmdOpPair>* iPendingOps;
+
+ // Video Source initialization state.
+ TInitState iVSInitState;
+
+ // Flags used to determine if audio and video sink/source
+ // is added to protocol and media state.
+ TInt iProtoStateFlags;
+
+ // protocol state.
+ MVtProtocolCommand::TVtProtocolState iProtoState;
+
+ // Initialization flag.
+ TBool iInitialized;
+
+ // Remote media state.
+ TInt iRemoteMediaState;
+
+ // Pending operation from client.
+ CVtEngOperation* iPendingOp;
+
+ // Protocol initialization information.
+ TVtInitInfo iSdkInitInfo;
+
+
+ // Request status for (un)initialization.
+ TRequestStatus* iRequestStatus;
+
+ // Audio controller handle.
+ MVtAudioConfigCommand* iAudioCtrl;
+
+ // Timer to detect failure in disconnection.
+ CPeriodic* iTimer;
+
+ // Protocol max volume.
+ TInt iProtoMaxVolume;
+
+ // Selected camera is not necessary activated also.
+ TCameraId iSelectedCameraId;
+
+ // ETrue when it is allowed to update volume.
+ TBool iUpdateVolumeAllowed;
+
+ // ETrue when it is needed to update volume.
+ TBool iUpdateVolumeRequired;
+
+ // Owned asynch callback.
+ CIdle* iAsyncCallback;
+
+ // Pending volume operation.
+ CVtEngOperation* iPendingVolumeOp;
+
+ // Used for various connection related operations.
+ TInt iConnectionStates;
+
+ // Used while pausing and resuming video.
+ CVtEngLocalVideo::TVtEngProviderType iTempProviderInfo;
+
+ // Used for setting the vendor info.
+ MVtH324ConfigCommand* iH324Config;
+
+
+ // Used H263 interface.
+ MVtVideoConfigCommand* iH263Encoder;
+
+ // Video quality
+ TVtEngVideoQuality iVideoQuality;
+
+ // Sharing object while video is disable will set this flag
+ TVideoEngAction iVideoAction;
+
+ // Logical channel structure for outgoing video channel(s).
+ TLogicalChannel iVideoOutgoingLogicalChannel;
+
+ // Logical channel structure for outgoing audio channel(s).
+ TLogicalChannel iAudioOutgoingLogicalChannel;
+
+ // Logical channel structure for incoming video channel(s).
+ TLogicalChannel iVideoIncomingLogicalChannel;
+
+ // Logical channel structure for incoming audio channel(s).
+ TLogicalChannel iAudioIncomingLogicalChannel;
+
+ /* For proceeding to next uninit step asynchronously.
+ * Needed because Proto extension interface cannot be released within
+ * callback
+ */
+ CAsyncCallBack* iNextStepCallback;
+
+
+ /* Do not complete operation on pause command. This flag
+ * is used when image sharing is stopped and video was disabled
+ * when sharing was initially started to prevent black frame sending
+ * during blank switch.
+ */
+ TBool iPauseNoCompleteOp;
+
+ /**
+ * Result for asynchronous operation completion.
+ */
+ TInt iAsyncCompleteOpResult;
+ };
+
+#endif // CVTENGMEDIAHANDLER_H
+
+// End of File