diff -r 3075d9b614e6 -r 0e652f8f1fbd camerauis/cameraxui/cxui/src/main.cpp --- a/camerauis/cameraxui/cxui/src/main.cpp Thu May 13 21:30:19 2010 +0300 +++ b/camerauis/cameraxui/cxui/src/main.cpp Thu Jul 15 01:55:05 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2009-2010 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" @@ -15,34 +15,39 @@ * */ -#include -#include #include #include // needed for localization -#include #include +#include #include -#include + +#ifdef Q_OS_SYMBIAN +#include +#include +#endif // Q_OS_SYMBIAN #include "cxeengine.h" #include "cxecameradevicecontrol.h" #include "cxuiapplication.h" #include "cxuiviewmanager.h" +#include "cxuiapplicationstate.h" +#include "cxuienums.h" #include "cxutils.h" #include "cxuiserviceprovider.h" +#ifdef Q_OS_SYMBIAN #include "OstTraceDefinitions.h" #ifdef OST_TRACE_COMPILER_IN_USE #include "mainTraces.h" -#endif +#endif // OST_TRACE_COMPILER_IN_USE +#endif // Q_OS_SYMBIAN using namespace Cxe; // CONSTANTS -const QString TRANSLATIONS_PATH = "z:/resource/qt/translations/"; -const QString TRANSLATIONS_FILE_NAME = "camera_"; -const QString COMMON_TRANSLATIONS_FILE_NAME = "common_"; +const QString TRANSLATIONS_PATH = "/resource/qt/translations/"; +const QString TRANSLATIONS_FILE = "camera"; int main(int argc, char *argv[]) { @@ -51,6 +56,11 @@ Q_INIT_RESOURCE(cxui); + // Use software rendering / raster graphics system to save GPU memory. + CX_DEBUG(("CxUI: Take raster graphics system into use..")); + QApplication::setGraphicsSystem("raster"); + CX_DEBUG(("CxUI: ..raster graphics system in use")); + OstTrace0( camerax_performance, DUP1__MAIN, "msg: e_CX_HBAPP_CREATION 1" ); CxuiApplication app(argc, argv); OstTrace0( camerax_performance, DUP2__MAIN, "msg: e_CX_HBAPP_CREATION 0" ); @@ -59,76 +69,97 @@ // Reserve and power on can then proceed in parallel with // ui construction. OstTrace0( camerax_performance, DUP7__MAIN, "msg: e_CX_CREATE_ENGINE 1" ); - CxeEngine *eng = CxeEngine::createEngine(); + CxeEngine *engine = CxeEngine::createEngine(); OstTrace0( camerax_performance, DUP8__MAIN, "msg: e_CX_CREATE_ENGINE 0" ); - if (XQServiceUtil::isService()) { + if (app.activateReason() == Hb::ActivationReasonService) { + CX_DEBUG(("CxUI: Camera started as service")); // Embedded mode. Engine is inited to correct mode // by service provider when request arrives CX_DEBUG(("CxUI: creating serviceprovider")); - CxuiServiceProvider::create(eng); + CxuiServiceProvider::create(engine); CX_DEBUG(("CxUI: done")); - } else { - // Normal mode. Init engine now. - OstTrace0( camerax_performance, DUP9__MAIN, "msg: e_CX_INIT_ENGINE 1" ); - //! @todo temporarily commented as part of a hack to change the startup sequence - // to avoid GOOM issues - //eng->initMode(Cxe::ImageMode); - OstTrace0( camerax_performance, DUP10__MAIN, "msg: e_CX_INIT_ENGINE 0" ); - } - - // Load the language specific localization files: application + common - OstTrace0( camerax_performance, DUP3__MAIN, "msg: e_CX_LOAD_TRANSLATIONS 1" ); - QTranslator translator; - QString lang = QLocale::system().name(); + } else if (app.activateReason() == Hb::ActivationReasonActivity) { + CX_DEBUG(("CxUI: Camera started as activity")); + Cxe::CameraMode mode = Cxe::ImageMode; + QString activityId = app.activateId(); + if (activityId == CxuiActivityIds::VIDEO_PRECAPTURE_ACTIVITY || + activityId == CxuiActivityIds::VIDEO_POSTCAPTURE_ACTIVITY) { + mode = Cxe::VideoMode; + } - CX_DEBUG(("CxUI: loading translation")); - bool ret = false; - ret = translator.load(TRANSLATIONS_PATH + TRANSLATIONS_FILE_NAME + lang); - CX_DEBUG(("load ok=%d", ret)); - app.installTranslator( &translator ); + if (activityId == CxuiActivityIds::STILL_PRECAPTURE_ACTIVITY || + activityId == CxuiActivityIds::VIDEO_PRECAPTURE_ACTIVITY) { + // init engine only if going to pre-capture + engine->initMode(mode); + } else { + // in post-capture don't init but set the correct mode to engine + // so init can be done later + engine->setMode(mode); + } + } else { + CX_DEBUG(("CxUI: Camera started as normal app")); + // normal start + engine->initMode(engine->mode()); + } - QTranslator commonTranslator; - CX_DEBUG(("CxUI: loading common translation")); - ret = false; - ret = commonTranslator.load(TRANSLATIONS_PATH + COMMON_TRANSLATIONS_FILE_NAME + lang); - CX_DEBUG(("load ok=%d", ret)); - app.installTranslator(&commonTranslator); +#ifdef Q_OS_SYMBIAN + //!@todo: Yield run time to system to get enough resources released to start camera. + CX_DEBUG(("CxUI: yield control for resource freeing..")); + User::After(2*1000*1000); // 2s + CX_DEBUG(("CxUI: waiting done..")); +#endif // Q_OS_SYMBIAN + + // Load language specific application localization file, e.g. "camera_en.qm" + // Translations need to be loaded before any widgets are created. + CX_DEBUG(("CxUI: Load translations..")); + OstTrace0( camerax_performance, DUP3__MAIN, "msg: e_CX_LOAD_TRANSLATIONS 1" ); + HbTranslator translator(TRANSLATIONS_PATH, TRANSLATIONS_FILE); + // Load language specific common localization file + translator.loadCommon(); OstTrace0( camerax_performance, DUP4__MAIN, "msg: e_CX_LOAD_TRANSLATIONS 0" ); + CX_DEBUG(("CxUI: ..translations loaded")); + // Create main window OstTrace0( camerax_performance, DUP5__MAIN, "msg: e_CX_MAINWINDOW_CREATION 1" ); - HbMainWindow *mainWindow = new HbMainWindow(0, Hb::WindowFlagTransparent | - Hb::WindowFlagNoBackground); - mainWindow->setAttribute(Qt::WA_NoBackground); + HbMainWindow mainWindow(0, Hb::WindowFlagTransparent | Hb::WindowFlagNoBackground); + mainWindow.setAttribute(Qt::WA_NoBackground); OstTrace0( camerax_performance, DUP6__MAIN, "msg: e_CX_MAINWINDOW_CREATION 0" ); - OstTrace0( camerax_performance, DUP11__MAIN, "msg: e_CX_CREATE_VIEW_MANAGER 1" ); - CxuiViewManager *viewManager = new CxuiViewManager(app, *mainWindow, *eng); - OstTrace0( camerax_performance, DUP12__MAIN, "msg: e_CX_CREATE_VIEW_MANAGER 0" ); - + // Set main window to landscape and full screen OstTrace0( camerax_performance, DUP13__MAIN, "msg: e_CX_MAINWINDOW_SETORIENTATION 1" ); - mainWindow->setOrientation(Qt::Horizontal); + mainWindow.setOrientation(Qt::Horizontal); OstTrace0( camerax_performance, DUP14__MAIN, "msg: e_CX_MAINWINDOW_SETORIENTATION 0" ); + OstTrace0( camerax_performance, DUP15__MAIN, "msg: e_CX_MAINWINDOW_FULLSCREEN 1" ); - OstTrace0( camerax_performance, DUP15__MAIN, "msg: e_CX_MAINWINDOW_FULLSCREEN 1" ); - mainWindow->showFullScreen(); +#ifdef Q_OS_SYMBIAN + mainWindow.showFullScreen(); +#else + /* + * todo : check if this is an Orbit bug or if there's a better solution + */ + mainWindow.resize(640, 360); + mainWindow.setOrientation(Qt::Vertical, false); + mainWindow.show(); + mainWindow.setOrientation(Qt::Horizontal, false); +#endif //Q_OS_SYMBIAN OstTrace0( camerax_performance, DUP16__MAIN, "msg: e_CX_MAINWINDOW_FULLSCREEN 0" ); + // Create view manager + OstTrace0( camerax_performance, DUP11__MAIN, "msg: e_CX_CREATE_VIEW_MANAGER 1" ); + CxuiViewManager *viewManager = new CxuiViewManager(app, mainWindow, *engine); + OstTrace0( camerax_performance, DUP12__MAIN, "msg: e_CX_CREATE_VIEW_MANAGER 0" ); + + // Give main window id to engine for setting up viewfinder window behind it OstTrace0( camerax_performance, DUP17__MAIN, "msg: e_CX_PREPAREWINDOW 1" ); - viewManager->prepareWindow(); + engine->viewfinderControl().setWindow(mainWindow.effectiveWinId()); OstTrace0( camerax_performance, DUP18__MAIN, "msg: e_CX_PREPAREWINDOW 0" ); - //! @todo initMode call added here as a temporary hack to change the startup sequence - // in order to avoid GOOM issues - User::After(2000000); - eng->initMode(Cxe::ImageMode); + int returnValue = app.exec(); - // delete service provider instance - CxuiServiceProvider::destroy(); - delete viewManager; - delete mainWindow; - delete eng; + CxuiServiceProvider::destroy(); // delete service provider instance + delete engine; return returnValue; }