diff -r d40e813b23c0 -r 48060abbbeaf htiui/HtiServicePlugins/HtiCameraServicePlugin/engine/src/EngineVideoRecording.cpp --- a/htiui/HtiServicePlugins/HtiCameraServicePlugin/engine/src/EngineVideoRecording.cpp Thu Jul 15 18:39:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1429 +0,0 @@ -/* -* Copyright (c) 2009 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: Engine implementation video recording methods. -* -*/ - - -// INCLUDE FILES -#include -#include // For MMF audio preference definitions. - - -#include "EngineVideoRecording.h" -#include "VideoRecordingQualityLevels.h" -// EXTERNAL DATA STRUCTURES - -// EXTERNAL FUNCTION PROTOTYPES - -// CONSTANTS - -// MACROS - -// LOCAL CONSTANTS AND MACROS - -// MODULE DATA STRUCTURES - -// LOCAL FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// ============================= LOCAL FUNCTIONS =============================== - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CEngineVideoRecording::CEngineVideoRecording -// C++ default constructor can NOT contain any code, that might leave. -// ----------------------------------------------------------------------------- -// -CEngineVideoRecording::CEngineVideoRecording() : - iZoomMode( EZoomModeDigital ), - iExposureMode( CCamera::EExposureAuto ), - iWhiteBalanceMode( CCamera::EWBAuto ), - iFlashMode( CCamera::EFlashNone ), - iMaxClipSizeInBytes( KMMFNoMaxClipSize ), - iMaxClipSizeInBytesPrep( KMMFNoMaxClipSize ) - { - } - - -// ----------------------------------------------------------------------------- -// CEngineVideoRecording::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CEngineVideoRecording::ConstructL(MEngineVideoRecordingObserver& aObserver, - TInt aCameraIndex) - { - HTI_LOG_FUNC_IN( "CEngineVideoRecording::ConstructL" ); - iVideoRecordingObserver = &aObserver; - - if ( ( aCameraIndex < 0 ) || - ( aCameraIndex >= CCamera::CamerasAvailable() ) ) - { - HTI_LOG_FORMAT("Cae: CEngineVideoRecording::ConstructL leaving KErrHardwareNotAvailable, aCameraIndex=%d", aCameraIndex ); - User::Leave( KErrHardwareNotAvailable ); - } - - // Create a new Camera API implementation object, if supported - TRAPD( err, iCamera = CCamera::New2L( static_cast(*this), aCameraIndex, KCameraPriority ) ); - if ( err ) - { - HTI_LOG_FORMAT("CEngineVideoRecording::ConstructL() CCamera::New2L return code=%d", err ); - - // Create old Camera API implementation object. - iCamera = CCamera::NewL( static_cast(*this), aCameraIndex ); - HTI_LOG_TEXT("CEngineVideoRecording::ConstructL() using MCameraObserver"); - } - else - { - HTI_LOG_TEXT("CEngineVideoRecording::ConstructL() using MCameraObserver2"); - } - - - // Get camera handle. - iCameraHandle = iCamera->Handle(); - - // Create and initialize info object. - iInfo = new( ELeave ) TEngineVideoRecordingInfo; - InitializeInfo( *iCamera ); - - HTI_LOG_FUNC_OUT( "CEngineVideoRecording::ConstructL" ); - } - - -// ----------------------------------------------------------------------------- -// CEngineVideoRecording::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CEngineVideoRecording* CEngineVideoRecording::NewL(MEngineVideoRecordingObserver& aObserver, - TInt aCameraIndex) - { - CEngineVideoRecording* self = new (ELeave) CEngineVideoRecording; - CleanupStack::PushL( self ); - self->ConstructL(aObserver, aCameraIndex); - CleanupStack::Pop(); - return self; - } - - -// Destructor -CEngineVideoRecording::~CEngineVideoRecording() - { - HTI_LOG_FUNC_IN( "CEngineVideoRecording::~CEngineVideoRecording"); - - delete iVideoType; - delete iVideoClipFileName; - - // Turn camera power off first, then release camera. - if ( iCamera ) - { - if ( iReserved ) - { - if ( iPowerOn ) - { - iCamera->PowerOff(); - } - iCamera->Release(); - } - } - - delete iVideoFrameSizePrep; - delete iVideoFrameSize; - - delete iVideoRecorder; - - delete iVideoQualityLevels; - - delete iCamera; - - REComSession::FinalClose(); - - HTI_LOG_FUNC_OUT( "CEngineVideoRecording::~CEngineVideoRecording"); - } - -void CEngineVideoRecording::InitL( ) - { - HTI_LOG_FUNC_IN( "CEngineVideoRecording::InitL"); - - // To allow re-initialization, release the camera (first cancels possible - // activities and turns camera power off). - Release(); - - iCamera->Reserve(); - - HTI_LOG_FUNC_OUT( "CEngineVideoRecording::InitL"); - } - -void CEngineVideoRecording::InitializeInfo( - const CCamera& aCamera ) - { - - // Initialise Camera (API) info. - - TCameraInfo cameraInfo; - aCamera.CameraInfo( cameraInfo ); - - iInfo->iHardwareVersion = cameraInfo.iHardwareVersion; - iInfo->iSoftwareVersion = cameraInfo.iSoftwareVersion; - - iInfo->iOrientation = cameraInfo.iOrientation; - - iInfo->iOptionsSupported = cameraInfo.iOptionsSupported; - - iInfo->iFlashModesSupported = cameraInfo.iFlashModesSupported; - - iInfo->iExposureModesSupported = cameraInfo.iExposureModesSupported; - - iInfo->iWhiteBalanceModesSupported = cameraInfo.iWhiteBalanceModesSupported; - - iInfo->iMinZoom = cameraInfo.iMinZoom; - iInfo->iMaxZoom = cameraInfo.iMaxZoom; - iInfo->iMaxDigitalZoom = cameraInfo.iMaxDigitalZoom; - - iInfo->iMinZoomFactor = cameraInfo.iMinZoomFactor; - iInfo->iMaxZoomFactor = cameraInfo.iMaxZoomFactor; - iInfo->iMaxDigitalZoomFactor = cameraInfo.iMaxDigitalZoomFactor; - - iInfo->iNumImageSizesSupported = cameraInfo.iNumImageSizesSupported; - iInfo->iImageFormatsSupported = cameraInfo.iImageFormatsSupported; - - // Initialize EV compensation info (no supported in this version) - iInfo->iMinEvCompensation = 0; - iInfo->iMaxEvCompensation = 0; - iInfo->iMinEvCompensationValue = 0; - iInfo->iMaxEvCompensationValue = 0; - - // Initialize engine info. - - iInfo->iNumStillQualityLevelsSupported = 0; // Quality levels are initialized separately. - iInfo->iNumVideoQualityLevelsSupported = 0; // Quality levels are initialized separately. - - } -void CEngineVideoRecording::InitVideoRecorderL() - { - HTI_LOG_FUNC_IN( "CEngineVideoRecording::InitVideoRecorderL()"); - - iVideoInitialized = EFalse; - - // Close video recording if previously opened/prepared. - CloseVideoRecording(); - - // (Re-)initialize these. - iMaxClipSizeInBytes = KMMFNoMaxClipSize; - iMaxClipSizeInBytesPrep = KMMFNoMaxClipSize; - - // Create video quality levels container object. - iVideoQualityLevels = CVideoRecordingQualityLevels::NewL(); - - // Destroy possible video clip file name. (Its allocated elsewhere when file name is set.) - delete iVideoClipFileName; - iVideoClipFileName = NULL; - - // Create video recorder. - delete iVideoRecorder; - iVideoRecorder = NULL; - iVideoRecorder = CVideoRecorderUtility::NewL( *this , KAudioPriorityVideoRecording, - TMdaPriorityPreference( KAudioPrefVideoRecording ) ); - - delete iVideoFrameSize; - iVideoFrameSize = NULL; - iVideoFrameSize = new( ELeave ) TSize(); - - delete iVideoFrameSizePrep; - iVideoFrameSizePrep = NULL; - iVideoFrameSizePrep = new( ELeave ) TSize(); - - iInfo->iNumVideoQualityLevelsSupported = iVideoQualityLevels->InitDefaultsL(); - iVideoInitialized = ETrue; - - HTI_LOG_FUNC_OUT( "CEngineVideoRecording::InitVideoRecorderL()"); - } - -void CEngineVideoRecording::SetVideoRecordingFileNameL( - const TDesC& aVideoClipFileName ) - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::SetVideoRecordingFileNameL"); - - if ( !iVideoInitialized || iVideoRecordingRunning ) - { - HTI_LOG_TEXT("CEngineVideoRecording::SetVideoRecordingFileNameL leaving KErrNotReady" ); - User::Leave( KErrNotReady ); - } - - if ( aVideoClipFileName.Length() > 0 ) - { - // Memorize the video clip file name. - delete iVideoClipFileName; - iVideoClipFileName = NULL; - iVideoClipFileName = aVideoClipFileName.AllocL(); - } - else - { - HTI_LOG_TEXT("CEngineVideoRecording::SetVideoRecordingFileNameL leaving KErrArgument"); - User::Leave( KErrArgument ); - } - - if ( iVideoPrepared ) - { - // Does the actual change of file name, only if video is prepared. - // Note: Variated implementation - ChangeVideoFileNameL(); - } - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::SetVideoRecordingFileNameL"); - } - -void CEngineVideoRecording::ChangeVideoFileNameL() - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::ChangeVideoFileNameL"); - - // Close if previously prepared. - CloseVideoRecording(); - // Open video recorder. - iVideoOpened = ETrue; // This is always set to ETrue when - // OpenFileL has been called to allow - // freeing resources by CloseVideoRecording(). - iVideoRecorder->OpenFileL( iVideoClipFileName->Des(), - iCameraHandle, - iVideoControllerUid, - iVideoFormatUid, - iVideoType->Des(), - iVideoAudioType ); - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::ChangeVideoFileNameL"); - } - -void CEngineVideoRecording::PrepareVideoRecordingL( - TInt aVideoQualityIndex ) - { - HTI_LOG_TEXT("CEngineVideoRecording::PrepareVideoRecordingL with video quality index"); - - if ( ( aVideoQualityIndex < 0 ) || - ( aVideoQualityIndex >= iVideoQualityLevels->Count() ) ) - { - HTI_LOG_TEXT("PrepareVideoRecordingL() leaving KErrArgument"); - User::Leave( KErrArgument ); - } - - PrepareVideoRecordingL( iVideoQualityLevels->At( aVideoQualityIndex ).iFrameSize, - iVideoQualityLevels->At( aVideoQualityIndex ).iFrameRate, - iVideoQualityLevels->At( aVideoQualityIndex ).iBitRate, - iVideoQualityLevels->At( aVideoQualityIndex ).iAudioEnabled, - iVideoQualityLevels->At( aVideoQualityIndex ).iAudioBitRate, - iVideoQualityLevels->At( aVideoQualityIndex ).iMimeType, - iVideoQualityLevels->At( aVideoQualityIndex ).iPreferredSupplier, - iVideoQualityLevels->At( aVideoQualityIndex ).iVideoType, - iVideoQualityLevels->At( aVideoQualityIndex ).iAudioType ); - - iVideoQualityIndex = aVideoQualityIndex; - } - -void CEngineVideoRecording::PrepareVideoRecordingL( - const TSize& aFrameSize, - TReal32 aFrameRate, - TInt aBitRate, - TBool aAudioEnabled, - const TDesC8& aMimeType, - const TDesC& aPreferredSupplier, - const TDesC8& aVideoType, - const TDesC8& aAudioType ) - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::PrepareVideoRecordingL"); - // Leave if not initialized properly or busy doing something else. - if ( !iVideoInitialized || - !iVideoClipFileName || - iVideoRecordingRunning ) - { - HTI_LOG_TEXT("PrepareVideoRecordingL leaving KErrNotReady"); - User::Leave( KErrNotReady ); - } - - CheckPowerL(); - - // Leave if video clip file name is not set properly. - if ( iVideoClipFileName->Length() == 0 ) - { - HTI_LOG_TEXT("PrepareVideoRecordingL() leaving KErrArgument (iVideoClipFileName)"); - User::Leave( KErrArgument ); - } - - // Close if previously opened/prepared. - CloseVideoRecording(); - - // Find values for iVideoControllerUid and iVideoFormatUid. - // Those are also needed if clip file name is changed when prepared. - FindVideoUidsL( aMimeType, aPreferredSupplier ); - - // Memorize video type. - delete iVideoType; - iVideoType = NULL; - iVideoType = aVideoType.AllocL(); - - // Convert audio type from TDesC8 to TFourCC. - iVideoAudioType = ConvertAndSetVideoAudioTypeL( aAudioType ); - - // Memorize the parameters to be prepared. - *iVideoFrameSizePrep = aFrameSize; - iVideoFrameRatePrep = aFrameRate; - iVideoBitRatePrep = aBitRate; - iVideoAudioEnabledPrep = aAudioEnabled; - - // Open video recorder. - iVideoOpened = ETrue; // This is always set to ETrue when - // OpenFileL has been called to allow - // freeing resources by CloseVideoRecording(). - iVideoRecorder->OpenFileL( iVideoClipFileName->Des(), - iCameraHandle, - iVideoControllerUid, - iVideoFormatUid, - iVideoType->Des(), - iVideoAudioType ); - HTI_LOG_FUNC_OUT("CEngineVideoRecording::PrepareVideoRecordingL"); - } - -void CEngineVideoRecording::PrepareVideoRecordingL( - const TSize& aFrameSize, - TReal32 aFrameRate, - TInt aBitRate, - TBool aAudioEnabled, - TInt aAudioBitRate, - const TDesC8& aMimeType, - const TDesC& aPreferredSupplier, - const TDesC8& aVideoType, - const TDesC8& aAudioType ) - { - HTI_LOG_TEXT("CEngineVideoRecording::PrepareVideoRecordingL with audio bit rate"); - // Memorize video audio bit rate value to be prepared. - iVideoAudioBitRatePrep = aAudioBitRate; - // Force audio bit rate preparation. - iPrepareVideoAudioBitRate = ETrue; - - // Call the version without audio bit rate argument. - // This is possible because the separate PrepareVideoSettingsL() is doing - // settings after succesfull opening of video recording. - PrepareVideoRecordingL( aFrameSize, - aFrameRate, - aBitRate, - aAudioEnabled, - aMimeType, - aPreferredSupplier, - aVideoType, - aAudioType ); - } - -void CEngineVideoRecording::CloseVideoRecording() - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::CloseVideoRecording"); - - if ( iVideoPrepared ) - { - CancelVideoRecording(); - iVideoPrepared = EFalse; - } - - if ( iVideoOpened ) - { - iVideoRecorder->Close(); - iVideoOpened = EFalse; - } - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::CloseVideoRecording"); - } - -TInt CEngineVideoRecording::VideoQualityIndex() const - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::VideoQualityIndex"); - - TInt qualityIndex( -1 ); - if ( iVideoPrepared ) - { - qualityIndex = iVideoQualityIndex; - } - HTI_LOG_FUNC_OUT("CEngineVideoRecording::VideoQualityIndex"); - return qualityIndex; - } - -TInt CEngineVideoRecording::VideoQualityCount() const - { - return iVideoQualityLevels->Count(); - } - - -void CEngineVideoRecording::GetVideoFrameSize( - TInt aVideoQualityIndex, - TSize& aFrameSize ) const - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::GetVideoFrameSize"); - - if ( aVideoQualityIndex >= 0 && - aVideoQualityIndex < iVideoQualityLevels->Count() ) - { - aFrameSize = iVideoQualityLevels->At( aVideoQualityIndex ).iFrameSize; - } - HTI_LOG_FUNC_OUT("CEngineVideoRecording::GetVideoFrameSize"); - } - -TReal32 CEngineVideoRecording::VideoFrameRate( - TInt aVideoQualityIndex ) const - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::VideoFrameRate"); - - TReal32 frameRate( 0.0 ); - if ( aVideoQualityIndex >= 0 && - aVideoQualityIndex < iVideoQualityLevels->Count() ) - { - frameRate = iVideoQualityLevels->At( aVideoQualityIndex ).iFrameRate; - } - HTI_LOG_FUNC_OUT("CEngineVideoRecording::VideoFrameRate"); - return frameRate; - } - -TInt CEngineVideoRecording::EstimatedVideoRecordingBitRateL( - TInt aVideoQualityIndex ) const - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::EstimatedVideoRecordingBitRateL"); - - TInt storageRate( 0 ); - if ( aVideoQualityIndex >= 0 && - aVideoQualityIndex < iVideoQualityLevels->Count() ) - { - storageRate = iVideoQualityLevels->At( aVideoQualityIndex ).iStorageRate; - } - HTI_LOG_FUNC_OUT("CEngineVideoRecording::EstimatedVideoRecordingBitRateL"); - return storageRate; - } - -void CEngineVideoRecording::SetVideoClipMaxSizeL( - TInt aMaxClipSizeInBytes ) - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::SetVideoClipMaxSizeL"); - - if ( !iVideoInitialized || iVideoRecordingRunning ) - { - HTI_LOG_TEXT("SetVideoClipMaxSizeL leaving KErrNotReady"); - User::Leave( KErrNotReady ); - } - - if ( aMaxClipSizeInBytes > 0 ) - { - iMaxClipSizeInBytesPrep = aMaxClipSizeInBytes; - } - else - { - iMaxClipSizeInBytesPrep = KMMFNoMaxClipSize; - } - - if ( iVideoPrepared ) - { - iPrepPars = ETrue; - iVideoRecorder->SetMaxClipSizeL( iMaxClipSizeInBytesPrep ); - iVideoRecorder->Prepare(); - } - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::SetVideoClipMaxSizeL"); - } - -TInt CEngineVideoRecording::VideoClipMaxSize() const - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::VideoClipMaxSize"); - - TInt maxClipSizeInBytes( 0 ); - if ( iMaxClipSizeInBytes != KMMFNoMaxClipSize ) - { - maxClipSizeInBytes = iMaxClipSizeInBytes; - } - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::VideoClipMaxSize"); - return maxClipSizeInBytes; - } - -void CEngineVideoRecording::SetVideoAudioL( - TBool aAudioEnabled ) - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::SetVideoAudioL"); - - if ( !iVideoInitialized || iVideoRecordingRunning ) - { - HTI_LOG_TEXT("SetVideoAudioL leaving KErrNotReady"); - User::Leave( KErrNotReady ); - } - - iVideoAudioEnabledPrep = aAudioEnabled; - iVideoRecorder->SetAudioEnabledL( iVideoAudioEnabledPrep ); - iPrepPars = ETrue; - iVideoRecorder->Prepare(); - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::SetVideoAudioL"); - } - -TBool CEngineVideoRecording::VideoAudio() const - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::VideoAudio"); - - TBool audioEnabled( EFalse ); - if ( iVideoRecorder ) - { - TRAPD( error, { audioEnabled = iVideoRecorder->AudioEnabledL(); } ); - if ( error != KErrNone ) - { - audioEnabled = EFalse; - } - } - HTI_LOG_FUNC_OUT("CEngineVideoRecording::VideoAudio"); - return audioEnabled; - } - -void CEngineVideoRecording::StartVideoRecording() - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::StartVideoRecording"); - - TInt error( KErrNone ); - - if ( iVideoPrepared && !iVideoRecordingRunning ) - { - iVideoRecordingRunning = ETrue; - iVideoRecordingPaused = EFalse; - - // Start video recording. - iVideoRecorder->Record(); - } - else - { - error = KErrNotReady; - } - - - iVideoRecordingObserver->MevroVideoRecordingOn( error ); - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::StartVideoRecording"); - } - -void CEngineVideoRecording::StopVideoRecording() - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::StopVideoRecording"); - - TInt stoppingError( KErrNone ); - - if ( iVideoRecordingRunning ) - { - iVideoRecordingRunning = EFalse; - stoppingError = iVideoRecorder->Stop(); - - // Can't be paused anymore. - iVideoRecordingPaused = EFalse; - } - else - { - stoppingError = KErrNotReady; - } - - iVideoRecordingObserver->MevroVideoRecordingComplete( stoppingError ); - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::StopVideoRecording"); - } - -void CEngineVideoRecording::PauseVideoRecording() - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::PauseVideoRecording"); - - TInt error( KErrNone ); - - if ( iVideoRecordingRunning && !iVideoRecordingPaused ) - { - // Pause video recording. - TRAP( error, iVideoRecorder->PauseL() ); - - if ( error == KErrNone ) - { - iVideoRecordingPaused = ETrue; - } - } - else - { - error = KErrNotReady; - } - - iVideoRecordingObserver->MevroVideoRecordingPaused( error ); - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::PauseVideoRecording"); - } - -void CEngineVideoRecording::ResumeVideoRecording() - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::ResumeVideoRecording"); - - TInt error( KErrNone ); - - if ( iVideoRecordingRunning && iVideoRecordingPaused ) - { - // Start video recording. - iVideoRecorder->Record(); - iVideoRecordingPaused = EFalse; - } - else - { - error = KErrNotReady; - } - - iVideoRecordingObserver->MevroVideoRecordingOn( error ); - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::ResumeVideoRecording"); - } - -TTimeIntervalMicroSeconds CEngineVideoRecording::RemainingVideoRecordingTime() const - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::RemainingVideoRecordingTime"); - - TTimeIntervalMicroSeconds remaining( 0 ); - if ( iVideoRecorder ) - { - remaining = iVideoRecorder->RecordTimeAvailable(); - } - HTI_LOG_FUNC_OUT("CEngineVideoRecording::RemainingVideoRecordingTime"); - return remaining; - } - -TBool CEngineVideoRecording::IsVideoRecording() const - { - return iVideoRecordingRunning; - } - - -void CEngineVideoRecording::CancelVideoRecording() - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::CancelVideoRecording"); - - if ( iVideoRecordingRunning ) - { - iVideoRecordingRunning = EFalse; - // Stop video recording. Do not call MevroVideoRecordingComplete() - (void) iVideoRecorder->Stop(); - iVideoRecordingPaused = EFalse; - } - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::CancelVideoRecording"); - } - -void CEngineVideoRecording::PrepareVideoSettingsL() - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::PrepareVideoSettingsL"); - - iVideoRecorder->SetVideoFrameSizeL( *iVideoFrameSizePrep ); - iVideoRecorder->SetVideoFrameRateL( iVideoFrameRatePrep ); - iVideoRecorder->SetVideoBitRateL( iVideoBitRatePrep ); - iVideoRecorder->SetAudioEnabledL( iVideoAudioEnabledPrep ); - if ( iPrepareVideoAudioBitRate ) - { - iVideoRecorder->SetAudioBitRateL( iVideoAudioBitRatePrep ); - iPrepareVideoAudioBitRate = EFalse; - } - iVideoRecorder->SetMaxClipSizeL( iMaxClipSizeInBytesPrep ); - - // Set the recording gain to the maximum - TInt gain = iVideoRecorder->GainL(); - HTI_LOG_FORMAT("CEngineVideoRecording::PrepareVideoSettingsL() GainL was %d", gain ); - gain = iVideoRecorder->MaxGainL(); - HTI_LOG_FORMAT("CEngineVideoRecording::PrepareVideoSettingsL() MaxGainL is %d", gain ); - iVideoRecorder->SetGainL( gain ); - gain = iVideoRecorder->GainL(); - HTI_LOG_FORMAT("CEngineVideoRecording::PrepareVideoSettingsL() GainL set to %d", gain ); - - iPrepPars = ETrue; - iVideoRecorder->Prepare(); - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::PrepareVideoSettingsL"); - } - -void CEngineVideoRecording::FindVideoUidsL( - const TDesC8& aMimeType, - const TDesC& aPreferredSupplier ) - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::FindVideoUidsL"); - - iVideoControllerUid.iUid = 0; - iVideoFormatUid.iUid = 0; - - // Retrieve a list of possible controllers from ECOM. - // - // Controller must support recording the requested mime type. - // Controller must be provided by preferred supplier. - - CMMFControllerPluginSelectionParameters* cSelect = - CMMFControllerPluginSelectionParameters::NewLC(); - CMMFFormatSelectionParameters* fSelect = - CMMFFormatSelectionParameters::NewLC(); - - fSelect->SetMatchToMimeTypeL( aMimeType ); - cSelect->SetRequiredRecordFormatSupportL( *fSelect ); - cSelect->SetPreferredSupplierL( aPreferredSupplier, - CMMFPluginSelectionParameters::EOnlyPreferredSupplierPluginsReturned ); - - RMMFControllerImplInfoArray controllers; - CleanupResetAndDestroyPushL( controllers ); - cSelect->ListImplementationsL( controllers ); - - if ( controllers.Count() < 1 ) - { - // No appropriate controllers found. - HTI_LOG_TEXT("CEngineVideoRecording::FindVideoUidsL() leaving KErrNotSupported (no controllers found)"); - User::Leave( KErrNotSupported ); - } - - TBool found( EFalse ); - for ( TInt contInd = 0; contInd < controllers.Count() && !found; contInd++ ) // there can be more than one controller, search from all of them - { - // Get the controller UID. - iVideoControllerUid = controllers[contInd]->Uid(); - HTI_LOG_FORMAT("CEngineVideoRecording::FindVideoUidsL() iVideoControllerUid=%x", iVideoControllerUid.iUid ); - - // Inquires the controller about supported formats. - RMMFFormatImplInfoArray formats = controllers[contInd]->RecordFormats(); - - // Get the first format that supports our mime type. - for ( TInt i = 0; i < formats.Count(); i++ ) - { - if ( formats[i]->SupportsMimeType( aMimeType ) ) - { - iVideoFormatUid = formats[i]->Uid(); // set the UID - found = ETrue; - HTI_LOG_FORMAT("CEngineVideoRecording::FindVideoUidsL() Found iVideoFormatUid=%x", iVideoFormatUid.iUid); - break; - } - } - } - if ( !found ) - { - // No appropriate video format found. - HTI_LOG_TEXT("CEngineVideoRecording::FindVideoUidsL() leaving KErrNotSupported (no video format found)"); - User::Leave( KErrNotSupported ); - } - - CleanupStack::PopAndDestroy( 3, cSelect ); // cselect, fselect, controllers - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::FindVideoUidsL"); - } - - -TFourCC CEngineVideoRecording::ConvertAndSetVideoAudioTypeL( - const TDesC8& aAudioType ) - { - if ( aAudioType == KNullDesC8 ) - { - return KMMFFourCCCodeNULL; - } - else - { - if ( aAudioType.Length() != 4 ) - { - User::Leave( KErrArgument ); - } - return TFourCC( aAudioType[0], aAudioType[1], aAudioType[2], aAudioType[3] ); - } - } - -void CEngineVideoRecording::Reserve() - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::Reserve"); - - if ( !iReserved ) - { - iCamera->Reserve(); - } - else if ( !iPowerOn ) // in case previous reserve ok, but poweron failed - { - PowerOn(); - } - - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::Reserve"); - } - - -void CEngineVideoRecording::Release() - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::Release"); - - if ( iReserved ) - { - PowerOff(); // Cancel all activities (if any) and turn power off. - iCamera->Release(); // Release Camera HW. - iReserved = EFalse; - iVideoPrepared = EFalse; - iVideoOpened = EFalse; - } - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::Release"); - } - - -void CEngineVideoRecording::PowerOn() - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::PowerOn"); - - if ( iReserved && !iPowerOn ) - { - iCamera->PowerOn(); - } - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::PowerOn"); - } - - -void CEngineVideoRecording::PowerOff() - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::PowerOff"); - - if ( iPowerOn ) - { - iCamera->PowerOff(); - iPowerOn = EFalse; - } - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::PowerOff"); - } - - -void CEngineVideoRecording::SetZoomModeL( - TZoomMode aZoomMode ) - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::SetZoomModeL"); - - // Currently supporting digital and optical zooms, not EZoomModeOpticalDigital. - if ( ( aZoomMode != EZoomModeDigital ) && ( aZoomMode != EZoomModeOptical ) ) - { - HTI_LOG_FORMAT("CEngineVideoRecording::SetZoomModeL leaving KErrNotSupported, aZoomMode=%d", aZoomMode ); - User::Leave( KErrNotSupported ); - } - - iZoomMode = aZoomMode; - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::SetZoomModeL"); - } - - -CEngineVideoRecording::TZoomMode CEngineVideoRecording::ZoomMode() const - { - HTI_LOG_TEXT("CEngineVideoRecording::ZoomMode"); - - return iZoomMode; - } - - -void CEngineVideoRecording::SetZoomValueL( - TInt aZoomValue ) - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::SetZoomValueL"); - - CheckPowerL(); - - switch ( iZoomMode ) - { - case EZoomModeDigital: - // Leave if zoom factor is out of range. - if ( ( aZoomValue < 0 ) || - ( aZoomValue > iInfo->iMaxDigitalZoom ) ) - { - HTI_LOG_FORMAT("CEngineVideoRecording::SetZoomValueL leaving KErrArgument, aZoomValue=%d", aZoomValue ); - HTI_LOG_FORMAT("The min digital zool value is 0, the max is %d", iInfo->iMaxDigitalZoom); - User::Leave( KErrArgument ); - } - // Set DIGITAL zoom value. - iCamera->SetDigitalZoomFactorL( aZoomValue ); - iZoomValue = aZoomValue; - break; - case EZoomModeOptical: - // Leave if zoom factor is out of range. - if ( ( aZoomValue < iInfo->iMinZoom ) || - ( aZoomValue > iInfo->iMaxZoom ) ) - { - HTI_LOG_FORMAT("CEngineVideoRecording::SetZoomValueL leaving KErrArgument, aZoomValue=%d", aZoomValue ); - HTI_LOG_FORMAT("The max optical zoom value is %d", iInfo->iMaxZoom); - HTI_LOG_FORMAT("The min optical zoom value is %d", iInfo->iMinZoom); - if(iInfo->iMinZoom == iInfo->iMaxZoom) - { - User::Leave(KErrNotSupported); - } - User::Leave( KErrArgument ); - } - // Set OPTICAL zoom value. - iCamera->SetZoomFactorL( aZoomValue ); - iZoomValue = aZoomValue; - break; - default: - // EZoomModeOpticalDigital not supported - HTI_LOG_FORMAT("CEngineVideoRecording::SetZoomValueL leaving KErrNotSupported, iZoomMode=%d", iZoomMode ); - User::Leave( KErrNotSupported ); - break; - } - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::SetZoomValueL"); - } - - -TInt CEngineVideoRecording::ZoomValue() const - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::ZoomValue"); - - TInt zoomValue( 0 ); - if ( iPowerOn ) - { - switch ( iZoomMode ) - { - case EZoomModeDigital: - zoomValue = iCamera->DigitalZoomFactor(); - break; - case EZoomModeOptical: - zoomValue = iCamera->ZoomFactor(); - break; - default: - // EZoomModeOpticalDigital not supported - break; - } - } - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::ZoomValue"); - return zoomValue; - } - -TInt CEngineVideoRecording::MaxZoomValue() const - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::MaxZoomValue"); - - TInt zoomValue( 0 ); - if ( iPowerOn ) - { - switch ( iZoomMode ) - { - case EZoomModeDigital: - zoomValue = iInfo->iMaxDigitalZoom; - break; - case EZoomModeOptical: - zoomValue = iInfo->iMaxZoom; - break; - default: - // EZoomModeOpticalDigital not supported - break; - } - } - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::MaxZoomValue"); - return zoomValue; - } - -TInt CEngineVideoRecording::MinZoomValue() const - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::MinZoomValue"); - - TInt zoomValue( 0 ); - if ( iPowerOn ) - { - switch ( iZoomMode ) - { - case EZoomModeDigital: - zoomValue = 0; - break; - case EZoomModeOptical: - zoomValue = iInfo->iMinZoom; - break; - default: - // EZoomModeOpticalDigital not supported - break; - } - } - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::MinZoomValue"); - return zoomValue; - } -void CEngineVideoRecording::SetBrightnessL( - TInt aBrightness ) - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::SetBrightnessL"); - // Leave if not supported. - if ( !( iInfo->iOptionsSupported & TCameraInfo::EBrightnessSupported ) ) - { - HTI_LOG_FORMAT("CEngineVideoRecording::SetBrightnessL leaving KErrNotSupported, aBrightness=%d", aBrightness ); - User::Leave( KErrNotSupported ); - } - - CheckPowerL(); - - iCamera->SetBrightnessL( aBrightness ); - iBrightness = aBrightness; - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::SetBrightnessL"); - } - - -TInt CEngineVideoRecording::Brightness() const - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::Brightness"); - - TInt brightness( 0 ); - if ( iPowerOn && ( iInfo->iOptionsSupported & TCameraInfo::EBrightnessSupported ) ) - { - brightness = iCamera->Brightness(); - } - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::Brightness"); - return brightness; - } - - -void CEngineVideoRecording::SetContrastL( - TInt aContrast ) - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::SetContrastL"); - - // Leave if not supported. - if ( !( iInfo->iOptionsSupported & TCameraInfo::EContrastSupported ) ) - { - HTI_LOG_FORMAT("CEngineVideoRecording::SetContrastL leaving KErrNotSupported, aContrast=%d", aContrast ); - User::Leave( KErrNotSupported ); - } - - CheckPowerL(); - - iCamera->SetContrastL( aContrast ); - iContrast = aContrast; - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::SetContrastL"); - } - - -TInt CEngineVideoRecording::Contrast() const - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::Contrast"); - TInt contrast( 0 ); - if ( iPowerOn && ( iInfo->iOptionsSupported & TCameraInfo::EContrastSupported ) ) - { - contrast = iCamera->Contrast(); - } - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::Contrast"); - return contrast; - } - - -void CEngineVideoRecording::SetExposureModeL( - CCamera::TExposure aExposureMode ) - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::SetExposureModeL"); - - // Leave is requested exposure mode is not supported, - // EExposureAuto should be always supported. - if ( ( ( aExposureMode != CCamera::EExposureAuto ) && - !( aExposureMode & iInfo->iExposureModesSupported ) ) || - ( aExposureMode < 0 ) ) - { - HTI_LOG_FORMAT("CEngineVideoRecording::SetExposureModeL leaving KErrNotSupported, aExposureMode=%d", aExposureMode ); - User::Leave( KErrNotSupported ); - } - - CheckPowerL(); - - iCamera->SetExposureL( aExposureMode ); - iExposureMode = aExposureMode; - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::SetExposureModeL"); - } - - -CCamera::TExposure CEngineVideoRecording::ExposureMode() const - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::ExposureMode"); - - CCamera::TExposure exposureMode( CCamera::EExposureAuto ); - if ( iPowerOn ) - { - exposureMode = iCamera->Exposure(); - } - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::ExposureMode"); - return exposureMode; - } - - -void CEngineVideoRecording::SetWhiteBalanceModeL( - CCamera::TWhiteBalance aWhiteBalanceMode ) - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::SetWhiteBalanceModeL"); - - // Leave is requested WB mode is not supported. - // EWBAuto is always supported. - if ( ( ( aWhiteBalanceMode != CCamera::EWBAuto ) && - !( aWhiteBalanceMode & iInfo->iWhiteBalanceModesSupported ) ) || - ( aWhiteBalanceMode < 0 ) ) - { - HTI_LOG_FORMAT("CEngineVideoRecording::SetWhiteBalanceModeL leaving KErrNotSupported, aWhiteBalanceMode=%d", aWhiteBalanceMode ); - User::Leave( KErrNotSupported ); - } - - CheckPowerL(); - - iCamera->SetWhiteBalanceL( aWhiteBalanceMode ); - iWhiteBalanceMode = aWhiteBalanceMode; - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::SetWhiteBalanceModeL"); - } - - -CCamera::TWhiteBalance CEngineVideoRecording::WhiteBalanceMode() const - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::WhiteBalanceMode"); - - CCamera::TWhiteBalance whiteBalanceMode( CCamera::EWBAuto ); - if ( iPowerOn ) - { - whiteBalanceMode = iCamera->WhiteBalance(); - } - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::WhiteBalanceMode"); - return whiteBalanceMode; - } - - -void CEngineVideoRecording::SetFlashModeL( - CCamera::TFlash aFlashMode ) - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::SetFlashModeL"); - - // Leave is requested flash mode is not supported. - // EFlashNone is always supported. - if ( ( ( aFlashMode != CCamera::EFlashNone ) && - !( aFlashMode & iInfo->iFlashModesSupported ) ) || - ( aFlashMode < 0 ) ) - { - HTI_LOG_FORMAT("CEngineVideoRecording::SetFlashModeL leaving KErrNotSupported, aFlashMode=%d", aFlashMode ); - User::Leave( KErrNotSupported ); - } - - CheckPowerL(); - - iCamera->SetFlashL( aFlashMode ); - iFlashMode = aFlashMode; - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::SetFlashModeL"); - } - - -CCamera::TFlash CEngineVideoRecording::FlashMode() const - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::FlashMode"); - - CCamera::TFlash flashMode( CCamera::EFlashNone ); - if ( iPowerOn ) - { - flashMode = iCamera->Flash(); - } - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::FlashMode"); - return flashMode; - } - - -void CEngineVideoRecording::ResetToDefaultsL() - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::ResetToDefaultsL"); - - SetExposureModeL(); - SetWhiteBalanceModeL(); - SetZoomModeL(); - SetZoomValueL(); - SetFlashModeL(); - - // Reset this setting only if it is supported by Camera API. - if ( iInfo->iOptionsSupported & TCameraInfo::EBrightnessSupported ) - { - SetBrightnessL(); - } - - // Reset this setting only if it is supported by Camera API. - if ( iInfo->iOptionsSupported & TCameraInfo::EContrastSupported ) - { - SetContrastL(); - } - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::ResetToDefaultsL"); - } - -void CEngineVideoRecording::CheckPowerL() - { - if ( !iPowerOn ) - { - HTI_LOG_TEXT("CEngineVideoRecording::CheckPowerL() leaving KErrNotReady (iPowerOn)"); - User::Leave( KErrNotReady ); - } - } - -void CEngineVideoRecording::MvruoOpenComplete(TInt aError) - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::MvruoOpenComplete"); - - HTI_LOG_FORMAT("aError = %d", aError); - if ( aError == KErrNone ) - { - // To get default video audio bit rate. - TRAP( aError, { iVideoAudioBitRate = iVideoRecorder->AudioBitRateL(); } ); - // (ignore possible error) - // Prepare settings only if no errors in opening. - TRAP( aError, PrepareVideoSettingsL() ); - if ( aError != KErrNone ) - { - iVideoRecordingObserver->MevroVideoPrepareComplete( aError ); - } - } - else - { - iVideoRecordingObserver->MevroVideoPrepareComplete( aError ); - } - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::MvruoOpenComplete"); - } - -void CEngineVideoRecording::MvruoPrepareComplete(TInt aError) - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::MvruoPrepareComplete"); - - HTI_LOG_FORMAT("aError = %d", aError); - if ( iVideoOpened && ( aError == KErrNone ) ) - { - iVideoPrepared = ETrue; // Later errors with settings after - // do not change the value. - } - - if ( iPrepPars ) - { - iPrepPars = EFalse; - // If no error, then fresh parameters are valid. - // Otherwise, old parameters are kept. - if ( aError == KErrNone ) - { - *iVideoFrameSize = *iVideoFrameSizePrep; - iVideoFrameRate = iVideoFrameRatePrep; - iVideoBitRate = iVideoBitRatePrep; - iVideoAudioEnabled = iVideoAudioEnabledPrep; - iVideoAudioBitRate = iVideoAudioBitRatePrep; - iMaxClipSizeInBytes = iMaxClipSizeInBytesPrep; - } - else - { - *iVideoFrameSizePrep = *iVideoFrameSize; - iVideoFrameRatePrep = iVideoFrameRate; - iVideoBitRatePrep = iVideoBitRate; - iVideoAudioEnabledPrep = iVideoAudioEnabled; - iVideoAudioBitRatePrep = iVideoAudioBitRate; - iMaxClipSizeInBytesPrep = iMaxClipSizeInBytes; - } - } - - iVideoRecordingObserver->MevroVideoPrepareComplete( aError ); - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::MvruoPrepareComplete"); - } - -void CEngineVideoRecording::MvruoRecordComplete(TInt aError) - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::MvruoRecordComplete"); - - HTI_LOG_FORMAT("aError = %d", aError); - - // Recording stopped: can't be paused anymore. - iVideoRecordingPaused = EFalse; - - if ( iVideoRecordingRunning) // To ensure that McaeoVideoRecordingComplete - { // gets called just once per recording. - iVideoRecordingRunning = EFalse; - - // Close video recording always in error case. Otherwise the camcorder plugin would - // be in indeterminated state. - // The code KErrCompletion means that video reocording has been completed by timer - if ( aError && aError != KErrCompletion && aError != KErrDiskFull ) - { - CloseVideoRecording(); - } - - iVideoRecordingObserver->MevroVideoRecordingComplete( aError ); - } - - HTI_LOG_FUNC_IN("CEngineVideoRecording::MvruoRecordComplete"); - } - -void CEngineVideoRecording::MvruoEvent(const TMMFEvent& /*aEvent*/) - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::MvruoEvent"); - HTI_LOG_FUNC_OUT("CEngineVideoRecording::MvruoEvent"); - } - -void CEngineVideoRecording::ReserveComplete( - TInt aError ) - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::ReserveComplete"); - - if ( aError == KErrNone ) - { - iReserved = ETrue; - PowerOn(); - } - else - { - iVideoRecordingObserver->MevroInitComplete( aError ); - } - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::ReserveComplete"); - } - - -void CEngineVideoRecording::PowerOnComplete( - TInt aError ) - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::PowerOnComplete"); - - if ( aError == KErrNone ) - { - iPowerOn = ETrue; - } - - iVideoRecordingObserver->MevroInitComplete( aError ); - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::PowerOnComplete"); - } - -void CEngineVideoRecording::HandleEvent( const TECAMEvent& aEvent) - { - HTI_LOG_FUNC_IN("CEngineVideoRecording::HandleEvent"); - if (aEvent.iEventType == KUidECamEventCameraNoLongerReserved) - { - HTI_LOG_TEXT("CEngineVideoRecording::HandleEvent() KUidECamEventCameraNoLongerReserved"); - iPowerOn = EFalse; - iReserved = EFalse; - iVideoPrepared = EFalse; - iVideoOpened = EFalse; - iVideoRecordingObserver->MevroInitComplete(KErrInUse); // Tell the client that other application has taken the camera - } - else if (aEvent.iEventType == KUidECamEventPowerOnComplete) - { - HTI_LOG_TEXT("CEngineVideoRecording::HandleEvent() KUidECamEventPowerOnComplete"); - PowerOnComplete(aEvent.iErrorCode); - } - else if (aEvent.iEventType == KUidECamEventReserveComplete) - { - HTI_LOG_TEXT("CEngineVideoRecording::HandleEvent() KUidECamEventReserveComplete"); - ReserveComplete(aEvent.iErrorCode); - } - - HTI_LOG_FUNC_OUT("CEngineVideoRecording::HandleEvent"); - }