--- a/qtmobility/plugins/multimedia/symbian/camera/s60camerasession.cpp Fri Apr 16 15:51:22 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1530 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the Qt Mobility Components.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <BADESCA.H>
-
-#include <QtCore/qdebug.h>
-#include <QtCore/qstring.h>
-#include "s60camerasession.h"
-#include "s60viewfinderwidget.h"
-#include "s60videoencoder.h"
-#include "s60cameraservice.h"
-
-#include <fbs.h>
-#include <qglobal.h>
-#include <QDir>
-
-const int KSymbianImageQualityCoefficient = 25;
-
-#ifdef Q_CC_NOKIAX86
-_LIT8(KCameraTemp,"test data");
-#endif
-
-_LIT8(KMimeTypeMPEG4VSPL3, "video/mp4v-es; profile-level-id=3"); // MPEG-4 Visual Simple Profile Level 3
-_LIT8(KMimeTypeMPEG4VSPL4, "video/mp4v-es; profile-level-id=4"); // MPEG-4 Visual Simple Profile Level 4
-
-
-S60CameraSession::S60CameraSession(QObject *parent)
- : QObject(parent)
- , m_cameraEngine(NULL)
- , m_advancedSettings(NULL)
- , m_VFProcessor(NULL)
- , m_imageQuality(QtMedia::NormalQuality*KSymbianImageQualityCoefficient)
- , m_videoQuality(QtMedia::LowQuality*KSymbianImageQualityCoefficient)
- , m_captureSize(QSize())
- , m_state(QCamera::StoppedState)
- , m_pixelF(QVideoFrame::Format_RGB24)
- , m_deviceIndex(NULL)
- , m_error(NoError)
- , m_videoUtility(NULL)
- , m_VFWidgetSize(QSize())
- , m_captureState(ENotInitialized)
-{
- // set defaults so that camera works with both devices..
- m_currentcodec = defaultCodec();
- // create initial camera
- resetCamera();
-}
-
-S60CameraSession::~S60CameraSession()
-{
- delete m_videoUtility;
- m_videoUtility = NULL;
- delete m_advancedSettings;
- m_advancedSettings = NULL;
- delete m_cameraEngine;
- m_cameraEngine = NULL;
-}
-CCamera::TFormat S60CameraSession::defaultCodec()
-{
- if (m_deviceIndex == 0) {
- return CCamera::EFormatExif;
- }
- else {
- return CCamera::EFormatFbsBitmapColor64K;
- }
-}
-S60CameraSettings* S60CameraSession::advancedSettings()
-{
- return m_advancedSettings;
-}
-
-void S60CameraSession::resetCamera()
-{
- //qDebug() << "S60CameraSession::resetCamera START";
- delete m_videoUtility;
- m_videoUtility = NULL;
- delete m_advancedSettings;
- m_advancedSettings = NULL;
- delete m_cameraEngine;
- m_cameraEngine = NULL;
- m_error = KErrNone;
- m_state = QCamera::StoppedState;
- //qDebug() << "S60CameraSession::resetCamera. Creating new camera with index=" << m_deviceIndex;
- TRAPD(err,
- m_cameraEngine = CCameraEngine::NewL(m_deviceIndex, 0, this);
- m_advancedSettings = new S60CameraSettings(this, m_cameraEngine);
- m_videoUtility = CVideoRecorderUtility::NewL(*this);
- );
- setError(err);
-
- updateVideoCaptureCodecs();
-
- initializeVideoCaptureSettings();
-
- //qDebug() << "S60CameraSession::resetCamera END";
-}
-
-void S60CameraSession::setError(TInt aError)
-{
- if (aError == KErrNone)
- return;
-
- m_error = aError;
- QCamera::Error cameraError = fromSymbianErrorToMultimediaError(m_error);
-
- // TODO: fix to user friendly string at some point
- // These error string are only dev usable
- QString symbianError;
- symbianError.append("Symbian:");
- symbianError.append(QString::number(m_error));
- emit error(cameraError, symbianError);
-}
-
-QCamera::Error S60CameraSession::fromSymbianErrorToMultimediaError(int aError)
-{
- switch(aError) {
- case KErrNoMemory:
- case KErrNotFound:
- case KErrBadHandle:
- return QCamera::ServiceMissingError;
- case KErrNotSupported:
- case KErrECamSettingNotSupported:
- case KErrECamParameterNotInRange:
- return QCamera::NotSupportedFeatureError;
- case KErrCorrupt:
- case KErrECamSettingDisabled:
- case KErrECamNotOptimalFocus:
- case KErrAccessDenied:
- case KErrLocked:
- case KErrPermissionDenied:
- return QCamera::CameraError;
- case KErrNotReady:
- case KErrECamCameraDisabled:
- case KErrInUse:
- return QCamera::NotReadyToCaptureError;
- default:
- return QCamera::NoError;
- }
-}
-
-void S60CameraSession::startCamera()
-{
- //qDebug() << "S60CameraSession::startCamera START";
- #ifdef Q_CC_NOKIAX86
- MceoCameraReady(); // signal that we are ready
- #endif
-
- // create camera engine
- resetCamera();
-
- if (!m_error ) {
- //qDebug() << "S60CameraSession::startCamera, ReserveAndPowerOn"<< m_error;
- m_cameraEngine->ReserveAndPowerOn();
- }
- //qDebug() << "S60CameraSession::startCamera END";
-}
-
-void S60CameraSession::stopCamera()
-{
- //qDebug() << "Stopping camera";
- m_state = QCamera::StoppedState;
-
- if (m_cameraEngine) {
- m_cameraEngine->ReleaseAndPowerOff();
- }
- emit stateChanged(m_state);
-}
-
-void S60CameraSession::capture(const QString &fileName)
-{
- //qDebug() << "S60CameraSession::capture to file="<< fileName;
- m_error = KErrNone;
- m_stillCaptureFileName = fileName;
- emit readyForCaptureChanged(false);
-
- if (m_stillCaptureFileName.isNull() || m_stillCaptureFileName.isEmpty() ) {
- emit error(QStillImageCapture::ResourceError, QLatin1String("capture outputlocation not set properly"));
- return;
- }
- // check capture size //if not set sets the default one
- setCaptureSize(m_captureSize);
-
- if (m_cameraEngine) {
- TSize size(m_captureSize.width(), m_captureSize.height());
- TRAPD(err,
- m_cameraEngine->PrepareL(size, m_currentcodec);
- m_cameraEngine->CaptureL();
- );
- setError(err);
- }
- else {
- setError(KErrNotReady);
- }
- #ifdef Q_CC_NOKIAX86
- QImage *snapImage = new QImage(QLatin1String("C:/Data/testimage.jpg"));
- emit imageCaptured(m_stillCaptureFileName, *snapImage);
- #endif
-}
-
-bool S60CameraSession::deviceReady()
-{
- #ifdef Q_CC_NOKIAX86
- //qDebug() << "device ready";
- return true;
- #endif
- if ( m_cameraEngine )
- return m_cameraEngine->IsCameraReady();
- else
- return EFalse;
-}
-
-qreal S60CameraSession::framerate()
-{
- if (m_videoUtility) {
- int rate = 0;
- TRAPD(err, rate = m_videoUtility->VideoFrameRateL());
- setError(err);
- return rate;
- }
- return -1;
-}
-
-void S60CameraSession::setFrameRate(qreal rate)
-{
- if (m_videoUtility) {
- TRAPD(err, m_videoUtility->SetVideoFrameRateL(rate));
- setError(err);
- }
-}
-
-QList<QVideoFrame::PixelFormat> S60CameraSession::supportedPixelFormats()
-{
-
- QList<QVideoFrame::PixelFormat> list;
- #ifdef Q_CC_NOKIAX86
- list << QVideoFrame::Format_RGB565;
- #endif
- //TODO: fix supportedformats
- //qDebug() << "S60CameraSession::pixeformat, returning="<<list;
- return list;
-}
-
-QVideoFrame::PixelFormat S60CameraSession::pixelFormat() const
-{
- //qDebug() << "S60CameraSession::pixeformat, returning="<<m_pixelF;
- return m_pixelF;
-}
-
-void S60CameraSession::setPixelFormat(QVideoFrame::PixelFormat fmt)
-{
- //qDebug() << "S60CameraSession::setPixelFormat, format="<<fmt;
- m_pixelF = fmt;
-}
-
-QList<QSize> S60CameraSession::supportedVideoResolutions()
-{
- //qDebug() << "S60CameraSession::supportedVideoResolutions";
- QList<QSize> list;
- // if we have cameraengine loaded and we can update camerainfo
- if (m_cameraEngine && queryCurrentCameraInfo()) {
-
- foreach (QString codecName, formatMap().keys()) {
- int codecIndex = formatMap().value(codecName);
- CCamera::TFormat format = static_cast<CCamera::TFormat>( codecIndex );
- CCamera *camera = m_cameraEngine->Camera();
-
- TUint32 videoFormatsSupported = m_info.iVideoFrameFormatsSupported;
-
- if (videoFormatsSupported&format) {
- CCamera *camera = m_cameraEngine->Camera();
- for (int i=0; i < m_info.iNumVideoFrameSizesSupported; i++) {
- TSize size;
- camera->EnumerateVideoFrameSizes(size,i, format );
- QSize qSize(size.iWidth, size.iHeight);
- if (!list.contains(qSize))
- list << QSize(size.iWidth, size.iHeight);
- }
- }
- }
- }
- #ifdef Q_CC_NOKIAX86
- list << QSize(50, 50);
- list << QSize(100, 100);
- list << QSize(800,600);
- #endif
- return list;
-}
-
-QList<qreal> S60CameraSession::supportedVideoFrameRates()
-{
- //qDebug() << "S60CameraSession::supportedVideoResolutions";
- QList<qreal> list;
- // if we have cameraengine loaded and we can update camerainfo
- if (m_cameraEngine && queryCurrentCameraInfo()) {
-
- foreach (QString codecName, formatMap().keys()) {
- int codecIndex = formatMap().value(codecName);
- CCamera::TFormat format = static_cast<CCamera::TFormat>( codecIndex );
- CCamera *camera = m_cameraEngine->Camera();
-
- TUint32 videoFormatsSupported = m_info.iVideoFrameFormatsSupported;
-
- if (videoFormatsSupported&format) {
- CCamera *camera = m_cameraEngine->Camera();
- for (int i=0; i < m_info.iNumVideoFrameSizesSupported; i++) {
- TReal32 rate;
- TInt maxSizeIndex;
- camera->EnumerateVideoFrameRates(rate, i,format, maxSizeIndex);
- if (!list.contains(rate)) {
- if (rate > 0.0)
- list << rate;
- }
- }
- }
- }
- }
- #ifdef Q_CC_NOKIAX86
- list << 30.0 << 25.0 << 15.0 << 10.0 << 5.0;
- #endif
- return list;
-}
-
-
-bool S60CameraSession::setOutputLocation(const QUrl &sink)
-{
- //qDebug() << "S60CameraSession::setOutputlocation";
- m_sink = sink;
- return true;
-}
-
-QUrl S60CameraSession::outputLocation() const
-{
- //qDebug() << "S60CameraSession::outputLocation";
- return m_sink;
-}
-
-qint64 S60CameraSession::position()
-{
- //qDebug() << "S60CameraSession::position";
- qint64 position = 0;
- if ( (m_captureState == ERecording) && m_videoUtility) {
- TRAPD(err, position = m_videoUtility->DurationL().Int64() / 1000);
- setError(err);
- }
- return position;
-}
-
-int S60CameraSession::state() const
-{
- //qDebug() << "S60CameraSession::state";
- return m_state;
-}
-
-void S60CameraSession::commitVideoEncoderSettings()
-{
- setVideoResolution(m_videoSettings.resolution());
- setFrameRate(m_videoSettings.frameRate());
- setBitrate(m_videoSettings.bitRate());
-}
-
-void S60CameraSession::setVideoFrameRateFixed(bool fixed)
-{
-#ifndef PRE_S60_50_PLATFORM
- if (m_videoUtility) {
- TRAPD(err, m_videoUtility->SetVideoFrameRateFixedL(fixed));
- setError(err);
- }
-#endif //PRE_S60_50_PLATFORM
-}
-
-void S60CameraSession::saveVideoEncoderSettings(QVideoEncoderSettings &videoSettings)
-{
- m_videoSettings = videoSettings;
-}
-
-void S60CameraSession::getCurrentVideoEncoderSettings(QVideoEncoderSettings &videoSettings)
-{
- videoSettings = m_videoSettings;
-}
-
-QtMedia::EncodingQuality S60CameraSession::videoCaptureQuality() const
-{
-#ifndef PRE_S60_50_PLATFORM
- if (m_videoQuality == EVideoQualityLow)
- return QtMedia::LowQuality;
- else if (m_videoQuality == EVideoQualityNormal)
- return QtMedia::NormalQuality;
- else if (m_videoQuality == EVideoQualityHigh)
- return QtMedia::HighQuality;
- else if (m_videoQuality == EVideoQualityLossless)
- return QtMedia::VeryHighQuality;
- else
-#endif //PRE_S60_50_PLATFORM
- return QtMedia::VeryLowQuality;
-}
-
-void S60CameraSession::setVideoCaptureQuality(QtMedia::EncodingQuality quality)
-{
- m_videoQuality = quality*KSymbianImageQualityCoefficient;
-#ifndef PRE_S60_50_PLATFORM
- TRAPD(err, m_videoUtility->SetVideoQualityL(m_videoQuality));
- setError(err);
-#endif //PRE_S60_50_PLATFORM
-}
-
-void S60CameraSession::startRecording()
-{
- if (m_captureState == ENotInitialized || m_captureState == ERecordComplete) {
- QString filename = QDir::toNativeSeparators(m_sink.toString());
- TPtrC16 sink(reinterpret_cast<const TUint16*>(filename.utf16()));
-
- m_videoCodec = m_videoSettings.codec();
-
- int cameraHandle = m_cameraEngine->Camera()->Handle();
-
- TUid controllerUid(TUid::Uid(m_videoControllerMap[m_videoCodec].controllerUid));
- TUid formatUid(TUid::Uid(m_videoControllerMap[m_videoCodec].formatUid));
-
- TRAPD(err, m_videoUtility->OpenFileL(sink, cameraHandle, controllerUid, formatUid, KMimeTypeMPEG4VSPL4, KMMFFourCCCodeAAC));
- setError(err);
- m_captureState = EInitialized;
- } else if (m_captureState == EPaused) {
- m_videoUtility->Record();
- m_captureState = ERecording;
- }
-}
-
-void S60CameraSession::pauseRecording()
-{
- if (m_captureState == ERecording) {
- TRAPD(err, m_videoUtility->PauseL());
- setError(err);
- m_captureState = EPaused;
- } else if (m_captureState == EPaused) {
- m_videoUtility->Record();
- m_captureState = ERecording;
- }
-}
-
-void S60CameraSession::stopRecording()
-{
- m_videoUtility->Stop();
- m_videoUtility->Close();
- m_captureState = ERecordComplete;
-}
-
-void S60CameraSession::MceoCameraReady()
-{
- //qDebug() << "S60CameraSession::MCeoCameraReady()";
- m_state = QCamera::ActiveState;
- emit stateChanged(m_state);
- if (m_cameraEngine) {
- m_VFSize = TSize(m_VFWidgetSize.width(), m_VFWidgetSize.height());
- TRAPD(err, m_cameraEngine->StartViewFinderL(m_VFSize));
- if (err == KErrNotReady || err == KErrNoMemory) {
- emit readyForCaptureChanged(false);
- }
- setError(err);
- emit readyForCaptureChanged(true);
- }
-}
-
-void S60CameraSession::MceoFocusComplete()
-{
- //qDebug() << "S60CameraSession::MCeoFocusComplete()";
- emit focusStatusChanged(QCamera::FocusReached);
-}
-
-void S60CameraSession::MceoCapturedDataReady(TDesC8* aData)
-{
- //qDebug() << "S60CameraSession::MceoCapturedDataReady()";
- QImage snapImage = QImage::fromData((const uchar *)aData->Ptr(), aData->Length());
- //qDebug() << "S60CameraSession::MceoCapturedDataReady(), image constructed, byte count="<<snapImage.byteCount();
- // inform capture done
- emit imageCaptured(m_stillCaptureFileName, snapImage);
- // try to save image and inform if it was succcesful
- if (snapImage.save(m_stillCaptureFileName,0, m_imageQuality))
- emit imageSaved(m_stillCaptureFileName);
- // release image resources
- releaseImageBuffer();
-}
-
-void S60CameraSession::releaseImageBuffer()
-{
- if (m_cameraEngine)
- m_cameraEngine->ReleaseImageBuffer();
- // inform that we can continue taking more pictures
- emit readyForCaptureChanged(true);
-}
-
-void S60CameraSession::MceoCapturedBitmapReady(CFbsBitmap* aBitmap)
-{
- //qDebug() << "S60CameraSession::MceoCapturedBitmapReady()";
- if(aBitmap)
- {
- TSize size = aBitmap->SizeInPixels();
- TUint32 sizeInWords = size.iHeight * CFbsBitmap::ScanLineLength(size.iWidth, aBitmap->DisplayMode()) / sizeof( TUint32 );
- //qDebug() << "S60CameraSession::MceoCapturedDataReady(), image constructed";
- TUint32 *pixelData = new TUint32[sizeInWords];
-
- if (!pixelData)
- return;
-
- // convert to QImage
- aBitmap->LockHeap();
- TUint32 *dataPtr = aBitmap->DataAddress();
- memcpy(pixelData, dataPtr, sizeof(TUint32) * sizeInWords);
- aBitmap->UnlockHeap();
-
- TDisplayMode displayMode = aBitmap->DisplayMode();
-
- QImage::Format format = QImage::Format_Invalid;
- switch(displayMode)
- {
- case EColor256:
- format = QImage::Format_Indexed8;
- break;
- case EColor4K:
- format = QImage::Format_RGB444;
- break;
- case EColor64K:
- format = QImage::Format_RGB16;
- break;
- case EColor16M:
- format = QImage::Format_RGB666;
- break;
- case EColor16MU:
- format = QImage::Format_RGB32;
- break;
- case EColor16MA:
- format = QImage::Format_ARGB32;
- break;
- default:
- //User::Leave( -1 );
- break;
- }
-
- QImage *snapImage = new QImage(
- (uchar*)pixelData,
- size.iWidth,
- size.iHeight,
- CFbsBitmap::ScanLineLength(size.iWidth, aBitmap->DisplayMode()),
- format);
- //qDebug() << "S60CameraSession::MceoCapturedDataReady(), image constructed, byte count="<<snapImage->byteCount();
- aBitmap = NULL;
-
- emit imageCaptured(m_stillCaptureFileName, *snapImage);
- // try to save image and inform if it was succcesful
- if ( snapImage->save(m_stillCaptureFileName,0, m_imageQuality) )
- emit imageSaved(m_stillCaptureFileName);
-
- releaseImageBuffer();
- }
- //todo error handling
-}
-
-void S60CameraSession::MceoViewFinderFrameReady(CFbsBitmap& aFrame)
-{
- if (m_VFProcessor) {
- int bytesPerLine = aFrame.ScanLineLength(m_VFSize.iWidth, aFrame.DisplayMode());
-
- QImage image((uchar *)aFrame.DataAddress(), m_VFSize.iWidth,
- m_VFSize.iHeight, bytesPerLine, QImage::Format_RGB32);
-
- m_VFProcessor->ViewFinderFrameReady(image);
- }
-
- m_cameraEngine->ReleaseViewFinderBuffer();
-}
-
-void S60CameraSession::MceoHandleError(TCameraEngineError aErrorType, TInt aError)
-{
- //qDebug() << "S60CameraSession::MceoHandleError, errorType"<<aErrorType;
- //qDebug() << "S60CameraSession::MceoHandleError, aError"<<aError;
- Q_UNUSED(aErrorType);
- setError(aError);
-}
-
-// For S60Cameravideodevicecontrol
-int S60CameraSession::deviceCount()
-{
- //qDebug() << "S60CameraSession::deviceCount(for emulator this is always 1)";
- #ifdef Q_CC_NOKIAX86
- return 1;
- #endif
- return CCameraEngine::CamerasAvailable();
-}
-/**
- * Some names for cameras with index
- */
-QString S60CameraSession::name(const int index)
-{
- //TODO: change these to use querycurrentcamerainfo
- // From where does the naming index start
- QString cameraName;
- switch (index) {
- case 0:
- cameraName = QLatin1String("Main camera");
- break;
- case 1:
- cameraName = QLatin1String("Secondary camera");
- break;
- case 2:
- cameraName = QLatin1String("Tertiary camera");
- break;
- default:
- cameraName = QLatin1String("Default camera");
- break;
- }
- return cameraName;
-}
-QString S60CameraSession::description(const int index)
-{
- //TODO: change these to use querycurrentcamerainfo
- // what information is wanted throuhg this call?
- QString cameraDesc;
- switch (index) {
- case 0:
- cameraDesc = QLatin1String("Back camera");
- break;
- case 1:
- cameraDesc = QLatin1String("Front camera");
- break;
- case 2:
- cameraDesc = QLatin1String("Tertiary camera description");
- break;
- default:
- cameraDesc = QLatin1String("Default camera description");
- break;
- }
- return cameraDesc;
-}
-
-int S60CameraSession::defaultDevice() const
-{
- //First camera is the default
- const TInt defaultCameraDevice = 0;
- return defaultCameraDevice;
-}
-int S60CameraSession::selectedDevice() const
-{
- //qDebug() << "S60CameraSession::selectedDevice returning="<<m_deviceIndex;
- return m_deviceIndex;
-}
-void S60CameraSession::setSelectedDevice(int index)
-{
- //qDebug() << "S60CameraSession::setSelectedDevice,index="<<index;
- m_deviceIndex = index;
-}
-
-/*
- * Queries all kinds of camera properties
- * Results are returned to member variable m_info
- * @return boolean indicating if querying the info was a success
- */
-bool S60CameraSession::queryCurrentCameraInfo()
-{
- //qDebug() << "S60CameraSession::queryCameraInfo";
-
- /** Version number and name of camera hardware. */
- //TVersion iHardwareVersion;
- /** Version number and name of camera software (device driver). */
- //TVersion iSoftwareVersion;
- /** Orientation of this particular camera device. */
- //TCameraOrientation iOrientation;
- bool returnValue = false;
-
- if (m_cameraEngine) {
- CCamera *camera = m_cameraEngine->Camera();
- if (camera) {
- camera->CameraInfo(m_info);
- }
- returnValue = true;
- }
- return returnValue;
-}
-
-// End for S60Cameravideodevicecontrol
-QSize S60CameraSession::captureSize() const
-{
- //qDebug() << "S60CameraSession::captureSize";
- return m_captureSize;
-}
-QSize S60CameraSession::minimumCaptureSize()
-{
- //qDebug() << "S60CameraSession::minimunCaptureSize";
- return supportedCaptureSizesForCodec(formatMap().key(m_currentcodec)).first();
-}
-QSize S60CameraSession::maximumCaptureSize()
-{
- //qDebug() << "S60CameraSession::maximumCaptureSize";
- return supportedCaptureSizesForCodec(formatMap().key(m_currentcodec)).last();
-}
-
-void S60CameraSession::setCaptureSize(const QSize &size)
-{
- //qDebug() << "S60CameraSession::setCaptureSizes, size="<<size;
- if (m_captureSize.isNull() || size.isEmpty()) {
- //an empty QSize indicates the encoder should make an optimal choice based on what is
- //available from the image source and the limitations of the codec.
- m_captureSize = supportedCaptureSizesForCodec(formatMap().key(m_currentcodec)).last();
- //qDebug() << "S60CameraSession::setCaptureSizes, using optimal(last) size="<<m_captureSize;
- }
- else
- m_captureSize = size;
- //qDebug() << "S60CameraSession::setCaptureSizes, END size="<<size;
-}
-
-QList<QSize> S60CameraSession::supportedCaptureSizesForCodec(const QString &codecName)
-{
- //qDebug() << "S60CameraSession::supportedCaptureSizesForCodec, codec="<<codecName;
- QList<QSize> list;
- // if we have cameraengine loaded and we can update camerainfo
- if (m_cameraEngine && queryCurrentCameraInfo()) {
- int codecIndex = formatMap().value(codecName);
- CCamera::TFormat format = static_cast<CCamera::TFormat>( codecIndex );
- CCamera *camera = m_cameraEngine->Camera();
- for (int i=0; i < m_info.iNumImageSizesSupported; i++) {
- TSize size;
- camera->EnumerateVideoFrameSizes(size,i, format );
- list << QSize(size.iWidth, size.iHeight);
- }
- }
- #ifdef Q_CC_NOKIAX86
- list << QSize(50, 50);
- list << QSize(100, 100);
- list << QSize(800,600);
- #endif
- return list;
-
-}
-
-QMap<QString, int> S60CameraSession::formatMap()
-{
- QMap<QString, int> formats;
- // format list copied from ecam.h CCamera::TFormat
-
- formats.insert("Monochrome", 0x0001);
- formats.insert("16bitRGB444", 0x0002);
- formats.insert("16BitRGB565", 0x0004);
- formats.insert("32BitRGB888", 0x0008);
- formats.insert("Jpeg", 0x0010);
- formats.insert("Exif", 0x0020);
- formats.insert("FbsBitmapColor4K", 0x0040);
- formats.insert("FbsBitmapColor64K", 0x0080);
- formats.insert("FbsBitmapColor16M", 0x0100);
- formats.insert("UserDefined", 0x0200);
- formats.insert("YUV420Interleaved", 0x0400);
- formats.insert("YUV420Planar", 0x0800);
- formats.insert("YUV422", 0x1000);
- formats.insert("YUV422Reversed", 0x2000);
- formats.insert("YUV444", 0x4000);
- formats.insert("YUV420SemiPlanar", 0x8000);
- formats.insert("FbsBitmapColor16MU", 0x00010000);
- formats.insert("MJPEG", 0x00020000);
- formats.insert("EncodedH264", 0x00040000);
-
- return formats;
-}
-QMap<QString, int> S60CameraSession::formatDescMap()
-{
- QMap<QString, int> formats;
- formats.insert("Monochrome", 0x0001);
- formats.insert("16bitRGB444", 0x0002);
- formats.insert("16BitRGB565", 0x0004);
- formats.insert("32BitRGB888", 0x0008);
- formats.insert("Jpeg", 0x0010);
- formats.insert("Exif", 0x0020);
- formats.insert("FbsBitmapColor4K", 0x0040);
- formats.insert("FbsBitmapColor64K", 0x0080);
- formats.insert("FbsBitmapColor16M", 0x0100);
- formats.insert("UserDefined", 0x0200);
- formats.insert("YUV420Interleaved", 0x0400);
- formats.insert("YUV420Planar", 0x0800);
- formats.insert("YUV422", 0x1000);
- formats.insert("YUV422Reversed", 0x2000);
- formats.insert("YUV444", 0x4000);
- formats.insert("YUV420SemiPlanar", 0x8000);
- formats.insert("FbsBitmapColor16MU", 0x00010000);
- formats.insert("MJPEG", 0x00020000);
- formats.insert("EncodedH264", 0x00040000);
-
- return formats;
-}
-QStringList S60CameraSession::supportedImageCaptureCodecs()
-{
- //qDebug() << "S60CameraSession::supportedImageCaptureCodecs";
- QStringList list;
- #ifdef Q_CC_NOKIAX86
- return formatMap().keys();
- #endif
-
- for (int i = 0; i < m_formats.length() ; i++) {
- list << formatMap().key(m_formats.at(i));
- }
- //qDebug()<< "S60CameraSession::supportedImageCaptureCodecs, return formatList.count()="<<list.count();
- return list;
-}
-void S60CameraSession::updateImageCaptureCodecs()
-{
- m_formats.clear();
- //qDebug() << "S60CameraSession::updateImageCaptureCodecs START";
- if (m_cameraEngine && queryCurrentCameraInfo()) {
-
- TUint32 supportedFormats = m_info.iImageFormatsSupported;
- QStringList allFormats = formatMap().keys();
- int formatMask = 1;
-
- for ( int i = 0; i < allFormats.count() ; ++i ) {
- if ( supportedFormats & formatMask ) {
- //qDebug() << "S60CameraSession::updateImageCaptureCodecs, adding format="<<allFormats.at(i);
- m_formats << i; // store index of supported format
- }
-
- formatMask <<= 1;
- }
- }
- //qDebug() << "S60CameraSession::updateImageCaptureCodecs END";
-}
-
-QString S60CameraSession::imageCaptureCodec()
-{
- //qDebug() << "S60CameraSession::imageCaptureCodec";
- return formatMap().key(m_currentcodec);
-}
-void S60CameraSession::setImageCaptureCodec(const QString &codecName)
-{
- //qDebug() << "S60CameraSession::setImageCaptureCodec, coded="<<codecName;
- m_currentcodec = static_cast<CCamera::TFormat>( formatMap().value(codecName) );
-}
-
-QString S60CameraSession::imageCaptureCodecDescription(const QString &codecName)
-{
- //qDebug() << "S60CameraSession::imageCaptureCodecDescription, codename="<<codecName;
- return formatDescMap().key(formatMap().value(codecName));
-}
-
-QtMedia::EncodingQuality S60CameraSession::captureQuality() const
-{
- //qDebug() << "S60CameraSession::CaptureQuality";
- if (m_imageQuality <= 1) {
- return QtMedia::VeryLowQuality;
- }
- else
- return static_cast<QtMedia::EncodingQuality> (m_imageQuality / KSymbianImageQualityCoefficient);
-
-}
-
-void S60CameraSession::setCaptureQuality(QtMedia::EncodingQuality quality)
-{
- //qDebug() << "S60CameraSession::setCaptureQuality, EncodingQuality="<<quality;
- switch (quality) {
- case QtMedia::VeryLowQuality:
- m_imageQuality = 1;
- break;
- default:
- m_imageQuality = quality * KSymbianImageQualityCoefficient;
- break;
- }
- if (m_cameraEngine) {
- CCamera *camera = m_cameraEngine->Camera();
- camera->SetJpegQuality(m_imageQuality);
- camera = NULL;
- }
-
-}
-
-void S60CameraSession::setVideoRenderer(QObject *videoOutput)
-{
- //qDebug() << "S60CameraSession::setVideoRenderer, videoOutput="<<videoOutput;
- S60ViewFinderWidgetControl* viewFinderWidgetControl =
- qobject_cast<S60ViewFinderWidgetControl*>(videoOutput);
-
- if (viewFinderWidgetControl) {
- m_VFProcessor = viewFinderWidgetControl->videoWidget();
- m_VFWidgetSize = viewFinderWidgetControl->videoWidget()->size();
- }
-}
-
-void S60CameraSession::setZoomFactor(qreal optical, qreal digital)
-{
- //qDebug() << "S60CameraSession::setZoomFactor, value(optical digital): " << optical << digital;
-
- if (m_cameraEngine && queryCurrentCameraInfo()) {
- CCamera *camera = m_cameraEngine->Camera();
- if (camera) {
- if (digital > m_info.iMaxZoom && digital <= m_info.iMaxDigitalZoom) { // digitalzoom
- TRAPD(err, camera->SetDigitalZoomFactorL(digital));
- setError(err);
- //qDebug() << "S60CameraSession::setDigitalZoomFactor error: " << m_error;
- if (err == KErrNone) {
- emit digitalZoomChanged(digital);
- }
- } else if (optical >= m_info.iMinZoom && optical <= m_info.iMaxZoom) { //opticalzoom
- TRAPD(err2, camera->SetZoomFactorL(optical));
- setError(err2);
- //qDebug() << "S60CameraSession::setZoomFactor error: " << m_error;
- if (err2 == KErrNone) {
- emit opticalZoomChanged(optical);
- }
- }
- }
- }
-}
-
-int S60CameraSession::zoomFactor()
-{
- //qDebug() << "S60CameraSession::zoomFactor";
- int factor = 0;
- if (m_cameraEngine) {
- CCamera *camera = m_cameraEngine->Camera();
- return camera->ZoomFactor();
- }
- return factor;
-}
-
-int S60CameraSession::digitalZoomFactor()
-{
- //qDebug() << "S60CameraSession::digitalZoomFactor";
- int factor = 0;
- if (m_cameraEngine) {
- CCamera *camera = m_cameraEngine->Camera();
- return camera->DigitalZoomFactor();
- }
- return factor;
-}
-
-void S60CameraSession::startFocus()
-{
- //qDebug() << "S60CameraSession::startFocus";
-
- if (m_cameraEngine) {
- TRAPD(err, m_cameraEngine->StartFocusL());
- setError(err);
- }
-}
-
-void S60CameraSession::cancelFocus()
-{
- //qDebug() << "S60CameraSession::cancelFocus";
- if (m_cameraEngine) {
- TRAPD(err, m_cameraEngine->FocusCancel());
- setError(err);
- }
-}
-
-int S60CameraSession::maximumZoom()
-{
- //qDebug() << "S60CameraSession::maximumZoom";
-
- if (queryCurrentCameraInfo()) {
- //qDebug() << "S60CameraSession::maximumZoom value: " << m_info.iMaxZoom;
- return m_info.iMaxZoom;
- } else {
- return 0;
- }
-}
-
-int S60CameraSession::minZoom()
-{
- //qDebug() << "S60CameraSession::minZoom";
-
- if (queryCurrentCameraInfo()) {
- //qDebug() << "S60CameraSession::minZoom value: " << m_info.iMinZoom;
- return m_info.iMinZoom;
- } else {
- return 0;
- }
-}
-
-int S60CameraSession::maxDigitalZoom()
-{
- //qDebug() << "S60CameraSession::maxDigitalZoom";
- if (queryCurrentCameraInfo()) {
- //qDebug() << "S60CameraSession::maxDigitalZoom value: " << m_info.iMaxDigitalZoom;
- return m_info.iMaxDigitalZoom;
- } else {
- return 0;
- }
-}
-
-void S60CameraSession::setFlashMode(QCamera::FlashMode mode)
-{
- if (m_cameraEngine) {
- switch(mode) {
- case QCamera::FlashOff:
- m_cameraEngine->SetFlash(CCamera::EFlashNone);
- break;
- case QCamera::FlashAuto:
- m_cameraEngine->SetFlash(CCamera::EFlashAuto);
- break;
- case QCamera::FlashOn:
- m_cameraEngine->SetFlash(CCamera::EFlashForced);
- break;
- case QCamera::FlashRedEyeReduction:
- m_cameraEngine->SetFlash(CCamera::EFlashRedEyeReduce);
- break;
- case QCamera::FlashFill:
- m_cameraEngine->SetFlash(CCamera::EFlashFillIn);
- break;
- default:
- break;
-
- }
- }
-}
-
-QCamera::FlashMode S60CameraSession::flashMode()
-{
- if (m_cameraEngine) {
- TInt mode = m_cameraEngine->Flash();
- switch(mode) {
- case CCamera::EFlashAuto:
- return QCamera::FlashAuto;
- case CCamera::EFlashForced:
- return QCamera::FlashOn;
- case CCamera::EFlashRedEyeReduce:
- return QCamera::FlashRedEyeReduction;
- case CCamera::EFlashFillIn:
- return QCamera::FlashFill;
- default:
- return QCamera::FlashOff;
- }
- }
- return QCamera::FlashOff;
-}
-
-QCamera::FlashModes S60CameraSession::supportedFlashModes()
-{
- QCamera::FlashModes modes = QCamera::FlashOff;
- if (m_cameraEngine) {
- TInt supportedModes = m_cameraEngine->SupportedFlashModes();
- if (supportedModes == 0)
- return modes;
- if (supportedModes & CCamera::EFlashManual) {
- modes |= QCamera::FlashOff;
- }
- if (supportedModes & CCamera::EFlashForced) {
- modes |= QCamera::FlashOn;
- }
- if (supportedModes & CCamera::EFlashAuto) {
- modes |= QCamera::FlashAuto;
- }
- if (supportedModes & CCamera::EFlashFillIn) {
- modes |= QCamera::FlashFill;
- }
- if (supportedModes & CCamera::EFlashRedEyeReduce) {
- modes |= QCamera::FlashRedEyeReduction;
- }
- }
- return modes;
-}
-
-QCamera::ExposureMode S60CameraSession::exposureMode()
-{
- if (m_cameraEngine) {
- CCamera* camera = m_cameraEngine->Camera();
- CCamera::TExposure mode2 = camera->Exposure();
- switch(mode2) {
- case CCamera::EExposureManual:
- return QCamera::ExposureManual;
- case CCamera::EExposureAuto:
- return QCamera::ExposureAuto;
- case CCamera::EExposureNight:
- return QCamera::ExposureNight;
- case CCamera::EExposureBacklight:
- return QCamera::ExposureBacklight;
- case CCamera::EExposureSport:
- return QCamera::ExposureSports;
- case CCamera::EExposureSnow:
- return QCamera::ExposureSnow;
- case CCamera::EExposureBeach:
- return QCamera::ExposureBeach;
- default:
- return QCamera::ExposureAuto;
- }
- }
- return QCamera::ExposureAuto;
-}
-
-QCamera::ExposureModes S60CameraSession::supportedExposureModes()
-{
- QCamera::ExposureModes modes = QCamera::ExposureAuto;
- if (m_cameraEngine) {
- TInt supportedModes = m_info.iExposureModesSupported;
- if (supportedModes == 0) {
- return modes;
- }
- if (supportedModes & CCamera::EExposureManual) {
- modes |= QCamera::ExposureManual;
- }
- if (supportedModes & CCamera::EExposureAuto) {
- modes |= QCamera::ExposureAuto;
- }
- if (supportedModes & CCamera::EExposureNight) {
- modes |= QCamera::ExposureNight;
- }
- if (supportedModes & CCamera::EExposureBacklight) {
- modes |= QCamera::ExposureBacklight;
- }
- if (supportedModes & CCamera::EExposureSport) {
- modes |= QCamera::ExposureSports;
- }
- if (supportedModes & CCamera::EExposureSnow) {
- modes |= QCamera::ExposureSnow;
- }
- if (supportedModes & CCamera::EExposureBeach) {
- modes |= QCamera::ExposureBeach;
- }
- }
- return modes;
-}
-
-void S60CameraSession::setExposureMode(QCamera::ExposureMode mode)
-{
- if (m_cameraEngine) {
- switch(mode) {
- case QCamera::ExposureManual:
- m_cameraEngine->SetExposure(CCamera::EExposureManual);
- break;
- case QCamera::ExposureAuto:
- m_cameraEngine->SetExposure(CCamera::EExposureAuto);
- break;
- case QCamera::ExposureNight:
- m_cameraEngine->SetExposure(CCamera::EExposureNight);
- break;
- case QCamera::ExposureBacklight:
- m_cameraEngine->SetExposure(CCamera::EExposureBacklight);
- break;
- case QCamera::ExposureSports:
- m_cameraEngine->SetExposure(CCamera::EExposureSport);
- break;
- case QCamera::ExposureSnow:
- m_cameraEngine->SetExposure(CCamera::EExposureSnow);
- break;
- case QCamera::ExposureBeach:
- m_cameraEngine->SetExposure(CCamera::EExposureBeach);
- break;
- case QCamera::ExposureLargeAperture:
- case QCamera::ExposureSmallAperture:
- //TODO:
- //m_cameraEngine->SetExposure(CCamera::EExposureAperturePriority);
- break;
- case QCamera::ExposurePortrait:
- case QCamera::ExposureSpotlight:
- default:
- // not supported
- break;
- }
- }
-}
-
-qreal S60CameraSession::contrast() const
-{
- if (m_cameraEngine) {
- CCamera* camera = m_cameraEngine->Camera();
- return camera->Contrast();
- } else {
- return 0;
- }
-}
-
-void S60CameraSession::setContrast(qreal value)
-{
- if (m_cameraEngine) {
- CCamera* camera = m_cameraEngine->Camera();
- TRAPD(err, camera->SetContrastL(value));
- setError(err);
- }
-}
-
-
-QCamera::WhiteBalanceMode S60CameraSession::whiteBalanceMode()
-{
- if (m_cameraEngine) {
- CCamera* camera = m_cameraEngine->Camera();
- CCamera::TWhiteBalance mode = camera->WhiteBalance();
- switch(mode) {
- case CCamera::EWBAuto:
- return QCamera::WhiteBalanceAuto;
- case CCamera::EWBDaylight:
- return QCamera::WhiteBalanceSunlight;
- case CCamera::EWBCloudy:
- return QCamera::WhiteBalanceCloudy;
- case CCamera::EWBTungsten:
- return QCamera::WhiteBalanceTungsten;
- case CCamera::EWBFluorescent:
- return QCamera::WhiteBalanceFluorescent;
- case CCamera::EWBFlash:
- return QCamera::WhiteBalanceFlash;
- case CCamera::EWBBeach:
- return QCamera::WhiteBalanceSunset;
- case CCamera::EWBManual:
- return QCamera::WhiteBalanceManual;
- case CCamera::EWBShade:
- return QCamera::WhiteBalanceShade;
- default:
- return QCamera::WhiteBalanceAuto;
- }
- }
- return QCamera::WhiteBalanceAuto;
-}
-
-void S60CameraSession::setWhiteBalanceMode(QCamera::WhiteBalanceMode mode)
-{
- TRAPD(err, setWhiteBalanceModeL(mode));
- setError(err);
-}
-
-void S60CameraSession::setWhiteBalanceModeL(QCamera::WhiteBalanceMode mode)
-{
- if (m_cameraEngine) {
- CCamera* camera = m_cameraEngine->Camera();
- switch(mode) {
- case QCamera::WhiteBalanceAuto:
- camera->SetWhiteBalanceL(CCamera::EWBAuto);
- break;
- case QCamera::WhiteBalanceSunlight:
- camera->SetWhiteBalanceL(CCamera::EWBDaylight);
- break;
- case QCamera::WhiteBalanceCloudy:
- camera->SetWhiteBalanceL(CCamera::EWBCloudy);
- break;
- case QCamera::WhiteBalanceTungsten:
- case QCamera::WhiteBalanceIncandescent:
- camera->SetWhiteBalanceL(CCamera::EWBTungsten);
- break;
- case QCamera::WhiteBalanceFluorescent:
- camera->SetWhiteBalanceL(CCamera::EWBFluorescent);
- break;
- case QCamera::WhiteBalanceFlash:
- camera->SetWhiteBalanceL(CCamera::EWBFlash);
- break;
- case QCamera::WhiteBalanceSunset:
- camera->SetWhiteBalanceL(CCamera::EWBBeach);
- break;
- case QCamera::WhiteBalanceManual:
- camera->SetWhiteBalanceL(CCamera::EWBManual);
- break;
- case QCamera::WhiteBalanceShade:
- camera->SetWhiteBalanceL(CCamera::EWBShade);
- break;
- default:
- // not supported
- break;
- }
- }
-}
-
-QCamera::WhiteBalanceModes S60CameraSession::supportedWhiteBalanceModes()
-{
- QCamera::WhiteBalanceModes modes = QCamera::WhiteBalanceAuto;
- if (m_cameraEngine) {
- TInt supportedModes = m_info.iWhiteBalanceModesSupported;
- if (supportedModes == 0) {
- return modes;
- }
- if (supportedModes & CCamera::EWBAuto) {
- modes |= QCamera::WhiteBalanceAuto;
- }
- if (supportedModes & CCamera::EWBDaylight) {
- modes |= QCamera::WhiteBalanceSunlight;
- }
- if (supportedModes & CCamera::EWBCloudy) {
- modes |= QCamera::WhiteBalanceCloudy;
- }
- if (supportedModes & CCamera::EWBTungsten) {
- modes |= QCamera::WhiteBalanceTungsten;
- modes |= QCamera::WhiteBalanceIncandescent;
- }
- if (supportedModes & CCamera::EWBFluorescent) {
- modes |= QCamera::WhiteBalanceFluorescent;
- }
- if (supportedModes & CCamera::EWBFlash) {
- modes |= QCamera::WhiteBalanceFlash;
- }
- if (supportedModes & CCamera::EWBBeach) {
- modes |= QCamera::WhiteBalanceSunset;
- }
- if (supportedModes & CCamera::EWBManual) {
- modes |= QCamera::WhiteBalanceManual;
- }
- if (supportedModes & CCamera::EWBShade) {
- modes |= QCamera::WhiteBalanceShade;
- }
- }
- return modes;
-}
-
-void S60CameraSession::updateVideoCaptureCodecs()
-{
- TRAPD(err, updateVideoCaptureCodecsL());
- setError(err);
-}
-
-void S60CameraSession::updateVideoCaptureCodecsL()
-{
- m_videoControllerMap.clear();
-
- // Resolve the supported video format and retrieve a list of controllers
- CMMFControllerPluginSelectionParameters* pluginParameters =
- CMMFControllerPluginSelectionParameters::NewLC();
- CMMFFormatSelectionParameters* format =
- CMMFFormatSelectionParameters::NewLC();
-
- // Set the play and record format selection parameters to be blank.
- // Format support is only retrieved if requested.
- pluginParameters->SetRequiredPlayFormatSupportL(*format);
- pluginParameters->SetRequiredRecordFormatSupportL(*format);
-
- // Set the media ids
- RArray<TUid> mediaIds;
- CleanupClosePushL(mediaIds);
- User::LeaveIfError(mediaIds.Append(KUidMediaTypeVideo));
- // Get plugins that support at least video
- pluginParameters->SetMediaIdsL(mediaIds,
- CMMFPluginSelectionParameters::EAllowOtherMediaIds);
- pluginParameters->SetPreferredSupplierL(KNullDesC,
- CMMFPluginSelectionParameters::EPreferredSupplierPluginsFirstInList);
-
- // Array to hold all the controllers support the match data
- RMMFControllerImplInfoArray controllers;
- CleanupResetAndDestroyPushL(controllers);
- pluginParameters->ListImplementationsL(controllers);
-
- // Find the first controller with at least one record format available
- for (TInt index=0; index<controllers.Count(); index++) {
- const RMMFFormatImplInfoArray& recordFormats =
- controllers[index]->RecordFormats();
- for (TInt j=0; j<recordFormats.Count(); j++) {
- const CDesC8Array& mimeTypes = recordFormats[j]->SupportedMimeTypes();
- TInt count = mimeTypes.Count();
- if (count > 0) {
- TPtrC8 mimeType = mimeTypes[0];
- QString type = QString::fromUtf8((char *)mimeType.Ptr(),
- mimeType.Length());
- // Currently only support for video/mp4 due to resolution and frame rate issues.
- if (type == "video/mp4") {
- VideoControllerData data;
- data.controllerUid = controllers[index]->Uid().iUid;
- data.formatUid = recordFormats[j]->Uid().iUid;
- data.formatDescription = QString::fromUtf16(
- recordFormats[j]->DisplayName().Ptr(),
- recordFormats[j]->DisplayName().Length());
- m_videoControllerMap[type] = data;
- }
- }
- }
- }
-
- CleanupStack::PopAndDestroy(&controllers);
- CleanupStack::PopAndDestroy(&mediaIds);
- CleanupStack::PopAndDestroy(format);
- CleanupStack::PopAndDestroy(pluginParameters);
-
- //qDebug() << "S60CameraSession::updateVideoCaptureCodecs count: " << m_videoControllerMap.keys().count();
-}
-
-QStringList S60CameraSession::supportedVideoCaptureCodecs()
-{
- //qDebug() << "S60CameraSession::supportedVideoCaptureCodecs";
- return m_videoControllerMap.keys();
-}
-
-bool S60CameraSession::isSupportedVideoCaptureCodec(const QString &codecName)
-{
- return m_videoControllerMap.keys().contains(codecName);
-}
-
-QString S60CameraSession::videoCaptureCodec()
-{
- return m_videoCodec;
-}
-void S60CameraSession::setVideoCaptureCodec(const QString &codecName)
-{
- if (codecName == m_videoCodec)
- return;
-
- m_videoCodec = codecName;
-}
-
-QString S60CameraSession::videoCaptureCodecDescription(const QString &codecName)
-{
- return m_videoControllerMap[codecName].formatDescription;
-}
-
-int S60CameraSession::bitrate()
-{
- if (m_videoUtility) {
- TInt rate = 0;
- TRAPD(err, rate = m_videoUtility->VideoBitRateL());
- setError(err);
- return rate;
- }
- return 0;
-}
-
-void S60CameraSession::setBitrate(const int &bitrate)
-{
- if (m_videoUtility) {
- TRAPD(err, m_videoUtility->SetVideoBitRateL(bitrate));
- setError(err);
- }
-}
-
-QSize S60CameraSession::videoResolution()
-{
- TSize size(0,0);
- if (m_videoUtility) {
- TRAPD(err, m_videoUtility->GetVideoFrameSizeL(size));
- setError(err);
- }
- return QSize(size.iWidth, size.iHeight);
-}
-
-void S60CameraSession::setVideoResolution(const QSize &resolution)
-{
- if (m_videoUtility) {
- TSize size(resolution.width(), resolution.height());
- TRAPD(err, m_videoUtility->SetVideoFrameSizeL(size));
- setError(err);
- }
-}
-
-void S60CameraSession::initializeVideoCaptureSettings()
-{
- if (m_videoControllerMap.keys().count() > 0)
- m_videoSettings.setCodec(m_videoControllerMap.keys()[0]); // Setting the first codec found as initial value
-
- // set lowest value found as initial value for frame rate
- QList<qreal> rates = supportedVideoFrameRates();
- qreal minRate = 30.0;
- foreach (qreal rate, rates)
- minRate = qMin(minRate, rate);
- m_videoSettings.setFrameRate(minRate);
-
- QSize minResolution(176, 144);
- m_videoSettings.setResolution(minResolution);
-
- // use variable bit rate as initial value
- m_videoSettings.setBitRate(KMMFVariableVideoBitRate);
-
- m_videoSettings.setQuality(QtMedia::LowQuality);
-}
-
-
-void S60CameraSession::MvruoOpenComplete(TInt aError)
-{
- //qDebug() << "S60CameraSession::MvruoOpenComplete, error: " << aError;
-
- if(aError==KErrNone) {
- commitVideoEncoderSettings();
- m_videoUtility->Prepare();
- m_captureState = EOpenCompelete;
- } else {
- m_captureState = ENotInitialized;
- }
- setError(aError);
-}
-
-void S60CameraSession::MvruoPrepareComplete(TInt aError)
-{
- //qDebug() << "S60CameraSession::MvruoPrepareComplete, error: " << aError;
- if(aError==KErrNone) {
- m_videoUtility->Record();
- m_captureState = ERecording;
- //qDebug() << "S60CameraSession::MvruoPrepareComplete: Record called";
- } else {
- m_captureState = ENotInitialized;
- }
- setError(aError);
-
-}
-
-void S60CameraSession::MvruoRecordComplete(TInt aError)
-{
- //qDebug() << "S60CameraSession::MvruoRecordComplete";
- if((aError==KErrNone) || (aError==KErrCompletion)) {
- m_videoUtility->Stop();
- m_videoUtility->Close();
- }
- m_captureState = ERecordComplete;
- setError(aError);
-
-}
-
-void S60CameraSession::MvruoEvent(const TMMFEvent& aEvent)
-{
-
-}
-
-