--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imagingandcamerafws/camerafw/testapps/testcameraapp/TestCameraApp.cpp Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,744 @@
+// Copyright (c) 2002-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:
+//
+
+#include <eikenv.h>
+#include <testcameraapp.rsg>
+#include "TestCameraApp.h"
+#include "TestCameraApp.hrh"
+#include "TestCamera.h"
+
+const TInt KMaxErrLength=50;
+_LIT(KErrorFormat,"Error - %d (%S)");
+
+//
+// CTCamAppUi
+//
+
+void CTCamAppUi::ConstructL()
+ {
+ CEikAppUi::ConstructL();
+ iAppView = new(ELeave) CTCamAppView;
+ iAppView->ConstructL(ClientRect());
+ AddToStackL(iAppView);
+
+ // The plugin relies on a specific file existing
+ // hence this has to be created.
+ CreateDependencyFileL();
+
+ iCamera = CCamera::NewL(*this,0,0);
+
+ iCameraAdvSet = CCamera::CCameraAdvancedSettings::NewL(*iCamera);
+ iCameraPresets = CCamera::CCameraPresets::NewL(*iCamera);
+ iCameraImgProc = CCamera::CCameraImageProcessing::NewL(*iCamera);
+ iCameraSnapshot = CCamera::CCameraSnapshot::NewL(*iCamera);
+
+ iCamera->Reserve();
+ }
+
+CTCamAppUi::~CTCamAppUi()
+ {
+ if (iCamera!=NULL)
+ iCamera->Release();
+
+ delete iCameraSnapshot;
+ delete iCameraImgProc;
+ delete iCameraPresets;
+ delete iCameraAdvSet;
+ delete iCamera;
+
+ // as the application is being closed, delete the file
+ // so that the plugin will not be reactivated accidentaly
+ RemoveDependencyFile();
+
+ if (iAppView)
+ {
+ RemoveFromStack(iAppView);
+ delete iAppView;
+ }
+ }
+
+void CTCamAppUi::HandleCommandL(TInt aCommand)
+ {
+ switch (aCommand)
+ {
+ case ETCamCmdPowerOn:
+ iCamera->PowerOn();
+ break;
+ case ETCamCmdPowerOff:
+ iCamera->PowerOff();
+ break;
+ case ETCamCmdViewFinder:
+ ViewFinderL();
+ break;
+ case ETCamCmdCaptureImage:
+ SingleShotL();
+ break;
+ case ETCamCmdBurstMode:
+ BurstModeL();
+ break;
+ case ETCamCmdCaptureVideo:
+ CaptureVideoL();
+ break;
+ case ETCamCmdIncBrightness:
+ iCamera->SetBrightnessL(iCamera->Brightness() + 10);
+ break;
+ case ETCamCmdIncContrast:
+ iCamera->SetContrastL(iCamera->Contrast() + 10);
+ break;
+ case ETCamCmdDecBrightness:
+ iCamera->SetBrightnessL(iCamera->Brightness() - 10);
+ break;
+ case ETCamCmdDecContrast:
+ iCamera->SetContrastL(iCamera->Contrast() - 10);
+ break;
+ case ETCamCmdResetBrightness:
+ iCamera->SetBrightnessL(0);
+ break;
+ case ETCamCmdResetContrast:
+ iCamera->SetContrastL(0);
+ break;
+ case ETCamCmdIncNumBurstImages:
+ iCameraAdvSet->SetBurstImages(iCameraAdvSet->BurstImages() + 1);
+ break;
+ case ETCamCmdDecNumBurstImages:
+ iCameraAdvSet->SetBurstImages(iCameraAdvSet->BurstImages() - 1);
+ break;
+ case ETCamCmdResetNumBurstImages:
+ iCameraAdvSet->SetBurstImages(4);
+ break;
+
+ case ETCamCmdFactoryPreset:
+ iCameraPresets->SetPreset(KUidECamPresetFactoryDefault);
+ break;
+
+ case ETCamCmdOutdoorPreset:
+ iCameraPresets->SetPreset(KUidECamPresetOutdoor);
+ break;
+
+ case ETCamCmdOutdoorSportPreset:
+ iCameraPresets->SetPreset(KUidECamPresetOutdoorSport);
+ break;
+
+ case ETCamCmdFogPreset:
+ iCameraPresets->SetPreset(KUidECamPresetFog);
+ break;
+
+ case ETCamCmdNightPartyIndoorPreset:
+ iCameraPresets->SetPreset(KUidECamPresetNightPartyIndoor);
+ break;
+
+ case ETCamCmdTextDocumentPreset:
+ iCameraPresets->SetPreset(KUidECamPresetTextDocument);
+ break;
+
+ case ETCamCmdImgProcIncBrightness:
+ IncImgProcAdjustmentL(KUidECamEventImageProcessingAdjustBrightness);
+ break;
+
+ case ETCamCmdImgProcDecBrightness:
+ DecImgProcAdjustmentL(KUidECamEventImageProcessingAdjustBrightness);
+ break;
+
+ case ETCamCmdImgProcIncContrast:
+ IncImgProcAdjustmentL(KUidECamEventImageProcessingAdjustContrast);
+ break;
+
+ case ETCamCmdImgProcDecContrast:
+ DecImgProcAdjustmentL(KUidECamEventImageProcessingAdjustContrast);
+ break;
+
+ case ETCamCmdEnableSnapshot:
+ EnableSnapshotL();
+ break;
+
+ case ETCamCmdDisableSnapshot:
+ DisableSnapshot();
+ break;
+
+ case EEikCmdExit:
+ Exit();
+ break;
+ }
+ }
+
+void CTCamAppUi::ViewFinderL()
+ {
+ TSize imageSize;
+ iCamera->EnumerateCaptureSizes(imageSize,1,CCamera::EFormatFbsBitmapColor16M);
+ const TPoint pos = iAppView->DrawBorders(imageSize);
+ TRect screenRect(pos,imageSize);
+ TRect clipRect;
+
+ if (!iCamera->ViewFinderActive())
+ {
+ iCamera->StartViewFinderDirectL(iCoeEnv->WsSession(),*iCoeEnv->ScreenDevice(),*iAppView->DrawableWindow(),screenRect,clipRect);
+ }
+ else
+ {
+ iCamera->StopViewFinder();
+ }
+ }
+
+void CTCamAppUi::BurstModeL()
+ {
+ if (!iCameraAdvSet)
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+ if(CCamera::CCameraAdvancedSettings::EDriveModeBurst & iCameraAdvSet->SupportedDriveModes() )
+ {
+ iCameraAdvSet->SetDriveMode(CCamera::CCameraAdvancedSettings::EDriveModeBurst);
+ }
+ else
+ {
+ User::Leave(KErrNotSupported);
+ }
+ }
+
+void CTCamAppUi::EnableSnapshotL()
+ {
+ if(!iCameraSnapshot->IsSnapshotActive())
+ {
+ TSize size;
+ iCamera->EnumerateCaptureSizes(size,1,CCamera::EFormatFbsBitmapColor16M);
+ if(iCameraSnapshot->SupportedFormats() & CCamera::EFormatFbsBitmapColor4K)
+ {
+ iCameraSnapshot->PrepareSnapshotL(CCamera::EFormatFbsBitmapColor4K, TPoint(0,0), size, KRgbWhite, EFalse);
+ iCameraSnapshot->StartSnapshot();
+ }
+ }
+ }
+
+void CTCamAppUi::DisableSnapshot()
+ {
+ if(iCameraSnapshot->IsSnapshotActive())
+ {
+ iCameraSnapshot->StopSnapshot();
+ }
+ }
+
+void CTCamAppUi::SingleShotL()
+ {
+ if (!iCameraAdvSet)
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+ if(CCamera::CCameraAdvancedSettings::EDriveModeSingleShot & iCameraAdvSet->SupportedDriveModes() )
+ {
+ iCameraAdvSet->SetDriveMode(CCamera::CCameraAdvancedSettings::EDriveModeSingleShot);
+ }
+ else
+ {
+ User::Leave(KErrNotSupported);
+ }
+ }
+
+void CTCamAppUi::CaptureImageL()
+ {
+ TSize size;
+ iCamera->EnumerateCaptureSizes(size,1,CCamera::EFormatFbsBitmapColor16M);
+ iCamera->PrepareImageCaptureL(CCamera::EFormatFbsBitmapColor16M,1);
+ iCamera->CaptureImage();
+ }
+
+void CTCamAppUi::CaptureVideoL()
+ {
+ if (!iCamera->VideoCaptureActive())
+ {
+ iCameraSnapshot->StopSnapshot();
+
+ TSize size;
+ TReal32 rate = 0;
+ iCamera->EnumerateVideoFrameSizes(size,0,CCamera::EFormatFbsBitmapColor16M);
+ iCamera->EnumerateVideoFrameRates(rate,0,CCamera::EFormatFbsBitmapColor16M,0);
+ iCamera->PrepareVideoCaptureL(CCamera::EFormatFbsBitmapColor16M,0,0,2,1);
+ iCamera->StartVideoCapture();
+ }
+ else
+ {
+ iCamera->StopVideoCapture();
+ }
+ }
+
+void CTCamAppUi::IncImgProcAdjustmentL(TUid aTransformation)
+ {
+ if(!iCameraImgProc)
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+ RArray<TUid> supportedTransformations;
+ CleanupClosePushL(supportedTransformations);
+ iCameraImgProc->GetSupportedTransformationsL(supportedTransformations);
+
+ TInt error = supportedTransformations.Find(aTransformation);
+ CleanupStack::PopAndDestroy();
+
+ if(error == KErrNotFound)
+ {
+ User::Leave(error);
+ }
+
+ TInt valuetx;
+ User::LeaveIfError(iCameraImgProc->GetTransformationValue(aTransformation, valuetx));
+
+ iCameraImgProc->SetTransformationValue(aTransformation, valuetx + 10);
+ }
+
+void CTCamAppUi::DecImgProcAdjustmentL(TUid aTransformation)
+ {
+ if(!iCameraImgProc)
+ {
+ User::Leave(KErrNotSupported);
+ }
+
+ RArray<TUid> supportedTransformations;
+ CleanupClosePushL(supportedTransformations);
+ iCameraImgProc->GetSupportedTransformationsL(supportedTransformations);
+
+ TInt error = supportedTransformations.Find(aTransformation);
+ CleanupStack::PopAndDestroy();
+
+ if(error == KErrNotFound)
+ {
+ User::Leave(error);
+ }
+
+ TInt valuetx;
+ User::LeaveIfError(iCameraImgProc->GetTransformationValue(aTransformation, valuetx));
+
+ iCameraImgProc->SetTransformationValue(aTransformation, valuetx - 10);
+ }
+
+void CTCamAppUi::ReserveComplete(TInt /*aError*/)
+ {
+ }
+
+void CTCamAppUi::PowerOnComplete(TInt /*aError*/)
+ {
+ }
+
+void CTCamAppUi::ViewFinderFrameReady(CFbsBitmap& /*aFrame*/)
+ {
+ }
+
+void CTCamAppUi::ImageReady(CFbsBitmap* aBitmap,HBufC8* /*aData*/,TInt aError)
+ {
+ TBuf<KMaxErrLength> msgBuffer;
+ _LIT(KErrMessage,"CTCamAppUi::ImageReady");
+ if (aBitmap)
+ {
+ iAppView->DrawImage(aBitmap);
+ delete aBitmap;
+ }
+ if (aError)
+ {
+ msgBuffer.Format(KErrorFormat,aError,&KErrMessage);
+ iEikonEnv->InfoMsg(msgBuffer);
+ }
+ }
+
+void CTCamAppUi::FrameBufferReady(MFrameBuffer* aFrameBuffer,TInt aError)
+ {
+ TBuf<KMaxErrLength> msgBuffer;
+ _LIT(KErrMessage,"CTCamAppUi::FrameBufferReady");
+ if (aError)
+ {
+ msgBuffer.Format(KErrorFormat,aError,&KErrMessage);
+ iEikonEnv->InfoMsg(msgBuffer);
+ return;
+ }
+ TRAPD(error,iAppView->DrawImage(aFrameBuffer->FrameL(0)));
+ aFrameBuffer->Release();
+ if (error)
+ {
+ msgBuffer.Format(KErrorFormat,error,&KErrMessage);
+ iEikonEnv->InfoMsg(msgBuffer);
+ }
+ }
+
+void CTCamAppUi::HandleEvent(const TECAMEvent& aEvent)
+ {
+ if(!TECAMEvent2::IsEventEncapsulationValid(aEvent))
+ {
+ HandleEvent1(aEvent);
+ }
+ else
+ {
+ HandleEvent2(static_cast<const TECAMEvent2&>(aEvent));
+ }
+ }
+
+void CTCamAppUi::HandleEvent2(const TECAMEvent2& /*aEvent2*/)
+ {
+
+ }
+
+void CTCamAppUi::HandleEvent1(const TECAMEvent& aEvent)
+ {
+ TBuf<KMaxErrLength> msgBuffer;
+
+ switch(aEvent.iEventType.iUid)
+ {
+ case KUidECamEventCameraSettingDriveModeUidValue:
+ {
+ if(!aEvent.iErrorCode)
+ {
+ TRAPD(error,CaptureImageL());
+ if(error)
+ {
+ _LIT(KErrMessage,"CaptureImage");
+ msgBuffer.Format(KErrorFormat,error,&KErrMessage);
+ iEikonEnv->InfoMsg(msgBuffer);
+ }
+ }
+ else
+ {
+ _LIT(KErrMessage,"SettingDriveMode");
+ msgBuffer.Format(KErrorFormat,aEvent.iErrorCode,&KErrMessage);
+ iEikonEnv->InfoMsg(msgBuffer);
+ }
+ break;
+ }
+ case KUidECamEventBurstImagesUidValue:
+ {
+ if(aEvent.iErrorCode)
+ {
+ _LIT(KErrMessage,"SettingNumOfBurstImage");
+ msgBuffer.Format(KErrorFormat,aEvent.iErrorCode,&KErrMessage);
+ iEikonEnv->InfoMsg(msgBuffer);
+ }
+ break;
+ }
+ case KUidECamEventSnapshotUidValue:
+ {
+ if(aEvent.iErrorCode)
+ {
+ _LIT(KErrMessage,"SnapshotDataNotification");
+ msgBuffer.Format(KErrorFormat,aEvent.iErrorCode,&KErrMessage);
+ iEikonEnv->InfoMsg(msgBuffer);
+ }
+ else
+ {
+ if(iCamera->ViewFinderActive())
+ {
+ iCamera->StopViewFinder();
+ }
+
+ TRAPD(error, SnapshotDataDisplayL());
+
+ if(error != KErrNone)
+ {
+ _LIT(KErrMessage,"SnapshotDataDisplay");
+ msgBuffer.Format(KErrorFormat,error,&KErrMessage);
+ iEikonEnv->InfoMsg(msgBuffer);
+ }
+ }
+ break;
+ }
+
+ case KUidECamPresetFactoryDefaultUidValue:
+ {
+ if(aEvent.iErrorCode)
+ {
+ _LIT(KErrMessage,"FactoryPreset");
+ msgBuffer.Format(KErrorFormat,aEvent.iErrorCode,&KErrMessage);
+ iEikonEnv->InfoMsg(msgBuffer);
+ }
+ break;
+ }
+
+ case KUidECamPresetOutdoorUidValue:
+ {
+ if(aEvent.iErrorCode)
+ {
+ _LIT(KErrMessage,"OutdoorPreset");
+ msgBuffer.Format(KErrorFormat,aEvent.iErrorCode,&KErrMessage);
+ iEikonEnv->InfoMsg(msgBuffer);
+ }
+ break;
+ }
+
+ case KUidECamPresetOutdoorSportUidValue:
+ {
+ if(aEvent.iErrorCode)
+ {
+ _LIT(KErrMessage,"OutdoorSportPreset");
+ msgBuffer.Format(KErrorFormat,aEvent.iErrorCode,&KErrMessage);
+ iEikonEnv->InfoMsg(msgBuffer);
+ }
+ break;
+ }
+
+ case KUidECamPresetFogUidValue:
+ {
+ if(aEvent.iErrorCode)
+ {
+ _LIT(KErrMessage,"FogPreset");
+ msgBuffer.Format(KErrorFormat,aEvent.iErrorCode,&KErrMessage);
+ iEikonEnv->InfoMsg(msgBuffer);
+ }
+ break;
+ }
+
+ case KUidECamPresetNightPartyIndoorUidValue:
+ {
+ if(aEvent.iErrorCode)
+ {
+ _LIT(KErrMessage,"NightPartyIndoorPreset");
+ msgBuffer.Format(KErrorFormat,aEvent.iErrorCode,&KErrMessage);
+ iEikonEnv->InfoMsg(msgBuffer);
+ }
+ break;
+ }
+
+ case KUidECamPresetTextDocumentUidValue:
+ {
+ if(aEvent.iErrorCode)
+ {
+ _LIT(KErrMessage,"TextDocumentPreset");
+ msgBuffer.Format(KErrorFormat,aEvent.iErrorCode,&KErrMessage);
+ iEikonEnv->InfoMsg(msgBuffer);
+ }
+ break;
+ }
+
+ case KUidECamEventImageProcessingAdjustBrightnessUidValue:
+ {
+ if(aEvent.iErrorCode)
+ {
+ _LIT(KErrMessage,"ImageProcessingAdjustBrightness");
+ msgBuffer.Format(KErrorFormat,aEvent.iErrorCode,&KErrMessage);
+ iEikonEnv->InfoMsg(msgBuffer);
+ }
+ break;
+ }
+
+ case KUidECamEventImageProcessingAdjustContrastUidValue:
+ {
+ if(aEvent.iErrorCode)
+ {
+ _LIT(KErrMessage,"ImageProcessingAdjustContrast");
+ msgBuffer.Format(KErrorFormat,aEvent.iErrorCode,&KErrMessage);
+ iEikonEnv->InfoMsg(msgBuffer);
+ }
+ break;
+ }
+
+ default:
+ break;
+ }
+ }
+
+void CTCamAppUi::ViewFinderReady(MCameraBuffer& /*aCameraBuffer*/,TInt /*aError*/)
+ {
+
+ }
+
+void CTCamAppUi::ImageBufferReady(MCameraBuffer& aCameraBuffer,TInt aError)
+ {
+ TBuf<KMaxErrLength> msgBuffer;
+ _LIT(KErrMessage,"CTCamAppUi::ImageBufferReady");
+ if(aError)
+ {
+ msgBuffer.Format(KErrorFormat,aError,&KErrMessage);
+ iEikonEnv->InfoMsg(msgBuffer);
+ return;
+ }
+ if(!iCameraSnapshot->IsSnapshotActive())
+ {
+ if (iCamera->ViewFinderActive())
+ {
+ iCamera->StopViewFinder();
+ }
+ TRAP(aError,iAppView->DrawImage(&aCameraBuffer.BitmapL(0)));
+ }
+
+ aCameraBuffer.Release();
+
+ if (aError)
+ {
+ msgBuffer.Format(KErrorFormat,aError,&KErrMessage);
+ iEikonEnv->InfoMsg(msgBuffer);
+ }
+
+ }
+
+void CTCamAppUi::VideoBufferReady(MCameraBuffer& aCameraBuffer,TInt aError)
+ {
+ TBuf<KMaxErrLength> msgBuffer;
+ _LIT(KErrMessage,"CTCamAppUi::FrameBufferReady");
+ if (aError)
+ {
+ msgBuffer.Format(KErrorFormat,aError,&KErrMessage);
+ iEikonEnv->InfoMsg(msgBuffer);
+ return;
+ }
+ TRAPD(error,iAppView->DrawImage(&aCameraBuffer.BitmapL(0)));
+ aCameraBuffer.Release();
+ if (error)
+ {
+ msgBuffer.Format(KErrorFormat,error,&KErrMessage);
+ iEikonEnv->InfoMsg(msgBuffer);
+ }
+ }
+
+void CTCamAppUi::SnapshotDataDisplayL()
+ {
+ RArray<TInt> array;
+ array.Reset();
+ RTestCameraFrameBuffer& buffer = static_cast<RTestCameraFrameBuffer&>(iCameraSnapshot->SnapshotDataL(array));
+ iAppView->DrawImage(&buffer.BitmapL(0));
+ array.Close();
+ buffer.Release();
+ }
+
+void CTCamAppUi::CreateDependencyFileL()
+ {
+ // enforce dependency
+ // create the file the plugin depends on.
+ User::LeaveIfError(ifsSession.Connect());
+ RFile file;
+ TInt err = file.Replace(ifsSession, KTestCameraPluginName, EFileShareAny);
+ file.Close();
+ if(err != KErrNone)
+ {
+ User::LeaveIfError(KErrNotSupported);
+ }
+ }
+
+void CTCamAppUi::RemoveDependencyFile()
+ {
+ ifsSession.Delete(KTestCameraPluginName);
+ ifsSession.Close();
+ }
+
+//
+// CTCamAppView
+//
+
+CTCamAppView::CTCamAppView():
+ CCoeControl()
+ {
+ }
+
+void CTCamAppView::ConstructL(const TRect& /*aRect*/)
+ {
+ CreateWindowL();
+ EnableDragEvents();
+ SetExtentToWholeScreen();
+ ActivateL();
+ }
+
+CTCamAppView::~CTCamAppView()
+ {
+ }
+
+void CTCamAppView::DrawImage(CFbsBitmap* aImage) const
+ {
+ CWindowGc& gc = SystemGc();
+ gc.Activate(Window());
+ TRect drawRect=Rect();
+ TPoint pos;
+ pos.iX = (3 * drawRect.iBr.iX / 4) - (aImage->SizeInPixels().iWidth / 2);
+ pos.iY = (drawRect.iBr.iY - aImage->SizeInPixels().iWidth) / 2;
+ gc.BitBlt(pos,aImage);
+ TRect border(pos,aImage->SizeInPixels());
+ border.Grow(1,1);
+ gc.DrawRect(border);
+ gc.Deactivate();
+ iCoeEnv->WsSession().Flush();
+ }
+
+void CTCamAppView::Draw(const TRect& /*aRect*/) const
+ {
+ CWindowGc& gc = SystemGc();
+ TRect drawRect(Rect());
+ drawRect.Shrink(1,1);
+ gc.DrawRect(drawRect);
+ gc.Clear();
+ }
+
+TPoint CTCamAppView::DrawBorders(const TSize& aSize) const
+ {
+ CWindowGc& gc = SystemGc();
+ gc.Activate(Window());
+ TRect drawRect(Rect());
+ TPoint pos;
+ pos.iX = (drawRect.iBr.iX / 4) - (aSize.iWidth / 2);
+ pos.iY = (drawRect.iBr.iY - aSize.iWidth) / 2;
+ TRect border(pos,aSize);
+ border.Grow(1,1);
+ gc.SetPenColor(KRgbBlack);
+ gc.DrawRect(border);
+ gc.Deactivate();
+ iCoeEnv->WsSession().Flush();
+ return pos;
+ }
+
+//
+// CTCamDocument
+//
+
+CTCamDocument::CTCamDocument(CEikApplication& aApp)
+ : CEikDocument(aApp)
+ {
+ }
+
+CEikAppUi* CTCamDocument::CreateAppUiL()
+ {
+ return new(ELeave) CTCamAppUi;
+ }
+
+//
+// CTCamApp
+//
+
+TUid CTCamApp::AppDllUid() const
+ {
+ return KUidTestCameraApp;
+ }
+
+CApaDocument* CTCamApp::CreateDocumentL()
+ {
+ return new(ELeave) CTCamDocument(*this);
+ }
+
+
+
+//
+// Base factory function
+//
+
+#include <eikstart.h>
+LOCAL_C CApaApplication* NewApplication()
+ {
+ return new CTCamApp;
+ }
+
+//
+// EXE Entry point
+//
+
+GLDEF_C TInt E32Main()
+ {
+ return EikStart::RunApplication(NewApplication);
+ }
+
+
+
+