--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camcordermmfplugin/mediarecorder/Inc/CCMRMediaRecorderImp.h Thu Dec 17 08:51:24 2009 +0200
@@ -0,0 +1,435 @@
+/*
+* Copyright (c) 2004 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: Media recorder implementation header
+*
+*/
+
+
+#ifndef CCMRMEDIARECORDERIMP_H
+#define CCMRMEDIARECORDERIMP_H
+
+// INCLUDES
+#include "CCMRMediaRecorder.h"
+#include "CCMRVideoRecorderClient.h"
+#include "CCMRAudioRecorder.h"
+#include "CCMRActiveOutput.h"
+
+// FORWARD DECLARATION
+class CCMRPerfMonitor;
+class CCMRConfigManager;
+
+
+// CLASS DECLARATION
+
+/**
+* Media recorder implementation
+*
+* @lib CAMCMEDIARECORDER.LIB
+* @since 2.1
+*/
+
+class CCMRMediaRecorderImp : public CCMRMediaRecorder, public MCMRVideoRecorderObserver,
+ public MCMRAudioRecorderObserver, public MCMRActiveOutputObserver
+ {
+
+ public: // Constants
+
+ // Error codes
+ enum TErrorCode
+ {
+ EInternalAssertionFailure = -10000
+ };
+
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CCMRMediaRecorderImp();
+
+ /**
+ * Symbian 2nd phase constructor
+ */
+ void ConstructL();
+
+ /**
+ * Destructor.
+ */
+ ~CCMRMediaRecorderImp();
+
+ public: // new functions
+
+ /**
+ * Internal class for reporting errors to observer using active object
+ * Needed to break the callback chain since controller may call MR::StopL from this callback
+ */
+ class CCMRErrorReporter : public CActive
+ {
+ public: // Constants
+ enum TErrorType
+ {
+ EErrorFatal,
+ EErrorTemp
+ };
+
+ class TCMRError
+ {
+ public:
+ TCMRError(TInt aError, TErrorType aType) : iErrorCode(aError), iErrorType(aType) {};
+
+ public: //data
+ // Error code from the client to be passed
+ TInt iErrorCode;
+ // Error types (fatal/temporary)
+ TErrorType iErrorType;
+ };
+
+
+ public: // Constructors and destructor
+ /**
+ * C++ default constructor.
+ */
+ CCMRErrorReporter(MCMRMediaRecorderObserver *aObserver);
+ /**
+ * Destructor.
+ */
+ ~CCMRErrorReporter();
+
+ public: // New functions
+ /**
+ * Report fatal error to the observer
+ */
+ void FatalError(TInt aError);
+ /**
+ * Report temporary error to the observer
+ */
+ void TemporaryError(TInt aError);
+
+ protected: // from baseclass
+
+ /**
+ * From CActive Does the required action (calls the observer)
+ */
+ void RunL();
+ /**
+ * From CActive Cancels pending actions
+ */
+ void DoCancel();
+
+ private: // data
+ // List of error codes from the client to be passed
+ RArray<TCMRError> iErrors;
+ // Observer for whom to report the error
+ MCMRMediaRecorderObserver *iObserver;
+ // ETrue if RunL of the active object is running => another AO can't change the contents of the object
+ TBool iRunning;
+ };
+
+ public: // Functions from base classes
+
+ /**
+ * From CCMRMediaRecorder
+ */
+ void OpenL(MCMRMediaRecorderObserver *aObserver,
+ MDataSource *aAudioSource,
+ MCMRMediaSink *aSink, TInt aCameraHandle,
+ const TDesC8& aVideoMimeType = KNullDesC8, // video codec to use
+ TFourCC aAudioType = KFourCCNULL); // audio codec to use
+
+ /**
+ * From CCMRMediaRecorder Return current state
+ */
+ inline TRecorderState State() { return iState; }
+
+ // Settings
+
+ /**
+ * From CCMRMediaRecorder Set video codec to be used (overrides the one given in OpenL)
+ */
+ void SetVideoCodecL( const TDesC8& aVideoMimeType );
+
+ /**
+ * From CCMRMediaRecorder Get the used video codec
+ */
+ void GetVideoCodecL( TDes8& aVideoMimeType );
+
+ /**
+ * From CCMRMediaRecorder Get the supported & installed video codecs
+ */
+ void GetSupportedVideoCodecsL( CDesC8Array& aVideoMimeTypes );
+
+ /**
+ * From CCMRMediaRecorder Set audio codec to be used (overrides the one given in OpenL)
+ */
+ void SetAudioCodecL( const TFourCC& aAudioType );
+
+ /**
+ * From CCMRMediaRecorder Get the used audio codec
+ */
+ void GetAudioCodecL( TFourCC& aAudioType );
+
+ /**
+ * From CCMRMediaRecorder Get the supported & installed audio codecs
+ */
+ void GetSupportedAudioCodecsL( RArray<TFourCC>& aAudioTypes );
+
+ /**
+ * From CCMRMediaRecorder Set new maximum total (audio+video) bitrate
+ */
+ inline void SetMaxTotalBitRateL(TInt aBitRate) { iMaxTargetBitRate = aBitRate; }
+
+ /**
+ * From CCMRMediaRecorder Get current maximum total (audio+video) bitrate
+ */
+ inline TInt MaxTotalBitRateL() const { return iMaxTargetBitRate; }
+
+ /**
+ * From CCMRMediaRecorder Set new video frame rate
+ */
+ void SetVideoFrameRateL(TReal32 aFrameRate);
+
+ /**
+ * From CCMRMediaRecorder Get current video frame rate
+ */
+ TReal32 VideoFrameRateL();
+
+ /**
+ * From CCMRMediaRecorder Set new video frame size
+ */
+ void SetVideoFrameSizeL(const TSize& aSize);
+
+ /**
+ * From CCMRMediaRecorder Get current video frame size
+ */
+ void GetVideoFrameSizeL(TSize& aSize) const;
+
+ /**
+ * From CCMRMediaRecorder Set new target video bitrate
+ */
+ void SetVideoBitRateL(TInt aBitRate);
+
+ /**
+ * From CCMRMediaRecorder Get current target video bitrate
+ */
+ TInt VideoBitRateL();
+
+ /**
+ * From CCMRMediaRecorder Set misc video coding options
+ */
+ void SetVideoCodingOptionsL(const TCCMRVideoCodingOptions& aOptions);
+
+ /**
+ * From CCMRMediaRecorder Set video rate control options
+ */
+ void SetVideoRateControlOptionsL(const TRateControlOptions& aOptions);
+
+ /**
+ * From CCMRMediaRecorder Get video rate control options
+ */
+ void GetVideoRateControlOptionsL(TRateControlOptions& aOptions);
+
+ /**
+ * From CCMRMediaRecorder Set new target audio bitrate
+ */
+ void SetAudioBitRateL(TInt aBitRate);
+
+ /**
+ * From CCMRMediaRecorder Gets the current target audio bitrate
+ */
+ TInt AudioBitRateL();
+
+ /**
+ * From CCMRMediaRecorder Toggles audio recording on/off
+ */
+ void SetAudioEnabledL(TBool aEnabled);
+
+ /**
+ * From CCMRMediaRecorder Query whether audio recording is enabled
+ */
+ TBool AudioEnabledL() const;
+
+ /**
+ * From CCMRMediaRecorder Set new audio recording input gain
+ */
+ void SetGainL(TInt aGain);
+
+ /**
+ * From CCMRMediaRecorder Get current audio recording gain
+ */
+ TInt GainL() const;
+
+ /**
+ * From CCMRMediaRecorder Get maximum audio recording gain
+ */
+ TInt MaxGainL() const;
+
+ /**
+ * From CCMRMediaRecorder Set audio priority settings
+ */
+ void SetAudioPriorityL(const TMMFPrioritySettings& aPrioritySettings);
+
+
+ // Recording control
+
+ /**
+ * From CCMRMediaRecorder Prepares the recorder for recording
+ */
+ void PrepareL();
+
+ /**
+ * From CCMRMediaRecorder Starts recording audio and video
+ */
+ void RecordL();
+
+ /**
+ * From CCMRMediaRecorder Stops recording audio and video
+ */
+ void StopL();
+
+ /**
+ * From CCMRMediaRecorder Pauses recording
+ */
+ void PauseL();
+
+ /**
+ * From CCMRMediaRecorder Resumes recording
+ */
+ void ResumeL();
+
+ /**
+ * From CCMRMediaRecorder Called when video recorder state has changed
+ */
+ void MvroStateChange(CCMRRecorderBase::TRecorderState aState);
+
+ /**
+ * From CCMRMediaRecorder Called when an error has occurred in the video recorder
+ */
+ void MvroError(TInt aError);
+
+
+ /**
+ * From MCMRAudioRecorderObserver Informs that audio recorder has changed its state
+ */
+ void MaroStateChange(CCMRRecorderBase::TRecorderState aState);
+
+ /**
+ * From MCMRAudioRecorderObserver Informs about error in audio recorder
+ */
+ void MaroError(TInt aError);
+
+ /**
+ * From MCMRActiveOutputObserver Informs about error in active output
+ */
+ void MaooError(TInt aError);
+
+ // Video encoder overrides
+
+ /**
+ * Set video encoder using its UID. Usage optional.
+ * This overrides Media Recorder internal search for encoder based on set video mime type ( SetVideoCodecL() ).
+ *
+ * @since 3.2.3
+ * @param "aEncoder" "Video encoder UID."
+ * @return void
+ */
+ void SetPreferredVideoEncoderL(TUid& aEncoder);
+
+ /**
+ * Set video encoder output format encapsulation. Usage optional.
+ * This overrides Media Recorder internal default preferences for TVideoDataUnitEncapsulation with H.264/AVC video output.
+ * if used encoder supports multiple encapsulations.
+ *
+ * Default for H.264 / AVC is EDuGenericPayload
+ * Possible values: EDuGenericPayload or EDuElementaryStream
+ *
+ * @since 3.2.3
+ * @param "aCapsulation" "Encapsulation for coded video data units."
+ * @return void
+ */
+ void SetPreferredVideoEncapsulationL(TVideoDataUnitEncapsulation aCapsulation);
+
+ /**
+ * Set video encoder target segment size. Usage optional.
+ * @since 5.2
+ * @param TUint aLayer Layer number
+ * @param TUint aSizeBytes Segment target size in bytes
+ * @param TUint aSizeMacroblocks Segment target size in number of macroblocks per segment
+ * @return TBool
+ */
+ void SetSegmentTargetSizeL(TUint aLayer, TUint aSizeBytes, TUint aSizeMacroblocks );
+
+ private: // Data
+
+ // internal state
+ TRecorderState iState;
+
+ // observer for callbacks
+ MCMRMediaRecorderObserver* iObserver;
+
+ // media sink, e.g. 3GP file composer
+ MCMRMediaSink* iSink;
+
+ // active objects taking care of video and audio output
+ CCMRActiveOutput* iAudioOutput;
+ CCMRActiveOutput* iVideoOutput;
+
+ // MMF audio input, given as parameter
+ MDataSource *iAudioSource;
+
+ // video recorder
+ CCMRVideoRecorderClient* iVideoRecorder;
+
+ // audio recorder
+ CCMRAudioRecorder* iAudioRecorder;
+
+ // is video recording being prepared ?
+ TBool iVideoRecorderPreparing;
+
+ // is audio recording being prepared ?
+ TBool iAudioRecorderPreparing;
+
+ // audio recording flag (on/off)
+ TBool iAudioEnabled;
+
+ // Max bitrate, -1 if not set (=> won't be checked when setting A/V bitrates)
+ TInt iMaxTargetBitRate;
+ // target bitrate, used only to store the actual value when asked from audio/videorecorder
+ TInt iTargetBitRate;
+ // video frame rate, used only to store the actual value when asked from videorecorder
+ TReal32 iFrameRate;
+
+ // Error code saved while waiting for a completion of an async operation
+ TInt iErrorCode;
+
+ // Flags used when waiting async stoppings to complete
+ TBool iVideoStopped;
+ TBool iAudioStopped;
+
+ // Status for EOS / streamend marker
+ TInt iVideoEOSReached;
+
+ // Active object to report errors to the observer. Needed to break the callback chain since the observer may call e.g. MR::Stop in the callback
+ CCMRErrorReporter* iErrorReporter;
+
+ // Performance monitor object
+ CCMRPerfMonitor *iPerfMonitor;
+
+ // Mediarecorder / CamcorderMMFPlugin config manager.
+ CCMRConfigManager* iConfig;
+ };
+
+
+#endif // CCMRMEDIARECORDERIMP_H
+
+// End of file