diff -r 792dfc98fb3b -r 8c55c525d5d7 camerauis/cameraapp/generic/src/CamAppController.cpp --- a/camerauis/cameraapp/generic/src/CamAppController.cpp Fri Mar 12 15:41:04 2010 +0200 +++ b/camerauis/cameraapp/generic/src/CamAppController.cpp Mon Mar 15 12:39:00 2010 +0200 @@ -5642,6 +5642,10 @@ void CCamAppController::GenerateNextVideoFilePathL( TBool aForcePhoneMem ) { PRINT1( _L( "Camera => CCamAppController::GenerateNextVideoFilePathL, force phone mem:%d" ), aForcePhoneMem ) + if( aForcePhoneMem ) + { + ForceUsePhoneMemoryL( ETrue ); + } TInt store = IntegerSettingValue( ECamSettingItemVideoMediaStorage ); TBuf extension; @@ -5937,9 +5941,9 @@ OstTrace0( CAMERAAPP_PERFORMANCE, DUP1_CCAMAPPCONTROLLER_HANDLESAVEEVENT, "e_CAM_APP_PREP_FOR_NEXT_SHOT 1" ); //CCORAPP_PREP_FOR_NEXT_SHOT_START HandleCaptureCompletion(); NotifyControllerObservers( ECamEventCaptureComplete, KErrNone ); + iSaveStarted = ETrue; NotifyControllerObservers( ECamEventSaveComplete ); iCaptureRequested = EFalse; - iSaveStarted = ETrue; OstTrace0( CAMERAAPP_PERFORMANCE, DUP4_CCAMAPPCONTROLLER_HANDLESAVEEVENT, "e_CAM_APP_PREP_FOR_NEXT_SHOT 0" ); //CCORAPP_PREP_FOR_NEXT_SHOT_END OstTrace0( CAMERAAPP_PERFORMANCE, DUP5_CCAMAPPCONTROLLER_HANDLESAVEEVENT, "e_CAM_PRI_SHOT_TO_SHOT 0" ); //CCORAPP_PRI_SHOT_TO_SHOT_END } @@ -6180,9 +6184,15 @@ { PRINT( _L("Camera <> CCamAppController: status in KErrNone..") ); __ASSERT_ALWAYS( aBitmap, CamPanic( ECamPanicNullPointer ) ); - + + // The secondary camera postcapture snapshot is rotated here. + // Due to the viewfinder mirroring along the landscape axis the + // portrait (or upside down portrait) postcapture snapshot would + // otherwise be upside down. + // This affects the snapshot seen in postcapture view. + if( iInfo.iActiveCamera == ECamActiveCameraSecondary && - iCaptureOrientation == ECamOrientation90 && + iCaptureOrientation == ECamOrientation180 && ECamSettOn == IntegerSettingValue( ECamSettingItemShowCapturedPhoto ) ) { PRINT( _L( "Camera <> Rotate portrait secondary camera snapshot image 180 degrees" ) ) @@ -6329,6 +6339,11 @@ NotifyControllerObservers( ECamEventImageData ); } PRINT1( _L("Camera <> CCamAppController::HandleImageCaptureEventL array count:%d"), BurstCaptureArray()->Count() ); + + // Snapshots are rotated here if necessary, so that the thumbnails created by + // ThumbNailManager accurately represent the actual images. + // This affects the thumbnails seen in Photos. + // check if snapshot bitmap needs to be rotated before creating a thumbnail from it TBool rotate( ( ECamSettOn == iSettingsModel->IntegerSettingValue( ECamSettingItemImageRotation ) || iInfo.iActiveCamera == ECamActiveCameraSecondary ) && @@ -7404,6 +7419,10 @@ if ( KSensrvChannelTypeIdOrientationData == aChannel.GetChannelInfo().iChannelType ) { + // Rotation is used in primary camera whenever the feature is enabled by user. + // A rotation is always set for secondary camera in portrait and upside down + // portrait orientations due to the the viewfinder mirroring along the landscape axis. + // This affects the final JPEG file. TBool rotate( ECamSettOn == iSettingsModel->IntegerSettingValue( ECamSettingItemImageRotation ) || iInfo.iActiveCamera == ECamActiveCameraSecondary ); @@ -7414,7 +7433,9 @@ aChannel.GetData( orientationPackage ); iImageOrientation = - MapSensorOrientatio2CamOrientation( orientationData.iDeviceOrientation, iLastImageOrientation ); + MapSensorOrientatio2CamOrientation( orientationData.iDeviceOrientation, + iLastImageOrientation, + iInfo.iActiveCamera ); } else { @@ -7529,13 +7550,17 @@ // TCamImageOrientation CCamAppController::MapSensorOrientatio2CamOrientation( - const TSensrvOrientationData::TSensrvDeviceOrientation& aSensorOrientation, TCamImageOrientation aLastImageOrientation ) + const TSensrvOrientationData::TSensrvDeviceOrientation& aSensorOrientation, TCamImageOrientation aLastImageOrientation, + TCamActiveCamera aActiveCamera ) { PRINT1 ( _L("Camera => CCamAppController::MapSensorOrientatio2CamOrientation aSensorOrientation: %d"), aSensorOrientation ); TCamImageOrientation cameraOrientation( ECamOrientation0 ); - switch( aSensorOrientation ) + // Primary camera rotation + if ( aActiveCamera == ECamActiveCameraPrimary ) + { + switch( aSensorOrientation ) { case TSensrvOrientationData::EOrientationDisplayUpwards: // If coming from upside down portrait... @@ -7594,6 +7619,24 @@ PRINT( _L("Camera <> Unexpected orientation value") ); break; } + } + // Secondary camera rotations + else if ( aActiveCamera == ECamActiveCameraSecondary ) + { + if ( aSensorOrientation == TSensrvOrientationData::EOrientationDisplayUp ) // Portrait + { + cameraOrientation = ECamOrientation180; + } + else if ( aSensorOrientation == TSensrvOrientationData::EOrientationDisplayDown ) // Upside down portrait + { + cameraOrientation = ECamOrientation180; + } + else + { + cameraOrientation = ECamOrientation0; + } + } + PRINT1( _L("Camera <= CCamAppController::MapSensorOrientatio2CamOrientation, return [%s]"), KCamOrientationNames[cameraOrientation] ); @@ -7601,7 +7644,7 @@ } // --------------------------------------------------------------------------- -// MapSensorOrientatio2CamOrientation +// MapCamOrientation2RotationAngle // --------------------------------------------------------------------------- // CBitmapRotator::TRotationAngle @@ -10170,10 +10213,18 @@ // --------------------------------------------------------------------------- // TTimeIntervalMicroSeconds -CCamAppController::CalculateVideoTimeRemainingL(const TCamMediaStorage aStorage) +CCamAppController::CalculateVideoTimeRemainingL( TCamMediaStorage aStorage ) { RFs& fs = CEikonEnv::Static()->FsSession(); TInt drive = 0; + // Check if setting the new video path is pending. The path may not have been + // set if camera controller was busy or video mode not initialized. This + // happens e.g. while in Settings menu. + // If yes, use the storage media that is going to be used next. + if( iSetNewPathnamesPending != ECamMediaStorageNone ) + { + aStorage = iSetNewPathnamesPending; + } if(aStorage == ECamMediaStorageCurrent) { const TDesC& filename = CurrentVideoFileName(); @@ -11087,5 +11138,14 @@ return qualityChanged; } +// --------------------------------------------------------------------------- +// CCamAppController::IsSaveStarted +// +// --------------------------------------------------------------------------- +// +TBool CCamAppController::IsSaveStarted() + { + return iSaveStarted; + } // End of File