28
|
1 |
/*
|
|
2 |
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
|
3 |
* All rights reserved.
|
|
4 |
* This component and the accompanying materials are made available
|
|
5 |
* under the terms of "Eclipse Public License v1.0"
|
|
6 |
* which accompanies this distribution, and is available
|
|
7 |
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
|
|
8 |
*
|
|
9 |
* Initial Contributors:
|
|
10 |
* Nokia Corporation - initial contribution.
|
|
11 |
*
|
|
12 |
* Contributors:
|
|
13 |
*
|
|
14 |
* Description: Video recording engine implementation class.
|
|
15 |
*
|
|
16 |
*/
|
|
17 |
|
|
18 |
#ifndef ENGINEVIDEORECORDING_H
|
|
19 |
#define ENGINEVIDEORECORDING_H
|
|
20 |
|
|
21 |
// INCLUDES
|
|
22 |
#include <ecam.h>
|
|
23 |
#include <videorecorder.h>
|
|
24 |
#include <e32std.h>
|
|
25 |
|
|
26 |
// CONSTANTS
|
|
27 |
const TInt KCameraPriority = -1; // Relative priority (-100...100) of camera HW
|
|
28 |
|
|
29 |
// FORWARD DECLARATIONS
|
|
30 |
class CVideoRecorderUtility;
|
|
31 |
class CVideoRecordingQualityLevels;
|
|
32 |
|
|
33 |
|
|
34 |
class TEngineVideoRecordingInfo
|
|
35 |
{
|
|
36 |
public:
|
|
37 |
|
|
38 |
// Camera hardware version present.
|
|
39 |
TVersion iHardwareVersion;
|
|
40 |
// Camera driver software version present.
|
|
41 |
TVersion iSoftwareVersion;
|
|
42 |
// Actual orientation of the camera.
|
|
43 |
TCameraInfo::TCameraOrientation iOrientation;
|
|
44 |
|
|
45 |
// Bitfield of CCamera::TOptions available.
|
|
46 |
TUint32 iOptionsSupported;
|
|
47 |
// Bitfield of CCamera::TFlash modes available.
|
|
48 |
TUint32 iFlashModesSupported;
|
|
49 |
// Bitfield of CCamera::TExposure modes available.
|
|
50 |
TUint32 iExposureModesSupported;
|
|
51 |
// Bitfield of CCamera::TWhiteBalance modes available.
|
|
52 |
TUint32 iWhiteBalanceModesSupported;
|
|
53 |
|
|
54 |
// Minimum zoom value allowed. Must be negative or
|
|
55 |
// zero (for not supported).
|
|
56 |
TInt iMinZoom;
|
|
57 |
// Maximum zoom value allowed. Must be positive or
|
|
58 |
// zero (for not supported).
|
|
59 |
TInt iMaxZoom;
|
|
60 |
// Maximum digital zoom value allowed. Must be positive or
|
|
61 |
// zero (for not supported).
|
|
62 |
TInt iMaxDigitalZoom;
|
|
63 |
|
|
64 |
// Image size multiplier corresponding to minimum zoom value.
|
|
65 |
// Must be between 0 and 1 inclusive.
|
|
66 |
TReal32 iMinZoomFactor;
|
|
67 |
// Image size multiplier corresponding to maximum zoom value.
|
|
68 |
// Must be greater than or equal to 1.
|
|
69 |
TReal32 iMaxZoomFactor;
|
|
70 |
// Image size multiplier corresponding to maximum digital zoom value.
|
|
71 |
// Must be greater than or equal to 1.
|
|
72 |
TReal32 iMaxDigitalZoomFactor;
|
|
73 |
|
|
74 |
// Count of still image capturing sizes allowed.
|
|
75 |
TInt iNumImageSizesSupported;
|
|
76 |
// Bitfield of still image CCamera::TFormat values supported.
|
|
77 |
TUint32 iImageFormatsSupported;
|
|
78 |
|
|
79 |
// Count of still image capturing quality levels initialized.
|
|
80 |
TInt iNumStillQualityLevelsSupported;
|
|
81 |
// Count of video recording quality levels initialized.
|
|
82 |
TInt iNumVideoQualityLevelsSupported;
|
|
83 |
|
|
84 |
// Bitfield of CCaeEngine::TOptions available.
|
|
85 |
TUint32 iCaeOptionsSupported;
|
|
86 |
|
|
87 |
// Integer (e.g. -9) that corresponds to minimum EV compensation value.
|
|
88 |
TInt iMinEvCompensation;
|
|
89 |
// Integer (e.g. 9) that corresponds to maximum EV compensation value.
|
|
90 |
TInt iMaxEvCompensation;
|
|
91 |
// Minimum camera EV compensation value (e.g. -3.0).
|
|
92 |
TReal32 iMinEvCompensationValue;
|
|
93 |
// Maximum camera EV compensation value (e.g. 3.0).
|
|
94 |
TReal32 iMaxEvCompensationValue;
|
|
95 |
};
|
|
96 |
|
|
97 |
class MEngineVideoRecordingObserver
|
|
98 |
{
|
|
99 |
|
|
100 |
public:
|
|
101 |
/**
|
|
102 |
* Called asynchronously when CEngineVideoRecording::Init(), CCaeEngine::CEngineVideoRecording(),
|
|
103 |
* or CEngineVideoRecording::Reserve() completes.
|
|
104 |
* Indicates if Video Recording Engine is ready for operation,
|
|
105 |
* the camera is reserved and its power is switched on.
|
|
106 |
* @param aError Error code KErrNone to indicate success or a standard Symbian OS error code.
|
|
107 |
* @return void
|
|
108 |
*/
|
|
109 |
virtual void MevroInitComplete( TInt aError ) = 0;
|
|
110 |
|
|
111 |
/**
|
|
112 |
* Called asynchronously when preparing of video recording completes
|
|
113 |
* after PrepareVideoRecordingL() has been called.
|
|
114 |
* May be called second time with an error code after a successful preparation
|
|
115 |
* if video recording loses its prepared state for some reason (e.g. audio HW
|
|
116 |
* is reserved for some other application).
|
|
117 |
* @param aError Error code KErrNone to indicate success or a standard Symbian OS error code.
|
|
118 |
* @return void
|
|
119 |
*/
|
|
120 |
virtual void MevroVideoPrepareComplete( TInt aError ) = 0;
|
|
121 |
|
|
122 |
/**
|
|
123 |
* Called (possibly asynchronously) when video recording is running
|
|
124 |
* after CEngineVideoRecording::StartVideoRecording() or
|
|
125 |
* CEngineVideoRecording::ResumeVideoRecording() has been called.
|
|
126 |
* @param aError Error code KErrNone to indicate success or a standard Symbian OS error code.
|
|
127 |
* @return void
|
|
128 |
*/
|
|
129 |
virtual void MevroVideoRecordingOn( TInt aError ) = 0;
|
|
130 |
|
|
131 |
/**
|
|
132 |
* Called (possibly asynchronously) when video recording is paused after
|
|
133 |
* CEngineVideoRecording::PauseVideoRecording() has been called.
|
|
134 |
* @param aError Error code KErrNone to indicate success or a standard Symbian OS error code.
|
|
135 |
* @return void
|
|
136 |
*/
|
|
137 |
virtual void MevroVideoRecordingPaused( TInt aError ) = 0;
|
|
138 |
|
|
139 |
/**
|
|
140 |
* Called (possibly asynchronously) when video recording is completed
|
|
141 |
* after CEngineVideoRecording::StopVideoRecording() has been called or
|
|
142 |
* recording has been completed for some other reason.
|
|
143 |
* @param aError Error code KErrNone to indicate success or a standard Symbian OS error code.
|
|
144 |
* if aError == KErrDiskFull, then disk storage is full.
|
|
145 |
* if aError == KErrCompletion, then clip max size was reached.
|
|
146 |
* @return void
|
|
147 |
*/
|
|
148 |
virtual void MevroVideoRecordingComplete( TInt aError ) = 0;
|
|
149 |
};
|
|
150 |
|
|
151 |
|
|
152 |
NONSHARABLE_CLASS( CEngineVideoRecording ) : public CBase,
|
|
153 |
public MVideoRecorderUtilityObserver,
|
|
154 |
public MCameraObserver,
|
|
155 |
public MCameraObserver2
|
|
156 |
{
|
|
157 |
public:
|
|
158 |
// Possible zooming modes.
|
|
159 |
enum TZoomMode
|
|
160 |
{
|
|
161 |
EZoomModeDigital = 0x00, // Digital zoom (default).
|
|
162 |
EZoomModeOptical = 0x01, // Optical zoom.
|
|
163 |
EZoomModeOpticalDigital = 0x02 // Optical+digital zoom.
|
|
164 |
};
|
|
165 |
|
|
166 |
public:
|
|
167 |
/**
|
|
168 |
* Destructor.
|
|
169 |
*/
|
|
170 |
virtual ~CEngineVideoRecording();
|
|
171 |
|
|
172 |
// Construction and destruction
|
|
173 |
static CEngineVideoRecording* NewL(MEngineVideoRecordingObserver& aObserver,
|
|
174 |
TInt aCameraIndex);
|
|
175 |
|
|
176 |
void InitL();
|
|
177 |
|
|
178 |
void InitVideoRecorderL();
|
|
179 |
|
|
180 |
void SetVideoRecordingFileNameL(
|
|
181 |
const TDesC& aVideoClipFileName );
|
|
182 |
|
|
183 |
void ChangeVideoFileNameL();
|
|
184 |
|
|
185 |
void PrepareVideoRecordingL(
|
|
186 |
TInt aVideoQualityIndex );
|
|
187 |
|
|
188 |
void PrepareVideoRecordingL(
|
|
189 |
const TSize& aFrameSize,
|
|
190 |
TReal32 aFrameRate,
|
|
191 |
TInt aBitRate,
|
|
192 |
TBool aAudioEnabled,
|
|
193 |
const TDesC8& aMimeType,
|
|
194 |
const TDesC& aPreferredSupplier,
|
|
195 |
const TDesC8& aVideoType = KNullDesC8,
|
|
196 |
const TDesC8& aAudioType = KNullDesC8 );
|
|
197 |
|
|
198 |
void PrepareVideoRecordingL(
|
|
199 |
const TSize& aFrameSize,
|
|
200 |
TReal32 aFrameRate,
|
|
201 |
TInt aBitRate,
|
|
202 |
TBool aAudioEnabled,
|
|
203 |
TInt aAudioBitRate,
|
|
204 |
const TDesC8& aMimeType,
|
|
205 |
const TDesC& aPreferredSupplier,
|
|
206 |
const TDesC8& aVideoType,
|
|
207 |
const TDesC8& aAudioType );
|
|
208 |
|
|
209 |
void CloseVideoRecording();
|
|
210 |
|
|
211 |
TInt VideoQualityIndex() const;
|
|
212 |
|
|
213 |
TInt VideoQualityCount() const;
|
|
214 |
|
|
215 |
void GetVideoFrameSize(
|
|
216 |
TInt aVideoQualityIndex,
|
|
217 |
TSize& aSize ) const;
|
|
218 |
|
|
219 |
TReal32 VideoFrameRate(
|
|
220 |
TInt aVideoQualityIndex ) const;
|
|
221 |
|
|
222 |
TInt EstimatedVideoRecordingBitRateL(
|
|
223 |
TInt aVideoQualityIndex ) const;
|
|
224 |
|
|
225 |
void SetVideoClipMaxSizeL(
|
|
226 |
TInt aMaxClipSizeInBytes = 0 );
|
|
227 |
|
|
228 |
TInt VideoClipMaxSize() const;
|
|
229 |
|
|
230 |
void SetVideoAudioL(
|
|
231 |
TBool aAudioEnabled );
|
|
232 |
|
|
233 |
TBool VideoAudio() const;
|
|
234 |
|
|
235 |
void StartVideoRecording();
|
|
236 |
|
|
237 |
void StopVideoRecording();
|
|
238 |
|
|
239 |
void PauseVideoRecording();
|
|
240 |
|
|
241 |
void ResumeVideoRecording();
|
|
242 |
|
|
243 |
TTimeIntervalMicroSeconds RemainingVideoRecordingTime() const;
|
|
244 |
|
|
245 |
TBool IsVideoRecording() const;
|
|
246 |
|
|
247 |
void Reserve();
|
|
248 |
|
|
249 |
void Release();
|
|
250 |
|
|
251 |
void PowerOn();
|
|
252 |
|
|
253 |
void PowerOff();
|
|
254 |
|
|
255 |
void SetZoomModeL(TZoomMode aZoomMode = EZoomModeDigital);
|
|
256 |
|
|
257 |
TZoomMode ZoomMode() const;
|
|
258 |
|
|
259 |
void SetZoomValueL(TInt aZoomValue = 0);
|
|
260 |
|
|
261 |
TInt ZoomValue() const;
|
|
262 |
|
|
263 |
TInt MaxZoomValue() const;
|
|
264 |
TInt MinZoomValue() const;
|
|
265 |
|
|
266 |
void SetBrightnessL(TInt aBrightness = 0);
|
|
267 |
|
|
268 |
TInt Brightness() const;
|
|
269 |
|
|
270 |
void SetContrastL(TInt aContrast = 0);
|
|
271 |
|
|
272 |
TInt Contrast() const;
|
|
273 |
|
|
274 |
void SetExposureModeL(CCamera::TExposure aExposureMode =
|
|
275 |
CCamera::EExposureAuto);
|
|
276 |
|
|
277 |
CCamera::TExposure ExposureMode() const;
|
|
278 |
|
|
279 |
void SetWhiteBalanceModeL(CCamera::TWhiteBalance aWhiteBalanceMode =
|
|
280 |
CCamera::EWBAuto);
|
|
281 |
|
|
282 |
CCamera::TWhiteBalance WhiteBalanceMode() const;
|
|
283 |
|
|
284 |
void SetFlashModeL(CCamera::TFlash aFlashMode = CCamera::EFlashNone);
|
|
285 |
|
|
286 |
CCamera::TFlash FlashMode() const;
|
|
287 |
|
|
288 |
void ResetToDefaultsL();
|
|
289 |
private:
|
|
290 |
void InitializeInfo(const CCamera& aCamera);
|
|
291 |
|
|
292 |
/**
|
|
293 |
* Checks that power is on. If not, then leaves.
|
|
294 |
* @since 2.1
|
|
295 |
* @return void
|
|
296 |
*/
|
|
297 |
void CheckPowerL();
|
|
298 |
|
|
299 |
void CancelVideoRecording();
|
|
300 |
|
|
301 |
void PrepareVideoSettingsL();
|
|
302 |
|
|
303 |
void FindVideoUidsL(const TDesC8& aMimeType,
|
|
304 |
const TDesC& aPreferredSupplier);
|
|
305 |
|
|
306 |
TFourCC ConvertAndSetVideoAudioTypeL(const TDesC8& aAudioType);
|
|
307 |
|
|
308 |
private:
|
|
309 |
|
|
310 |
/**
|
|
311 |
* From MVideoRecorderUtilityObserver
|
|
312 |
* Notification to the client that the opening of the video clip has completed,
|
|
313 |
* successfully, or otherwise.
|
|
314 |
* @param aError
|
|
315 |
* The status of the video recorder after initialisation.
|
|
316 |
* This is either KErrNone if the open has completed successfully,
|
|
317 |
* or one of the system wide error codes.
|
|
318 |
*/
|
|
319 |
virtual void MvruoOpenComplete(TInt aError);
|
|
320 |
|
|
321 |
/**
|
|
322 |
* From MVideoRecorderUtilityObserver
|
|
323 |
* Notification that video recorder is ready to begin recording. This callback
|
|
324 |
* is generated in response to a call to Prepare.
|
|
325 |
* @param aError
|
|
326 |
* This is either KErrNone if the video recorder has been prepared for
|
|
327 |
* recording successfully, or one of the system wide error codes
|
|
328 |
*/
|
|
329 |
virtual void MvruoPrepareComplete(TInt aError);
|
|
330 |
|
|
331 |
/**
|
|
332 |
* From MVideoRecorderUtilityObserver
|
|
333 |
* Notification that video recording has completed. This is not called if
|
|
334 |
* recording is explicitly stopped by calling Stop.
|
|
335 |
* @param aError
|
|
336 |
* This is either KErrNone if recording was completed successfully,
|
|
337 |
* or one of the system wide error codes.
|
|
338 |
*/
|
|
339 |
virtual void MvruoRecordComplete(TInt aError);
|
|
340 |
|
|
341 |
/**
|
|
342 |
* From MVideoRecorderUtilityObserver
|
|
343 |
* General event notification from controller. These events are specified by
|
|
344 |
* the supplier of the controller.
|
|
345 |
* @param aEvent
|
|
346 |
* The event sent by the controller.
|
|
347 |
*/
|
|
348 |
virtual void MvruoEvent(const TMMFEvent& aEvent);
|
|
349 |
|
|
350 |
private: // From Camera Observer / ECam.h
|
|
351 |
|
|
352 |
void ReserveComplete(
|
|
353 |
TInt aError );
|
|
354 |
|
|
355 |
void PowerOnComplete(
|
|
356 |
TInt aError );
|
|
357 |
|
|
358 |
void ViewFinderFrameReady(
|
|
359 |
CFbsBitmap& aFrame ){};
|
|
360 |
|
|
361 |
void ImageReady(
|
|
362 |
CFbsBitmap* aBitmap,
|
|
363 |
HBufC8* aData,
|
|
364 |
TInt aError ){};
|
|
365 |
|
|
366 |
void FrameBufferReady(
|
|
367 |
MFrameBuffer* /*aFrameBuffer*/,
|
|
368 |
TInt /*aError*/ ) {}; // Empty default because not in use.
|
|
369 |
|
|
370 |
private: // From Camera Observer2 / ECam.h
|
|
371 |
|
|
372 |
void HandleEvent(const TECAMEvent& aEvent);
|
|
373 |
|
|
374 |
void ViewFinderReady(MCameraBuffer& aCameraBuffer,TInt aError){};
|
|
375 |
|
|
376 |
void ImageBufferReady(MCameraBuffer& aCameraBuffer,TInt aError){};
|
|
377 |
|
|
378 |
void VideoBufferReady(MCameraBuffer& aCameraBuffer,TInt aError){};
|
|
379 |
protected:
|
|
380 |
|
|
381 |
/**
|
|
382 |
* C++ default constructor.
|
|
383 |
*/
|
|
384 |
CEngineVideoRecording();
|
|
385 |
|
|
386 |
/**
|
|
387 |
* 2nd phase constructor.
|
|
388 |
*/
|
|
389 |
void ConstructL(MEngineVideoRecordingObserver& aObserver,
|
|
390 |
TInt aCameraIndex);
|
|
391 |
|
|
392 |
private:
|
|
393 |
// Camera API implementation object.
|
|
394 |
CCamera* iCamera;
|
|
395 |
|
|
396 |
// Video Recorder API implementation object.
|
|
397 |
CVideoRecorderUtility* iVideoRecorder;
|
|
398 |
|
|
399 |
// Video Recording observer
|
|
400 |
MEngineVideoRecordingObserver* iVideoRecordingObserver;
|
|
401 |
|
|
402 |
// Video Recording Engine info object.
|
|
403 |
TEngineVideoRecordingInfo* iInfo;
|
|
404 |
|
|
405 |
// Video recording quality levels container.
|
|
406 |
CVideoRecordingQualityLevels* iVideoQualityLevels;
|
|
407 |
|
|
408 |
// Video recording frame size.
|
|
409 |
// This is ptr because video recorder is not necessarily initialized.
|
|
410 |
TSize* iVideoFrameSize;
|
|
411 |
|
|
412 |
// Video recording frame size (to be prepared).
|
|
413 |
// This is ptr because video recorder is not necessarily initialized.
|
|
414 |
TSize* iVideoFrameSizePrep;
|
|
415 |
|
|
416 |
// Video clip file name.
|
|
417 |
HBufC* iVideoClipFileName;
|
|
418 |
|
|
419 |
// Video Recorder video type.
|
|
420 |
HBufC8* iVideoType;
|
|
421 |
|
|
422 |
// Boolean indicating if camera module is reserved for the engine.
|
|
423 |
TBool iReserved;
|
|
424 |
|
|
425 |
// Boolean indicating if camera module power is on.
|
|
426 |
TBool iPowerOn;
|
|
427 |
|
|
428 |
// Boolean indicating if video recording is initialized.
|
|
429 |
TBool iVideoInitialized;
|
|
430 |
|
|
431 |
// Boolean indicating if video recording is opened.
|
|
432 |
TBool iVideoOpened;
|
|
433 |
|
|
434 |
// Boolean indicating if video recording is prepared.
|
|
435 |
TBool iVideoPrepared;
|
|
436 |
|
|
437 |
// Boolean indicating if video recording is currently running.
|
|
438 |
TBool iVideoRecordingRunning;
|
|
439 |
|
|
440 |
// Boolean indicating if video recording is currently paused.
|
|
441 |
TBool iVideoRecordingPaused;
|
|
442 |
|
|
443 |
// Video recording quality level index currently prepared.
|
|
444 |
TInt iVideoQualityIndex;
|
|
445 |
|
|
446 |
// Handle to the camera used.
|
|
447 |
TInt iCameraHandle;
|
|
448 |
|
|
449 |
// Video Recorder controller UID.
|
|
450 |
TUid iVideoControllerUid;
|
|
451 |
|
|
452 |
// Video Recorder format UID.
|
|
453 |
TUid iVideoFormatUid;
|
|
454 |
|
|
455 |
// Video Recorder audio type.
|
|
456 |
TFourCC iVideoAudioType;
|
|
457 |
|
|
458 |
//// Camera module settings related variables. ////
|
|
459 |
|
|
460 |
// Current zoom mode.
|
|
461 |
TZoomMode iZoomMode;
|
|
462 |
|
|
463 |
// Current zoom value.
|
|
464 |
TInt iZoomValue;
|
|
465 |
|
|
466 |
// Current brightness value.
|
|
467 |
TInt iBrightness;
|
|
468 |
|
|
469 |
// Current contrast value.
|
|
470 |
TInt iContrast;
|
|
471 |
|
|
472 |
// Camera exposure mode.
|
|
473 |
CCamera::TExposure iExposureMode;
|
|
474 |
|
|
475 |
// Camera white balance mode.
|
|
476 |
CCamera::TWhiteBalance iWhiteBalanceMode;
|
|
477 |
|
|
478 |
// Camera flash mode.
|
|
479 |
CCamera::TFlash iFlashMode;
|
|
480 |
//// Video recording parameters prepared. ////
|
|
481 |
|
|
482 |
// Video recording frame rate.
|
|
483 |
TReal32 iVideoFrameRate;
|
|
484 |
|
|
485 |
// Video recording bit rate.
|
|
486 |
TInt iVideoBitRate;
|
|
487 |
|
|
488 |
// Boolean indicating if audio is enabled with video recording.
|
|
489 |
TBool iVideoAudioEnabled;
|
|
490 |
|
|
491 |
// Video recording audio bit rate.
|
|
492 |
TInt iVideoAudioBitRate;
|
|
493 |
|
|
494 |
// Video recording maximum clip size in bytes.
|
|
495 |
TInt iMaxClipSizeInBytes;
|
|
496 |
|
|
497 |
//// Video recording parameters to be prepared. ////
|
|
498 |
|
|
499 |
// Video recording frame rate (to be prepared).
|
|
500 |
TReal32 iVideoFrameRatePrep;
|
|
501 |
|
|
502 |
// Video recording bit rate (to be prepared).
|
|
503 |
TInt iVideoBitRatePrep;
|
|
504 |
|
|
505 |
// Boolean indicating if audio is enabled with video recording (to be prepared).
|
|
506 |
TBool iVideoAudioEnabledPrep;
|
|
507 |
|
|
508 |
// Video recording audio bit rate (to be prepared).
|
|
509 |
TInt iVideoAudioBitRatePrep;
|
|
510 |
|
|
511 |
// Video recording maximum clip size in bytes (to be prepared).
|
|
512 |
TInt iMaxClipSizeInBytesPrep;
|
|
513 |
|
|
514 |
// Boolean indicating if parameters are/were prepared in video recording preparation..
|
|
515 |
TBool iPrepPars;
|
|
516 |
|
|
517 |
// Boolean indicating if video audio bit rate should be prepared.
|
|
518 |
TBool iPrepareVideoAudioBitRate;
|
|
519 |
};
|
|
520 |
|
|
521 |
|
|
522 |
|
|
523 |
|
|
524 |
#endif //ENGINEVIDEORECORDING_H
|