diff -r 61bc0f252b2b -r bac7acad7cb3 camerauis/cameraxui/cxengine/src/cxevideorecorderutilitysymbian.cpp --- a/camerauis/cameraxui/cxengine/src/cxevideorecorderutilitysymbian.cpp Tue Aug 31 15:03:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,338 +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: -* -*/ -#include "cxevideorecorderutilitysymbian.h" -#include "cxenamespace.h" -#include "cxutils.h" -#include - -namespace -{ - // Controller UId, can be used by the client to identify the controller, e.g. if the custom command can be used - const TUid KCamCControllerImplementationUid = {0x101F8503}; - - // Custom command for setting a new filename without closing & reopening the controller - enum TCamCControllerCustomCommands - { - ECamCControllerCCNewFilename = 0, - ECamCControllerCCVideoStopAsync - }; - - const uint KOneMillion = 1000000; -} - - -CxeVideoRecorderUtilitySymbian::~CxeVideoRecorderUtilitySymbian() -{ - CX_DEBUG_ENTER_FUNCTION(); - delete mVideoRecorder; - mVideoRecorder = NULL; - CX_DEBUG_EXIT_FUNCTION(); -} - -CxeVideoRecorderUtilitySymbian::CxeVideoRecorderUtilitySymbian(MVideoRecorderUtilityObserver& aObserver) -{ - CX_DEBUG_ENTER_FUNCTION(); - QT_TRAP_THROWING(mVideoRecorder = - CVideoRecorderUtility::NewL(aObserver, - KAudioPriorityVideoRecording, - TMdaPriorityPreference(KAudioPrefVideoRecording))); - CX_DEBUG_EXIT_FUNCTION(); -} - -/*! -* Open new file for recording. -* @param cameraHandle Handle for camera. -* @param filename Full filename of the video file to open. -* @param fileMimeType MIME type for the video file. -* @param supplier Preferred supplier. -* @param videoType Video codec MIME type. -* @param audioType Audio FourCC type. -*/ -void CxeVideoRecorderUtilitySymbian::open(int cameraHandle, - const QString &filename, - const QString &fileMimeType, - const QString &supplier, - const QString &videoType, - const QString &audioType) -{ - CX_DEBUG_ENTER_FUNCTION(); - CX_DEBUG(("CxeVideoRecorderUtilitySymbian - filename [%s]", filename.toAscii().constData())); - CX_DEBUG(("CxeVideoRecorderUtilitySymbian - file mime [%s]", fileMimeType.toAscii().constData())); - CX_DEBUG(("CxeVideoRecorderUtilitySymbian - supplier [%s]", supplier.toAscii().constData())); - CX_DEBUG(("CxeVideoRecorderUtilitySymbian - codec mime [%s]", videoType.toAscii().constData())); - CX_DEBUG(("CxeVideoRecorderUtilitySymbian - audio FourCC [%s]", audioType.toAscii().constData())); - - QByteArray bytes = videoType.toLatin1(); - TPtrC8 videoTypeDesC(reinterpret_cast(bytes.constData()), bytes.size()); - TPtrC16 filenameDesC(reinterpret_cast(filename.utf16())); - - TUid controllerId; - TUid formatId; - QT_TRAP_THROWING({ - // Find the video controller id and video format id. - findControllerL(fileMimeType, supplier, controllerId, formatId); - - // Try to open new video file with given parameters. - mVideoRecorder->OpenFileL(filenameDesC, cameraHandle, controllerId, - formatId, videoTypeDesC, audioFourCC(audioType)); - }); - CX_DEBUG_EXIT_FUNCTION(); -} - -/*! -* Set frame size. -* @param size The video frame size. -*/ -void CxeVideoRecorderUtilitySymbian::setVideoFrameSize(const QSize &size) -{ - CX_DEBUG_ENTER_FUNCTION(); - TSize frameSize(size.width(), size.height()); - QT_TRAP_THROWING(mVideoRecorder->SetVideoFrameSizeL(frameSize)); - CX_DEBUG_EXIT_FUNCTION(); -} - -/*! -* Set video frame rate. -* @param rate The video frame rate. -*/ -void CxeVideoRecorderUtilitySymbian::setVideoFrameRate(int rate) -{ - CX_DEBUG_ENTER_FUNCTION(); - QT_TRAP_THROWING(mVideoRecorder->SetVideoFrameRateL(rate)); - CX_DEBUG_EXIT_FUNCTION(); -} - -/*! -* Set video bit rate. -* @param The video bit rate. -*/ -void CxeVideoRecorderUtilitySymbian::setVideoBitRate(int rate) -{ - CX_DEBUG_ENTER_FUNCTION(); - QT_TRAP_THROWING(mVideoRecorder->SetVideoBitRateL(rate)); - CX_DEBUG_EXIT_FUNCTION(); -} - -/*! -* Set if audio recording is on or not. -* @param enabled Is audio recording enabled. -*/ -void CxeVideoRecorderUtilitySymbian::setAudioEnabled(bool enabled) -{ - CX_DEBUG_ENTER_FUNCTION(); - QT_TRAP_THROWING(mVideoRecorder->SetAudioEnabledL(enabled)); - CX_DEBUG_EXIT_FUNCTION(); -} - -/*! -* Set maximum video clip size in bytes. -* @param sizeInBytes Video clip size limit. -*/ -void CxeVideoRecorderUtilitySymbian::setVideoMaxSize(int sizeInBytes) -{ - CX_DEBUG_ENTER_FUNCTION(); - if (sizeInBytes <= 0) { - sizeInBytes = KMMFNoMaxClipSize; - } - QT_TRAP_THROWING(mVideoRecorder->SetMaxClipSizeL(sizeInBytes)); - CX_DEBUG_EXIT_FUNCTION(); -} - -/*! -* Close video recorder, freeing its resources. -*/ -void CxeVideoRecorderUtilitySymbian::close() -{ - CX_DEBUG_ENTER_FUNCTION(); - mVideoRecorder->Close(); - CX_DEBUG_EXIT_FUNCTION(); -} - -/*! -* Prepare for video recording. -*/ -void CxeVideoRecorderUtilitySymbian::prepare() -{ - CX_DEBUG_ENTER_FUNCTION(); - mVideoRecorder->Prepare(); - CX_DEBUG_EXIT_FUNCTION(); -} - -/*! -* Start recording. -*/ -void CxeVideoRecorderUtilitySymbian::record() -{ - CX_DEBUG_ENTER_FUNCTION(); - mVideoRecorder->Record(); - CX_DEBUG_EXIT_FUNCTION(); -} - -/*! -* Stop recording. -* @param asynchronous Use asynchronous (true) or synchronous (false) stopping. -*/ -void CxeVideoRecorderUtilitySymbian::stop(bool asynchronous) -{ - CX_DEBUG_ENTER_FUNCTION(); - - if (asynchronous) { - TMMFMessageDestination dest(KCamCControllerImplementationUid, KMMFObjectHandleController); - qt_symbian_throwIfError(mVideoRecorder->CustomCommandSync( - dest, ECamCControllerCCVideoStopAsync, KNullDesC8, KNullDesC8)); - } else { - qt_symbian_throwIfError(mVideoRecorder->Stop()); - } - CX_DEBUG_EXIT_FUNCTION(); -} - -/*! -* Pause recording. -*/ -void CxeVideoRecorderUtilitySymbian::pause() -{ - CX_DEBUG_ENTER_FUNCTION(); - QT_TRAP_THROWING(mVideoRecorder->PauseL()); - CX_DEBUG_EXIT_FUNCTION(); -} - -/*! -* Get estimated available recording time. -* @return Available recording time estimate in seconds. -*/ -int CxeVideoRecorderUtilitySymbian::availableRecordingTime() -{ - CX_DEBUG_IN_FUNCTION(); - // Convert microseconds to seconds. - return mVideoRecorder->RecordTimeAvailable().Int64() * 1.0 / KOneMillion; -} - -/*! -* Get elapsed duration of the recorded video. -* @return Duration of the video in seconds. -*/ -int CxeVideoRecorderUtilitySymbian::duration() -{ - CX_DEBUG_ENTER_FUNCTION(); - int time(0); - // Convert microseconds to seconds. - QT_TRAP_THROWING(time = mVideoRecorder->DurationL().Int64() * 1.0 / KOneMillion); - CX_DEBUG_EXIT_FUNCTION(); - return time; -} - -/*! -* Find video controller and format UIDs based on file mime type and preferred supplier. -* @param fileMimeType MIME type for the video file. -* @param supplier Preferred supplier. -* @param controllerId Returns found controller UID. -* @param formatId Returns found format UID. -*/ -void CxeVideoRecorderUtilitySymbian::findControllerL(const QString& fileMimeType, - const QString& supplier, - TUid& controllerId, - TUid& formatId) -{ - CX_DEBUG_ENTER_FUNCTION(); - - // Retrieve a list of possible controllers from ECOM. - // Controller must support recording the requested mime type. - // Controller must be provided by preferred supplier. - controllerId = KNullUid; - formatId = KNullUid; - - QByteArray bytes = fileMimeType.toLatin1(); - TPtrC8 mimeTPtr(reinterpret_cast(bytes.constData()), bytes.size()); - TPtrC16 supplierTPtr(reinterpret_cast(supplier.utf16())); - - CMMFControllerPluginSelectionParameters* cSelect(NULL); - CMMFFormatSelectionParameters* fSelect(NULL); - RMMFControllerImplInfoArray controllers; - - cSelect = CMMFControllerPluginSelectionParameters::NewLC(); - fSelect = CMMFFormatSelectionParameters::NewLC(); - - fSelect->SetMatchToMimeTypeL(mimeTPtr); - cSelect->SetRequiredRecordFormatSupportL(*fSelect); - cSelect->SetPreferredSupplierL(supplierTPtr, - CMMFPluginSelectionParameters::EOnlyPreferredSupplierPluginsReturned); - cSelect->ListImplementationsL(controllers); - CleanupResetAndDestroyPushL(controllers); - - if (controllers.Count() <= 0) { - CX_DEBUG(("CxeVideoRecorderUtilitySymbian - zero controllers found, leaving!")); - User::Leave(KErrNotFound); - } - - // Inquires the controller about supported formats. - // We use the first controller found having index 0. - const RMMFFormatImplInfoArray& formats = controllers[0]->RecordFormats(); - - // Get the first format that supports our mime type. - int count(formats.Count()); - for (int i=0; iSupportsMimeType(mimeTPtr)) { - CX_DEBUG(("CxeVideoRecorderUtilitySymbian - found controller")); - // Store the format UID - formatId = formats[i]->Uid(); - // Store the controller UID - controllerId = controllers[0]->Uid(); - break; - } - } - - // Check that we found the uids. - if (controllerId == KNullUid) { - CX_DEBUG(("CxeVideoRecorderUtilitySymbian - no matching controller found, leaving!")); - User::Leave(KErrNotFound); - } - - CleanupStack::PopAndDestroy(3); // controllers, fSelect, cSelect - CX_DEBUG_EXIT_FUNCTION(); -} - -/*! -* Helper method to convert QString to TFourCC. -* @param str String to convert. -*/ -TFourCC CxeVideoRecorderUtilitySymbian::audioFourCC(const QString& str) -{ - CX_DEBUG_ENTER_FUNCTION(); - - QByteArray audioType = str.toAscii(); - - quint8 char1(' '); - quint8 char2(' '); - quint8 char3(' '); - quint8 char4(' '); - - if (audioType.count() > 3) { - char1 = audioType[0]; - char2 = audioType[1]; - char3 = audioType[2]; - - if (audioType.count() == 4) { - char4 = audioType[3]; - } - } - - CX_DEBUG_EXIT_FUNCTION(); - return TFourCC(char1, char2, char3, char4); -} - - -// end of file