diff -r 000000000000 -r 96612d01cf9f videoplayback/videohelix/src/mpxvideoaccessoryobserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videoplayback/videohelix/src/mpxvideoaccessoryobserver.cpp Mon Jan 18 20:21:12 2010 +0200 @@ -0,0 +1,289 @@ +/* +* Copyright (c) 2008 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: This class observes the accessory framework. + * +*/ + +// Version : %version: 6 % + +// +// INCLUDE FILES +// +#include +#include + +#include "mpxvideoaccessoryobserver.h" +#include "mpxvideoplaybackcontroller.h" +#include "mpxvideo_debug.h" + +// +// ============================ MEMBER FUNCTIONS =================================================== +// + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoAccessoryObserver::NewL +// Two-phased constructor. +// ------------------------------------------------------------------------------------------------- +// +CMPXVideoAccessoryObserver* +CMPXVideoAccessoryObserver::NewL( CMPXVideoPlaybackController* aController ) +{ + MPX_ENTER_EXIT(_L("CMPXVideoAccessoryObserver::NewL()")); + + CMPXVideoAccessoryObserver* self = new (ELeave) CMPXVideoAccessoryObserver( aController ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoAccessoryObserver::ConstructL +// Symbian 2nd phase constructor can leave +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoAccessoryObserver::ConstructL() +{ + MPX_ENTER_EXIT(_L("CMPXVideoAccessoryObserver::ConstructL()")); + +#ifdef __ACCESSORY_FW + User::LeaveIfError( iServer.Connect() ); + User::LeaveIfError( iConnection.CreateSubSession( iServer ) ); + + // + // Get initial accessory status synchronously + // + iConnection.GetAccessoryConnectionStatus( iGenericIdArray ); +#endif + + // + // This will set check if a TV-Out accessory has been connected + // and initialize the member variable + // + UpdateTvOutStatusL(); + + StartMonitoringL(); +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoAccessoryObserver::CMPXVideoAccessoryObserver +// ------------------------------------------------------------------------------------------------- +// +CMPXVideoAccessoryObserver::CMPXVideoAccessoryObserver( CMPXVideoPlaybackController* aController ) + : CActive( CActive::EPriorityStandard ) + , iController( aController ) + , iTvOutConnected( EFalse ) + , iTvOutPlaybackAllowed( ETrue ) +{ + CActiveScheduler::Add( this ); +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoAccessoryObserver::~CMPXVideoAccessoryObserver +// Destructor, close and release the handles. +// ------------------------------------------------------------------------------------------------- +// +CMPXVideoAccessoryObserver::~CMPXVideoAccessoryObserver() +{ + MPX_ENTER_EXIT(_L("CMPXVideoAccessoryObserver::~CMPXVideoAccessoryObserver()")); + + Cancel(); + +#ifdef __ACCESSORY_FW + iConnection.CloseSubSession(); + iServer.Disconnect(); +#endif +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoAccessoryObserver::StartMonitoringL +// ------------------------------------------------------------------------------------------------- +// +void CMPXVideoAccessoryObserver::StartMonitoringL() +{ + MPX_ENTER_EXIT(_L("CMPXVideoAccessoryObserver::StartMonitoringL()")); + + if ( ! IsActive() ) + { +#ifdef __ACCESSORY_FW + iConnection.NotifyAccessoryConnectionStatusChanged( iStatus, iGenericIdArray ); +#endif + + SetActive(); + } +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoAccessoryObserver::UpdateTvOutStatusL +// ------------------------------------------------------------------------------------------------- +// +TBool CMPXVideoAccessoryObserver::UpdateTvOutStatusL() +{ + MPX_DEBUG(_L("CMPXVideoAccessoryObserver::UpdateTvOutStatusL()")); + + TBool statusChanged = EFalse; + + // + // Initialize TV-Out value to EFalse before checking if + // accessories support TV-Out + // + TBool tvOutConnected = EFalse; + +#ifdef __ACCESSORY_FW + CAccPolSubblockNameArray* nameArray = CAccPolSubblockNameArray::NewL(); + CleanupStack::PushL( nameArray ); + + // + // Get the number of currently connected accessories + // Loop through each connected accessory looking for + // the desired capabilities + // + const TInt count = iGenericIdArray.Count(); + + for ( TInt index = 0 ; index < count ; index++ ) + { + // + // Get all supported capabilities for this connected accessory. + // + iConnection.GetSubblockNameArrayL( iGenericIdArray.GetGenericIDL( index ), *nameArray ); + + // + // Check if this connected accessory supports TV-Out + // + if ( nameArray->HasName( KAccVideoOut ) ) + { + MPX_DEBUG(_L(" TV-Out Capabilities Exist")); + + tvOutConnected = ETrue; + break; + } + } + + CleanupStack::PopAndDestroy( nameArray ); +#endif + + // + // Check if the TV-Out status has changed + // + if ( iTvOutConnected != tvOutConnected ) + { + iTvOutConnected = tvOutConnected; + + if ( iTvOutConnected ) + { + // + // Check the playablility of the clip + // + iTvOutPlaybackAllowed = iController->iPlaybackMode->IsTvOutAllowedL(); + } + else + { + iTvOutPlaybackAllowed = ETrue; + } + + statusChanged = ETrue; + } + + MPX_DEBUG(_L(" iTvOutConnected = %d"), iTvOutConnected); + + MPX_DEBUG(_L("CMPXVideoAccessoryObserver::UpdateTvOutStatusL() ret = %d"), statusChanged); + + return statusChanged; +} + +// ----------------------------------------------------------------------------- +// CMPXVideoAccessoryObserver::RunL +// ----------------------------------------------------------------------------- +// +void CMPXVideoAccessoryObserver::RunL() +{ + MPX_ENTER_EXIT(_L("CMPXVideoAccessoryObserver::RunL()"), + _L("iStatus = %d"), iStatus.Int()); + +#ifdef __ACCESSORY_FW + if ( KErrNone == iStatus.Int() ) + { + // + // Check for TV-Out status change + // If a changed, issue notice to the observer + // + if ( UpdateTvOutStatusL() ) + { + iController->HandleTvOutEventL( iTvOutConnected ); + } + } +#endif + + // + // Renew request for accessory events + // + StartMonitoringL(); +} + +// ----------------------------------------------------------------------------- +// CMPXVideoAccessoryObserver::DoCancel +// ----------------------------------------------------------------------------- +// +void CMPXVideoAccessoryObserver::DoCancel() +{ + MPX_ENTER_EXIT(_L("CMPXVideoAccessoryObserver::DoCancel()")); + +#ifdef __ACCESSORY_FW + iConnection.CancelNotifyAccessoryConnectionStatusChanged(); +#endif +} + +// ----------------------------------------------------------------------------- +// CMPXVideoAccessoryObserver::RunError +// ----------------------------------------------------------------------------- +// +TInt CMPXVideoAccessoryObserver::RunError( TInt aError ) +{ + MPX_ENTER_EXIT(_L("CMPXVideoAccessoryObserver::RunError()"), + _L("aError = %d"), aError); + +#ifdef __ACCESSORY_FW + // + // Error occurred, issue new request for accessory status + // + iConnection.NotifyAccessoryConnectionStatusChanged( iStatus, iGenericIdArray ); +#endif + + return KErrNone; +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoAccessoryObserver::IsTvOutConnected +// ------------------------------------------------------------------------------------------------- +// +TBool CMPXVideoAccessoryObserver::IsTvOutConnected() +{ + MPX_DEBUG(_L("CMPXVideoAccessoryObserver::IsTvOutConnected(%d)"), iTvOutConnected); + + return iTvOutConnected; +} + +// ------------------------------------------------------------------------------------------------- +// CMPXVideoAccessoryObserver::IsTvOutPlaybackAllowed +// ------------------------------------------------------------------------------------------------- +// +TBool CMPXVideoAccessoryObserver::IsTvOutPlaybackAllowed() +{ + TBool playAllowed = ( ! iTvOutConnected || iTvOutPlaybackAllowed ); + MPX_DEBUG(_L("CMPXVideoAccessoryObserver::IsTvOutPlaybackAllowed(%d)"), playAllowed); + + return playAllowed; +} + +// End of File