camerauis/cameraxui/cxengine/src/cxevideorecorderutilitysymbian.cpp
author hgs
Thu, 15 Jul 2010 01:44:30 +0300
changeset 38 0f0b4c1d7744
parent 19 d9aefe59d544
permissions -rw-r--r--
201019
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     1
/*
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     3
* All rights reserved.
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     4
* This component and the accompanying materials are made available
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     6
* which accompanies this distribution, and is available
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     8
*
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     9
* Initial Contributors:
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    11
*
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    12
* Contributors:
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    13
*
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    14
* Description:
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    15
*
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    16
*/
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    17
#include "cxevideorecorderutilitysymbian.h"
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    18
#include "cxenamespace.h"
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    19
#include "cxutils.h"
38
hgs
parents: 19
diff changeset
    20
#include <AudioPreference.h>
hgs
parents: 19
diff changeset
    21
hgs
parents: 19
diff changeset
    22
namespace
hgs
parents: 19
diff changeset
    23
{
hgs
parents: 19
diff changeset
    24
    // Controller UId, can be used by the client to identify the controller, e.g. if the custom command can be used
hgs
parents: 19
diff changeset
    25
    const TUid KCamCControllerImplementationUid = {0x101F8503};
hgs
parents: 19
diff changeset
    26
hgs
parents: 19
diff changeset
    27
    // Custom command for setting a new filename without closing & reopening the controller
hgs
parents: 19
diff changeset
    28
    enum TCamCControllerCustomCommands
hgs
parents: 19
diff changeset
    29
        {
hgs
parents: 19
diff changeset
    30
        ECamCControllerCCNewFilename = 0,
hgs
parents: 19
diff changeset
    31
        ECamCControllerCCVideoStopAsync
hgs
parents: 19
diff changeset
    32
        };
hgs
parents: 19
diff changeset
    33
hgs
parents: 19
diff changeset
    34
    const uint KOneMillion = 1000000;
hgs
parents: 19
diff changeset
    35
}
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    36
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    37
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    38
CxeVideoRecorderUtilitySymbian::~CxeVideoRecorderUtilitySymbian()
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    39
{
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    40
    CX_DEBUG_ENTER_FUNCTION();
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    41
    delete mVideoRecorder;
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    42
    mVideoRecorder = NULL;
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    43
    CX_DEBUG_EXIT_FUNCTION();
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    44
}
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    45
38
hgs
parents: 19
diff changeset
    46
CxeVideoRecorderUtilitySymbian::CxeVideoRecorderUtilitySymbian(MVideoRecorderUtilityObserver& aObserver)
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    47
{
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    48
    CX_DEBUG_ENTER_FUNCTION();
38
hgs
parents: 19
diff changeset
    49
    QT_TRAP_THROWING(mVideoRecorder =
hgs
parents: 19
diff changeset
    50
            CVideoRecorderUtility::NewL(aObserver,
hgs
parents: 19
diff changeset
    51
                                        KAudioPriorityVideoRecording,
hgs
parents: 19
diff changeset
    52
                                        TMdaPriorityPreference(KAudioPrefVideoRecording)));
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    53
    CX_DEBUG_EXIT_FUNCTION();
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    54
}
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    55
38
hgs
parents: 19
diff changeset
    56
/*!
hgs
parents: 19
diff changeset
    57
* Open new file for recording.
hgs
parents: 19
diff changeset
    58
* @param cameraHandle Handle for camera.
hgs
parents: 19
diff changeset
    59
* @param filename Full filename of the video file to open.
hgs
parents: 19
diff changeset
    60
* @param fileMimeType MIME type for the video file.
hgs
parents: 19
diff changeset
    61
* @param supplier Preferred supplier.
hgs
parents: 19
diff changeset
    62
* @param videoType Video codec MIME type.
hgs
parents: 19
diff changeset
    63
* @param audioType Audio FourCC type.
hgs
parents: 19
diff changeset
    64
*/
hgs
parents: 19
diff changeset
    65
void CxeVideoRecorderUtilitySymbian::open(int cameraHandle,
hgs
parents: 19
diff changeset
    66
                                          const QString &filename,
hgs
parents: 19
diff changeset
    67
                                          const QString &fileMimeType,
hgs
parents: 19
diff changeset
    68
                                          const QString &supplier,
hgs
parents: 19
diff changeset
    69
                                          const QString &videoType,
hgs
parents: 19
diff changeset
    70
                                          const QString &audioType)
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    71
{
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    72
    CX_DEBUG_ENTER_FUNCTION();
38
hgs
parents: 19
diff changeset
    73
    CX_DEBUG(("CxeVideoRecorderUtilitySymbian - filename     [%s]", filename.toAscii().constData()));
hgs
parents: 19
diff changeset
    74
    CX_DEBUG(("CxeVideoRecorderUtilitySymbian - file mime    [%s]", fileMimeType.toAscii().constData()));
hgs
parents: 19
diff changeset
    75
    CX_DEBUG(("CxeVideoRecorderUtilitySymbian - supplier     [%s]", supplier.toAscii().constData()));
hgs
parents: 19
diff changeset
    76
    CX_DEBUG(("CxeVideoRecorderUtilitySymbian - codec mime   [%s]", videoType.toAscii().constData()));
hgs
parents: 19
diff changeset
    77
    CX_DEBUG(("CxeVideoRecorderUtilitySymbian - audio FourCC [%s]", audioType.toAscii().constData()));
hgs
parents: 19
diff changeset
    78
hgs
parents: 19
diff changeset
    79
    QByteArray bytes = videoType.toLatin1();
hgs
parents: 19
diff changeset
    80
    TPtrC8 videoTypeDesC(reinterpret_cast<const TUint8*>(bytes.constData()), bytes.size());
hgs
parents: 19
diff changeset
    81
    TPtrC16 filenameDesC(reinterpret_cast<const TUint16*>(filename.utf16()));
hgs
parents: 19
diff changeset
    82
hgs
parents: 19
diff changeset
    83
    TUid controllerId;
hgs
parents: 19
diff changeset
    84
    TUid formatId;
hgs
parents: 19
diff changeset
    85
    QT_TRAP_THROWING({
hgs
parents: 19
diff changeset
    86
        // Find the video controller id and video format id.
hgs
parents: 19
diff changeset
    87
        findControllerL(fileMimeType, supplier, controllerId, formatId);
hgs
parents: 19
diff changeset
    88
hgs
parents: 19
diff changeset
    89
        // Try to open new video file with given parameters.
hgs
parents: 19
diff changeset
    90
        mVideoRecorder->OpenFileL(filenameDesC, cameraHandle, controllerId,
hgs
parents: 19
diff changeset
    91
                                  formatId, videoTypeDesC, audioFourCC(audioType));
hgs
parents: 19
diff changeset
    92
    });
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    93
    CX_DEBUG_EXIT_FUNCTION();
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    94
}
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    95
38
hgs
parents: 19
diff changeset
    96
/*!
hgs
parents: 19
diff changeset
    97
* Set frame size.
hgs
parents: 19
diff changeset
    98
* @param size The video frame size.
hgs
parents: 19
diff changeset
    99
*/
hgs
parents: 19
diff changeset
   100
void CxeVideoRecorderUtilitySymbian::setVideoFrameSize(const QSize &size)
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   101
{
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   102
    CX_DEBUG_ENTER_FUNCTION();
38
hgs
parents: 19
diff changeset
   103
    TSize frameSize(size.width(), size.height());
hgs
parents: 19
diff changeset
   104
    QT_TRAP_THROWING(mVideoRecorder->SetVideoFrameSizeL(frameSize));
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   105
    CX_DEBUG_EXIT_FUNCTION();
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   106
}
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   107
38
hgs
parents: 19
diff changeset
   108
/*!
hgs
parents: 19
diff changeset
   109
* Set video frame rate.
hgs
parents: 19
diff changeset
   110
* @param rate The video frame rate.
hgs
parents: 19
diff changeset
   111
*/
hgs
parents: 19
diff changeset
   112
void CxeVideoRecorderUtilitySymbian::setVideoFrameRate(int rate)
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   113
{
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   114
    CX_DEBUG_ENTER_FUNCTION();
38
hgs
parents: 19
diff changeset
   115
    QT_TRAP_THROWING(mVideoRecorder->SetVideoFrameRateL(rate));
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   116
    CX_DEBUG_EXIT_FUNCTION();
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   117
}
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   118
38
hgs
parents: 19
diff changeset
   119
/*!
hgs
parents: 19
diff changeset
   120
* Set video bit rate.
hgs
parents: 19
diff changeset
   121
* @param The video bit rate.
hgs
parents: 19
diff changeset
   122
*/
hgs
parents: 19
diff changeset
   123
void CxeVideoRecorderUtilitySymbian::setVideoBitRate(int rate)
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   124
{
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   125
    CX_DEBUG_ENTER_FUNCTION();
38
hgs
parents: 19
diff changeset
   126
    QT_TRAP_THROWING(mVideoRecorder->SetVideoBitRateL(rate));
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   127
    CX_DEBUG_EXIT_FUNCTION();
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   128
}
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   129
38
hgs
parents: 19
diff changeset
   130
/*!
hgs
parents: 19
diff changeset
   131
* Set if audio recording is on or not.
hgs
parents: 19
diff changeset
   132
* @param enabled Is audio recording enabled.
hgs
parents: 19
diff changeset
   133
*/
hgs
parents: 19
diff changeset
   134
void CxeVideoRecorderUtilitySymbian::setAudioEnabled(bool enabled)
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   135
{
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   136
    CX_DEBUG_ENTER_FUNCTION();
38
hgs
parents: 19
diff changeset
   137
    QT_TRAP_THROWING(mVideoRecorder->SetAudioEnabledL(enabled));
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   138
    CX_DEBUG_EXIT_FUNCTION();
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   139
}
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   140
38
hgs
parents: 19
diff changeset
   141
/*!
hgs
parents: 19
diff changeset
   142
* Set maximum video clip size in bytes.
hgs
parents: 19
diff changeset
   143
* @param sizeInBytes Video clip size limit.
hgs
parents: 19
diff changeset
   144
*/
hgs
parents: 19
diff changeset
   145
void CxeVideoRecorderUtilitySymbian::setVideoMaxSize(int sizeInBytes)
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   146
{
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   147
    CX_DEBUG_ENTER_FUNCTION();
38
hgs
parents: 19
diff changeset
   148
    if (sizeInBytes <= 0) {
hgs
parents: 19
diff changeset
   149
        sizeInBytes = KMMFNoMaxClipSize;
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   150
    }
38
hgs
parents: 19
diff changeset
   151
    QT_TRAP_THROWING(mVideoRecorder->SetMaxClipSizeL(sizeInBytes));
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   152
    CX_DEBUG_EXIT_FUNCTION();
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   153
}
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   154
38
hgs
parents: 19
diff changeset
   155
/*!
hgs
parents: 19
diff changeset
   156
* Close video recorder, freeing its resources.
hgs
parents: 19
diff changeset
   157
*/
hgs
parents: 19
diff changeset
   158
void CxeVideoRecorderUtilitySymbian::close()
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   159
{
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   160
    CX_DEBUG_ENTER_FUNCTION();
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   161
    mVideoRecorder->Close();
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   162
    CX_DEBUG_EXIT_FUNCTION();
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   163
}
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   164
38
hgs
parents: 19
diff changeset
   165
/*!
hgs
parents: 19
diff changeset
   166
* Prepare for video recording.
hgs
parents: 19
diff changeset
   167
*/
hgs
parents: 19
diff changeset
   168
void CxeVideoRecorderUtilitySymbian::prepare()
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   169
{
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   170
    CX_DEBUG_ENTER_FUNCTION();
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   171
    mVideoRecorder->Prepare();
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   172
    CX_DEBUG_EXIT_FUNCTION();
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   173
}
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   174
38
hgs
parents: 19
diff changeset
   175
/*!
hgs
parents: 19
diff changeset
   176
* Start recording.
hgs
parents: 19
diff changeset
   177
*/
hgs
parents: 19
diff changeset
   178
void CxeVideoRecorderUtilitySymbian::record()
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   179
{
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   180
    CX_DEBUG_ENTER_FUNCTION();
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   181
    mVideoRecorder->Record();
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   182
    CX_DEBUG_EXIT_FUNCTION();
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   183
}
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   184
38
hgs
parents: 19
diff changeset
   185
/*!
hgs
parents: 19
diff changeset
   186
* Stop recording.
hgs
parents: 19
diff changeset
   187
* @param asynchronous Use asynchronous (true) or synchronous (false) stopping.
hgs
parents: 19
diff changeset
   188
*/
hgs
parents: 19
diff changeset
   189
void CxeVideoRecorderUtilitySymbian::stop(bool asynchronous)
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   190
{
38
hgs
parents: 19
diff changeset
   191
    CX_DEBUG_ENTER_FUNCTION();
hgs
parents: 19
diff changeset
   192
hgs
parents: 19
diff changeset
   193
    if (asynchronous) {
hgs
parents: 19
diff changeset
   194
        TMMFMessageDestination dest(KCamCControllerImplementationUid, KMMFObjectHandleController);
hgs
parents: 19
diff changeset
   195
        qt_symbian_throwIfError(mVideoRecorder->CustomCommandSync(
hgs
parents: 19
diff changeset
   196
                                    dest, ECamCControllerCCVideoStopAsync, KNullDesC8, KNullDesC8));
hgs
parents: 19
diff changeset
   197
    } else {
hgs
parents: 19
diff changeset
   198
        qt_symbian_throwIfError(mVideoRecorder->Stop());
hgs
parents: 19
diff changeset
   199
    }
hgs
parents: 19
diff changeset
   200
    CX_DEBUG_EXIT_FUNCTION();
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   201
}
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   202
38
hgs
parents: 19
diff changeset
   203
/*!
hgs
parents: 19
diff changeset
   204
* Pause recording.
hgs
parents: 19
diff changeset
   205
*/
hgs
parents: 19
diff changeset
   206
void CxeVideoRecorderUtilitySymbian::pause()
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   207
{
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   208
    CX_DEBUG_ENTER_FUNCTION();
38
hgs
parents: 19
diff changeset
   209
    QT_TRAP_THROWING(mVideoRecorder->PauseL());
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   210
    CX_DEBUG_EXIT_FUNCTION();
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   211
}
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   212
38
hgs
parents: 19
diff changeset
   213
/*!
hgs
parents: 19
diff changeset
   214
* Get estimated available recording time.
hgs
parents: 19
diff changeset
   215
* @return Available recording time estimate in seconds.
hgs
parents: 19
diff changeset
   216
*/
hgs
parents: 19
diff changeset
   217
int CxeVideoRecorderUtilitySymbian::availableRecordingTime()
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   218
{
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   219
    CX_DEBUG_IN_FUNCTION();
38
hgs
parents: 19
diff changeset
   220
    // Convert microseconds to seconds.
hgs
parents: 19
diff changeset
   221
    return mVideoRecorder->RecordTimeAvailable().Int64() * 1.0 / KOneMillion;
hgs
parents: 19
diff changeset
   222
}
hgs
parents: 19
diff changeset
   223
hgs
parents: 19
diff changeset
   224
/*!
hgs
parents: 19
diff changeset
   225
* Get elapsed duration of the recorded video.
hgs
parents: 19
diff changeset
   226
* @return Duration of the video in seconds.
hgs
parents: 19
diff changeset
   227
*/
hgs
parents: 19
diff changeset
   228
int CxeVideoRecorderUtilitySymbian::duration()
hgs
parents: 19
diff changeset
   229
{
hgs
parents: 19
diff changeset
   230
    CX_DEBUG_ENTER_FUNCTION();
hgs
parents: 19
diff changeset
   231
    int time(0);
hgs
parents: 19
diff changeset
   232
    // Convert microseconds to seconds.
hgs
parents: 19
diff changeset
   233
    QT_TRAP_THROWING(time = mVideoRecorder->DurationL().Int64() * 1.0 / KOneMillion);
hgs
parents: 19
diff changeset
   234
    CX_DEBUG_EXIT_FUNCTION();
hgs
parents: 19
diff changeset
   235
    return time;
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   236
}
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   237
38
hgs
parents: 19
diff changeset
   238
/*!
hgs
parents: 19
diff changeset
   239
* Find video controller and format UIDs based on file mime type and preferred supplier.
hgs
parents: 19
diff changeset
   240
* @param fileMimeType MIME type for the video file.
hgs
parents: 19
diff changeset
   241
* @param supplier Preferred supplier.
hgs
parents: 19
diff changeset
   242
* @param controllerId Returns found controller UID.
hgs
parents: 19
diff changeset
   243
* @param formatId Returns found format UID.
hgs
parents: 19
diff changeset
   244
*/
hgs
parents: 19
diff changeset
   245
void CxeVideoRecorderUtilitySymbian::findControllerL(const QString& fileMimeType,
hgs
parents: 19
diff changeset
   246
                                                     const QString& supplier,
hgs
parents: 19
diff changeset
   247
                                                     TUid& controllerId,
hgs
parents: 19
diff changeset
   248
                                                     TUid& formatId)
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   249
{
38
hgs
parents: 19
diff changeset
   250
    CX_DEBUG_ENTER_FUNCTION();
hgs
parents: 19
diff changeset
   251
hgs
parents: 19
diff changeset
   252
    // Retrieve a list of possible controllers from ECOM.
hgs
parents: 19
diff changeset
   253
    // Controller must support recording the requested mime type.
hgs
parents: 19
diff changeset
   254
    // Controller must be provided by preferred supplier.
hgs
parents: 19
diff changeset
   255
    controllerId = KNullUid;
hgs
parents: 19
diff changeset
   256
    formatId = KNullUid;
hgs
parents: 19
diff changeset
   257
hgs
parents: 19
diff changeset
   258
    QByteArray bytes = fileMimeType.toLatin1();
hgs
parents: 19
diff changeset
   259
    TPtrC8 mimeTPtr(reinterpret_cast<const TUint8*>(bytes.constData()), bytes.size());
hgs
parents: 19
diff changeset
   260
    TPtrC16 supplierTPtr(reinterpret_cast<const TUint16*>(supplier.utf16()));
hgs
parents: 19
diff changeset
   261
hgs
parents: 19
diff changeset
   262
    CMMFControllerPluginSelectionParameters* cSelect(NULL);
hgs
parents: 19
diff changeset
   263
    CMMFFormatSelectionParameters* fSelect(NULL);
hgs
parents: 19
diff changeset
   264
    RMMFControllerImplInfoArray controllers;
hgs
parents: 19
diff changeset
   265
hgs
parents: 19
diff changeset
   266
    cSelect = CMMFControllerPluginSelectionParameters::NewLC();
hgs
parents: 19
diff changeset
   267
    fSelect = CMMFFormatSelectionParameters::NewLC();
hgs
parents: 19
diff changeset
   268
hgs
parents: 19
diff changeset
   269
    fSelect->SetMatchToMimeTypeL(mimeTPtr);
hgs
parents: 19
diff changeset
   270
    cSelect->SetRequiredRecordFormatSupportL(*fSelect);
hgs
parents: 19
diff changeset
   271
    cSelect->SetPreferredSupplierL(supplierTPtr,
hgs
parents: 19
diff changeset
   272
                                   CMMFPluginSelectionParameters::EOnlyPreferredSupplierPluginsReturned);
hgs
parents: 19
diff changeset
   273
    cSelect->ListImplementationsL(controllers);
hgs
parents: 19
diff changeset
   274
    CleanupResetAndDestroyPushL(controllers);
hgs
parents: 19
diff changeset
   275
hgs
parents: 19
diff changeset
   276
    if (controllers.Count() <= 0) {
hgs
parents: 19
diff changeset
   277
        CX_DEBUG(("CxeVideoRecorderUtilitySymbian - zero controllers found, leaving!"));
hgs
parents: 19
diff changeset
   278
        User::Leave(KErrNotFound);
hgs
parents: 19
diff changeset
   279
    }
hgs
parents: 19
diff changeset
   280
hgs
parents: 19
diff changeset
   281
    // Inquires the controller about supported formats.
hgs
parents: 19
diff changeset
   282
    // We use the first controller found having index 0.
hgs
parents: 19
diff changeset
   283
    const RMMFFormatImplInfoArray& formats = controllers[0]->RecordFormats();
hgs
parents: 19
diff changeset
   284
hgs
parents: 19
diff changeset
   285
    // Get the first format that supports our mime type.
hgs
parents: 19
diff changeset
   286
    int count(formats.Count());
hgs
parents: 19
diff changeset
   287
    for (int i=0; i<count; i++) {
hgs
parents: 19
diff changeset
   288
        if (formats[i]->SupportsMimeType(mimeTPtr)) {
hgs
parents: 19
diff changeset
   289
            CX_DEBUG(("CxeVideoRecorderUtilitySymbian - found controller"));
hgs
parents: 19
diff changeset
   290
            // Store the format UID
hgs
parents: 19
diff changeset
   291
            formatId = formats[i]->Uid();
hgs
parents: 19
diff changeset
   292
            // Store the controller UID
hgs
parents: 19
diff changeset
   293
            controllerId = controllers[0]->Uid();
hgs
parents: 19
diff changeset
   294
            break;
hgs
parents: 19
diff changeset
   295
        }
hgs
parents: 19
diff changeset
   296
    }
hgs
parents: 19
diff changeset
   297
hgs
parents: 19
diff changeset
   298
    // Check that we found the uids.
hgs
parents: 19
diff changeset
   299
    if (controllerId == KNullUid) {
hgs
parents: 19
diff changeset
   300
        CX_DEBUG(("CxeVideoRecorderUtilitySymbian - no matching controller found, leaving!"));
hgs
parents: 19
diff changeset
   301
        User::Leave(KErrNotFound);
hgs
parents: 19
diff changeset
   302
    }
hgs
parents: 19
diff changeset
   303
hgs
parents: 19
diff changeset
   304
    CleanupStack::PopAndDestroy(3); // controllers, fSelect, cSelect
hgs
parents: 19
diff changeset
   305
    CX_DEBUG_EXIT_FUNCTION();
hgs
parents: 19
diff changeset
   306
}
hgs
parents: 19
diff changeset
   307
hgs
parents: 19
diff changeset
   308
/*!
hgs
parents: 19
diff changeset
   309
* Helper method to convert QString to TFourCC.
hgs
parents: 19
diff changeset
   310
* @param str String to convert.
hgs
parents: 19
diff changeset
   311
*/
hgs
parents: 19
diff changeset
   312
TFourCC CxeVideoRecorderUtilitySymbian::audioFourCC(const QString& str)
hgs
parents: 19
diff changeset
   313
{
hgs
parents: 19
diff changeset
   314
    CX_DEBUG_ENTER_FUNCTION();
hgs
parents: 19
diff changeset
   315
hgs
parents: 19
diff changeset
   316
    QByteArray audioType = str.toAscii();
hgs
parents: 19
diff changeset
   317
hgs
parents: 19
diff changeset
   318
    quint8 char1(' ');
hgs
parents: 19
diff changeset
   319
    quint8 char2(' ');
hgs
parents: 19
diff changeset
   320
    quint8 char3(' ');
hgs
parents: 19
diff changeset
   321
    quint8 char4(' ');
hgs
parents: 19
diff changeset
   322
hgs
parents: 19
diff changeset
   323
    if (audioType.count() > 3) {
hgs
parents: 19
diff changeset
   324
        char1 = audioType[0];
hgs
parents: 19
diff changeset
   325
        char2 = audioType[1];
hgs
parents: 19
diff changeset
   326
        char3 = audioType[2];
hgs
parents: 19
diff changeset
   327
hgs
parents: 19
diff changeset
   328
        if (audioType.count() == 4) {
hgs
parents: 19
diff changeset
   329
            char4 = audioType[3];
hgs
parents: 19
diff changeset
   330
        }
hgs
parents: 19
diff changeset
   331
    }
hgs
parents: 19
diff changeset
   332
hgs
parents: 19
diff changeset
   333
    CX_DEBUG_EXIT_FUNCTION();
hgs
parents: 19
diff changeset
   334
    return TFourCC(char1, char2, char3, char4);
19
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   335
}
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   336
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   337
d9aefe59d544 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   338
// end of file